summaryrefslogtreecommitdiff
path: root/applets
diff options
context:
space:
mode:
Diffstat (limited to 'applets')
-rw-r--r--applets/Makefile.am7
-rw-r--r--applets/Makefile.in677
-rw-r--r--applets/clock/Makefile.am205
-rw-r--r--applets/clock/Makefile.in1595
-rw-r--r--applets/clock/calendar-client.c2169
-rw-r--r--applets/clock/calendar-client.h153
-rw-r--r--applets/clock/calendar-debug.h56
-rw-r--r--applets/clock/calendar-sources.c658
-rw-r--r--applets/clock/calendar-sources.h70
-rw-r--r--applets/clock/calendar-window.c2125
-rw-r--r--applets/clock/calendar-window.h84
-rw-r--r--applets/clock/clock-face.c462
-rw-r--r--applets/clock/clock-face.h64
-rw-r--r--applets/clock/clock-location-tile.c728
-rw-r--r--applets/clock/clock-location-tile.h51
-rw-r--r--applets/clock/clock-location.c894
-rw-r--r--applets/clock/clock-location.h87
-rw-r--r--applets/clock/clock-map.c700
-rw-r--r--applets/clock/clock-map.h43
-rw-r--r--applets/clock/clock-marshallers.list3
-rw-r--r--applets/clock/clock-menu.xml8
-rw-r--r--applets/clock/clock-sunpos.c197
-rw-r--r--applets/clock/clock-sunpos.h8
-rw-r--r--applets/clock/clock-utils.c127
-rw-r--r--applets/clock/clock-utils.h57
-rw-r--r--applets/clock/clock.c3745
-rw-r--r--applets/clock/clock.h41
-rw-r--r--applets/clock/clock.schemas.in313
-rw-r--r--applets/clock/clock.ui1136
-rw-r--r--applets/clock/org.mate.panel.ClockApplet.mate-panel-applet.in.in18
-rw-r--r--applets/clock/org.mate.panel.applet.ClockAppletFactory.service.in3
-rw-r--r--applets/clock/pixmaps/Makefile.am21
-rw-r--r--applets/clock/pixmaps/Makefile.in537
-rw-r--r--applets/clock/pixmaps/clock-calendar-icon.pngbin0 -> 653 bytes
-rw-r--r--applets/clock/pixmaps/clock-face-large.svg291
-rw-r--r--applets/clock/pixmaps/clock-face-small-day.svg290
-rw-r--r--applets/clock/pixmaps/clock-face-small-evening.svg290
-rw-r--r--applets/clock/pixmaps/clock-face-small-morning.svg290
-rw-r--r--applets/clock/pixmaps/clock-face-small-night.svg291
-rw-r--r--applets/clock/pixmaps/clock-face-small.svg290
-rw-r--r--applets/clock/pixmaps/clock-map-location-current.pngbin0 -> 379 bytes
-rw-r--r--applets/clock/pixmaps/clock-map-location-hilight.pngbin0 -> 346 bytes
-rw-r--r--applets/clock/pixmaps/clock-map-location-marker.pngbin0 -> 283 bytes
-rw-r--r--applets/clock/pixmaps/clock-map.pngbin0 -> 25244 bytes
-rw-r--r--applets/clock/pixmaps/clock-map.svg755
-rw-r--r--applets/clock/set-timezone.c291
-rw-r--r--applets/clock/set-timezone.h40
-rw-r--r--applets/clock/system-timezone.c1048
-rw-r--r--applets/clock/system-timezone.h87
-rw-r--r--applets/clock/test-system-timezone.c122
-rw-r--r--applets/fish/Makefile.am111
-rw-r--r--applets/fish/fish-menu.xml4
-rw-r--r--applets/fish/fish.c2012
-rw-r--r--applets/fish/fish.schemas.in91
-rw-r--r--applets/fish/fish.ui444
-rw-r--r--applets/fish/fishanim.pngbin0 -> 4859 bytes
-rw-r--r--applets/fish/footguy.pngbin0 -> 176 bytes
-rw-r--r--applets/fish/monkey.pngbin0 -> 5063 bytes
-rw-r--r--applets/fish/nyan.pngbin0 -> 1211 bytes
-rw-r--r--applets/fish/oldwanda.pngbin0 -> 12996 bytes
-rw-r--r--applets/fish/org.mate.panel.FishApplet.mate-panel-applet.in.in17
-rw-r--r--applets/fish/org.mate.panel.applet.FishAppletFactory.service.in3
-rw-r--r--applets/fish/wanda.pngbin0 -> 13683 bytes
-rw-r--r--applets/fish/wanda.svg3724
-rw-r--r--applets/notification_area/Makefile.am112
-rw-r--r--applets/notification_area/Makefile.in964
-rw-r--r--applets/notification_area/fixedtip.c269
-rw-r--r--applets/notification_area/fixedtip.h72
-rw-r--r--applets/notification_area/main.c267
-rw-r--r--applets/notification_area/na-marshal.c167
-rw-r--r--applets/notification_area/na-marshal.h36
-rw-r--r--applets/notification_area/na-marshal.list3
-rw-r--r--applets/notification_area/na-tray-child.c539
-rw-r--r--applets/notification_area/na-tray-child.h75
-rw-r--r--applets/notification_area/na-tray-manager.c859
-rw-r--r--applets/notification_area/na-tray-manager.h101
-rw-r--r--applets/notification_area/na-tray.c837
-rw-r--r--applets/notification_area/na-tray.h71
-rw-r--r--applets/notification_area/notification-area-menu.xml3
-rw-r--r--applets/notification_area/org.mate.panel.NotificationAreaApplet.mate-panel-applet.in.in17
-rw-r--r--applets/notification_area/org.mate.panel.applet.NotificationAreaAppletFactory.service.in3
-rw-r--r--applets/notification_area/testtray.c220
-rw-r--r--applets/wncklet/Makefile.am115
-rw-r--r--applets/wncklet/Makefile.in1075
-rw-r--r--applets/wncklet/org.mate.panel.Wncklet.mate-panel-applet.in.in50
-rw-r--r--applets/wncklet/org.mate.panel.applet.WnckletFactory.service.in3
-rw-r--r--applets/wncklet/showdesktop-menu.xml3
-rw-r--r--applets/wncklet/showdesktop.c533
-rw-r--r--applets/wncklet/showdesktop.h42
-rw-r--r--applets/wncklet/window-list-menu.xml4
-rw-r--r--applets/wncklet/window-list.c749
-rw-r--r--applets/wncklet/window-list.h25
-rw-r--r--applets/wncklet/window-list.schemas.in77
-rw-r--r--applets/wncklet/window-list.ui443
-rw-r--r--applets/wncklet/window-menu-menu.xml3
-rw-r--r--applets/wncklet/window-menu.c269
-rw-r--r--applets/wncklet/window-menu.h45
-rw-r--r--applets/wncklet/wncklet.c144
-rw-r--r--applets/wncklet/wncklet.h48
-rw-r--r--applets/wncklet/workspace-switcher-menu.xml6
-rw-r--r--applets/wncklet/workspace-switcher.c932
-rw-r--r--applets/wncklet/workspace-switcher.h25
-rw-r--r--applets/wncklet/workspace-switcher.schemas.in52
-rw-r--r--applets/wncklet/workspace-switcher.ui323
104 files changed, 37114 insertions, 0 deletions
diff --git a/applets/Makefile.am b/applets/Makefile.am
new file mode 100644
index 00000000..e1e952db
--- /dev/null
+++ b/applets/Makefile.am
@@ -0,0 +1,7 @@
+SUBDIRS = \
+ clock \
+ fish \
+ notification_area \
+ wncklet
+
+-include $(top_srcdir)/git.mk
diff --git a/applets/Makefile.in b/applets/Makefile.in
new file mode 100644
index 00000000..b95402fe
--- /dev/null
+++ b/applets/Makefile.in
@@ -0,0 +1,677 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = applets
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/d-type.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(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)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CLOCK_CFLAGS = @CLOCK_CFLAGS@
+CLOCK_EDS_ICONDIR = @CLOCK_EDS_ICONDIR@
+CLOCK_LIBS = @CLOCK_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGG_SMCLIENT_CFLAGS = @EGG_SMCLIENT_CFLAGS@
+EGG_SMCLIENT_LIBS = @EGG_SMCLIENT_LIBS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FISH_CFLAGS = @FISH_CFLAGS@
+FISH_LIBS = @FISH_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_QUERYMODULES = @GIO_QUERYMODULES@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBMATE_PANEL_APPLET_CFLAGS = @LIBMATE_PANEL_APPLET_CFLAGS@
+LIBMATE_PANEL_APPLET_LIBS = @LIBMATE_PANEL_APPLET_LIBS@
+LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS@
+LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MATE_PANEL_APPLET_LT_VERSION = @LIB_MATE_PANEL_APPLET_LT_VERSION@
+LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION = @LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECOMPONENT_ACT_IDLDIR = @MATECOMPONENT_ACT_IDLDIR@
+MATECOMPONENT_CFLAGS = @MATECOMPONENT_CFLAGS@
+MATECOMPONENT_IDLDIR = @MATECOMPONENT_IDLDIR@
+MATECOMPONENT_LIBS = @MATECOMPONENT_LIBS@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MATECORBA_IDL = @MATECORBA_IDL@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NETWORK_MANAGER_CFLAGS = @NETWORK_MANAGER_CFLAGS@
+NETWORK_MANAGER_LIBS = @NETWORK_MANAGER_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOTIFICATION_AREA_CFLAGS = @NOTIFICATION_AREA_CFLAGS@
+NOTIFICATION_AREA_LIBS = @NOTIFICATION_AREA_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANEL_CFLAGS = @PANEL_CFLAGS@
+PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE = @PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+PANEL_LIBS = @PANEL_LIBS@
+PANEL_MODULE_MATECOMPONENT_CFLAGS = @PANEL_MODULE_MATECOMPONENT_CFLAGS@
+PANEL_MODULE_MATECOMPONENT_LIBS = @PANEL_MODULE_MATECOMPONENT_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+REBUILD = @REBUILD@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TZ_CFLAGS = @TZ_CFLAGS@
+TZ_LIBS = @TZ_LIBS@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WNCKLET_CFLAGS = @WNCKLET_CFLAGS@
+WNCKLET_LIBS = @WNCKLET_LIBS@
+XGETTEXT = @XGETTEXT@
+XMKMF = @XMKMF@
+XRANDR_CFLAGS = @XRANDR_CFLAGS@
+XRANDR_LIBS = @XRANDR_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+appletsdir = @appletsdir@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+modulesdir = @modulesdir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = \
+ clock \
+ fish \
+ notification_area \
+ wncklet
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applets/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applets/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags 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 installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am
+
+
+-include $(top_srcdir)/git.mk
+
+# 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.
+.NOEXPORT:
diff --git a/applets/clock/Makefile.am b/applets/clock/Makefile.am
new file mode 100644
index 00000000..afda6eb2
--- /dev/null
+++ b/applets/clock/Makefile.am
@@ -0,0 +1,205 @@
+SUBDIRS = pixmaps
+
+noinst_LTLIBRARIES = libsystem-timezone.la
+noinst_PROGRAMS = test-system-timezone
+
+AM_CPPFLAGS = \
+ $(TZ_CFLAGS) \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+AM_CFLAGS = $(WARN_CFLAGS)
+
+libsystem_timezone_la_SOURCES = \
+ system-timezone.c \
+ system-timezone.h
+libsystem_timezone_la_LIBADD = $(TZ_LIBS)
+
+if HAVE_LIBECAL
+CALENDAR_SOURCES = \
+ calendar-client.c \
+ calendar-client.h \
+ calendar-sources.c \
+ calendar-sources.h \
+ calendar-debug.h
+endif
+
+CLOCK_SOURCES = \
+ calendar-window.c \
+ calendar-window.h \
+ clock.c \
+ clock.h \
+ clock-face.c \
+ clock-face.h \
+ clock-location.c \
+ clock-location.h \
+ clock-location-tile.c \
+ clock-location-tile.h \
+ clock-map.c \
+ clock-map.h \
+ clock-sunpos.c \
+ clock-sunpos.h \
+ clock-utils.c \
+ clock-utils.h \
+ set-timezone.c \
+ set-timezone.h \
+ $(BUILT_SOURCES) \
+ $(CALENDAR_SOURCES)
+
+CLOCK_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ $(LIBMATE_PANEL_APPLET_CFLAGS) \
+ $(CLOCK_CFLAGS) \
+ -I$(srcdir)/../../libmate-panel-applet \
+ -I$(top_builddir)/libmate-panel-applet \
+ -DMATELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
+ -DBUILDERDIR=\""$(uidir)"\" \
+ -DCLOCK_MENU_UI_DIR=\""$(xmluidir)"\" \
+ -DICONDIR=\""$(datadir)/mate-panel/pixmaps"\" \
+ -DCLOCK_EDS_ICONDIR="\"$(CLOCK_EDS_ICONDIR)\"" \
+ -DMATEWEATHER_I_KNOW_THIS_IS_UNSTABLE
+
+CLOCK_LDADD = \
+ ../../libmate-panel-applet/libmate-panel-applet-3.la \
+ $(CLOCK_LIBS) \
+ $(LIBMATE_PANEL_APPLET_LIBS) \
+ libsystem-timezone.la \
+ -lm
+
+test_system_timezone_SOURCES = \
+ test-system-timezone.c
+test_system_timezone_LDADD = libsystem-timezone.la
+
+if CLOCK_INPROCESS
+APPLET_IN_PROCESS = true
+APPLET_LOCATION = $(pkglibdir)/libclock-applet.so
+
+clock_appletlibdir = $(pkglibdir)
+clock_appletlib_LTLIBRARIES = libclock-applet.la
+libclock_applet_la_SOURCES = $(CLOCK_SOURCES)
+libclock_applet_la_CPPFLAGS = $(CLOCK_CPPFLAGS)
+libclock_applet_la_LIBADD = $(CLOCK_LDADD)
+libclock_applet_la_LDFLAGS = -module -avoid-version
+libclock_applet_la_CFLAGS = $(AM_CFLAGS)
+$(libclock_applet_la_OBJECTS): $(BUILT_SOURCES)
+else
+APPLET_IN_PROCESS = false
+APPLET_LOCATION = $(libexecdir)/clock-applet
+
+libexec_PROGRAMS = clock-applet
+clock_applet_SOURCES = $(CLOCK_SOURCES)
+clock_applet_CPPFLAGS = $(CLOCK_CPPFLAGS)
+clock_applet_LDADD = $(CLOCK_LDADD)
+clock_applet_CFLAGS = $(AM_CFLAGS)
+$(clock_applet_OBJECTS): $(BUILT_SOURCES)
+endif
+
+clock-marshallers.c: clock-marshallers.list
+ $(AM_V_GEN)glib-genmarshal --prefix _clock_marshal --header --body --internal $< > $@
+
+clock-marshallers.h: clock-marshallers.list
+ $(AM_V_GEN)glib-genmarshal --prefix _clock_marshal --header --internal $< > $@
+
+clock_enum_headers = \
+ $(top_srcdir)/applets/clock/clock-utils.h
+
+clock-typebuiltins.c: @REBUILD@ $(clock_enum_headers)
+ $(AM_V_GEN)glib-mkenums \
+ --fhead "#include <glib-object.h>\n" \
+ --fhead "#include \"clock-typebuiltins.h\"\n\n" \
+ --fprod "\n/* enumerations from \"@filename@\" */" \
+ --fprod "\n#include \"@filename@\"\n" \
+ --vhead "static const GEnumValue _@enum_name@_values[] = {" \
+ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+ --vtail " { 0, NULL, NULL }\n};\n\n" \
+ --vtail "GType\n@enum_name@_get_type (void)\n{\n" \
+ --vtail " static GType type = 0;\n\n" \
+ --vtail " if (!type)\n" \
+ --vtail " type = g_enum_register_static (\"@EnumName@\", _@enum_name@_values);\n\n" \
+ --vtail " return type;\n}\n\n" \
+ $(clock_enum_headers) > $@
+
+clock-typebuiltins.h: @REBUILD@ $(clock_enum_headers)
+ $(AM_V_GEN)glib-mkenums \
+ --fhead "#ifndef __CLOCK_TYPEBUILTINS_H__\n" \
+ --fhead "#define __CLOCK_TYPEBUILTINS_H__ 1\n\n" \
+ --fhead "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n" \
+ --ftail "#ifdef __cplusplus\n}\n#endif\n\n" \
+ --ftail "#endif /* __CLOCK_TYPEBUILTINS_H__ */\n" \
+ --fprod "\n/* --- @filename@ --- */" \
+ --eprod "#define CLOCK_TYPE_@ENUMSHORT@ @enum_name@_get_type()\n" \
+ --eprod "GType @enum_name@_get_type (void);\n" \
+ $(clock_enum_headers) > $@
+
+BUILT_SOURCES = \
+ clock-marshallers.c \
+ clock-marshallers.h \
+ clock-typebuiltins.c \
+ clock-typebuiltins.h
+
+appletdir = $(datadir)/mate-panel/applets
+applet_in_files = org.mate.panel.ClockApplet.mate-panel-applet.in
+applet_DATA = $(applet_in_files:.mate-panel-applet.in=.mate-panel-applet)
+
+$(applet_in_files): $(applet_in_files).in Makefile
+ $(AM_V_GEN)sed \
+ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+ -e "s|\@IN_PROCESS\@|$(APPLET_IN_PROCESS)|" \
+ -e "s|\@VERSION\@|$(PACKAGE_VERSION)|" \
+ $< > $@
+
+@PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+
+if !CLOCK_INPROCESS
+servicedir = $(datadir)/dbus-1/services
+service_in_files = org.mate.panel.applet.ClockAppletFactory.service.in
+service_DATA = $(service_in_files:.service.in=.service)
+
+org.mate.panel.applet.ClockAppletFactory.service: $(service_in_files)
+ $(AM_V_GEN)sed \
+ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+ $< > $@
+endif
+
+uidir = $(datadir)/mate-panel/ui
+ui_DATA = clock.ui
+
+xmluidir = $(datadir)/mate-panel/ui
+xmlui_DATA = clock-menu.xml
+
+schemasdir = $(MATECONF_SCHEMA_FILE_DIR)
+schemas_in_files = clock.schemas.in
+schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
+
+@INTLTOOL_SCHEMAS_RULE@
+
+if MATECONF_SCHEMAS_INSTALL
+install-data-local:
+ if test -z "$(DESTDIR)" ; then \
+ for p in $(schemas_DATA) ; do \
+ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(top_builddir)/applets/clock/$$p ; \
+ done \
+ fi
+uninstall-local:
+ for p in $(schema_DATA) ; do \
+ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-uninstall-rule $(top_builddir)/applets/clock/$$p ; \
+ done
+endif
+
+EXTRA_DIST = \
+ org.mate.panel.ClockApplet.mate-panel-applet.in.in \
+ $(schemas_in_files) \
+ $(xmlui_DATA) \
+ $(ui_DATA) \
+ clock-marshallers.list \
+ $(service_in_files)
+
+CLEANFILES = \
+ $(BUILT_SOURCES) \
+ $(applet_DATA) \
+ $(applet_DATA).in \
+ $(service_DATA) \
+ $(schemas_DATA) \
+ $(polkit_DATA) \
+ $(dbus_services_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/applets/clock/Makefile.in b/applets/clock/Makefile.in
new file mode 100644
index 00000000..e51ce949
--- /dev/null
+++ b/applets/clock/Makefile.in
@@ -0,0 +1,1595 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = test-system-timezone$(EXEEXT)
+@CLOCK_INPROCESS_FALSE@libexec_PROGRAMS = clock-applet$(EXEEXT)
+subdir = applets/clock
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/d-type.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(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)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+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)$(clock_appletlibdir)" \
+ "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(appletdir)" \
+ "$(DESTDIR)$(schemasdir)" "$(DESTDIR)$(servicedir)" \
+ "$(DESTDIR)$(uidir)" "$(DESTDIR)$(xmluidir)"
+LTLIBRARIES = $(clock_appletlib_LTLIBRARIES) $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = \
+ ../../libmate-panel-applet/libmate-panel-applet-3.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ libsystem-timezone.la
+@CLOCK_INPROCESS_TRUE@libclock_applet_la_DEPENDENCIES = \
+@CLOCK_INPROCESS_TRUE@ $(am__DEPENDENCIES_2)
+am__libclock_applet_la_SOURCES_DIST = calendar-window.c \
+ calendar-window.h clock.c clock.h clock-face.c clock-face.h \
+ clock-location.c clock-location.h clock-location-tile.c \
+ clock-location-tile.h clock-map.c clock-map.h clock-sunpos.c \
+ clock-sunpos.h clock-utils.c clock-utils.h set-timezone.c \
+ set-timezone.h clock-marshallers.c clock-marshallers.h \
+ clock-typebuiltins.c clock-typebuiltins.h calendar-client.c \
+ calendar-client.h calendar-sources.c calendar-sources.h \
+ calendar-debug.h
+am__objects_1 = libclock_applet_la-clock-marshallers.lo \
+ libclock_applet_la-clock-typebuiltins.lo
+@HAVE_LIBECAL_TRUE@am__objects_2 = \
+@HAVE_LIBECAL_TRUE@ libclock_applet_la-calendar-client.lo \
+@HAVE_LIBECAL_TRUE@ libclock_applet_la-calendar-sources.lo
+am__objects_3 = libclock_applet_la-calendar-window.lo \
+ libclock_applet_la-clock.lo libclock_applet_la-clock-face.lo \
+ libclock_applet_la-clock-location.lo \
+ libclock_applet_la-clock-location-tile.lo \
+ libclock_applet_la-clock-map.lo \
+ libclock_applet_la-clock-sunpos.lo \
+ libclock_applet_la-clock-utils.lo \
+ libclock_applet_la-set-timezone.lo $(am__objects_1) \
+ $(am__objects_2)
+@CLOCK_INPROCESS_TRUE@am_libclock_applet_la_OBJECTS = \
+@CLOCK_INPROCESS_TRUE@ $(am__objects_3)
+libclock_applet_la_OBJECTS = $(am_libclock_applet_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libclock_applet_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libclock_applet_la_CFLAGS) $(CFLAGS) \
+ $(libclock_applet_la_LDFLAGS) $(LDFLAGS) -o $@
+@CLOCK_INPROCESS_TRUE@am_libclock_applet_la_rpath = -rpath \
+@CLOCK_INPROCESS_TRUE@ $(clock_appletlibdir)
+libsystem_timezone_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_libsystem_timezone_la_OBJECTS = system-timezone.lo
+libsystem_timezone_la_OBJECTS = $(am_libsystem_timezone_la_OBJECTS)
+PROGRAMS = $(libexec_PROGRAMS) $(noinst_PROGRAMS)
+am__clock_applet_SOURCES_DIST = calendar-window.c calendar-window.h \
+ clock.c clock.h clock-face.c clock-face.h clock-location.c \
+ clock-location.h clock-location-tile.c clock-location-tile.h \
+ clock-map.c clock-map.h clock-sunpos.c clock-sunpos.h \
+ clock-utils.c clock-utils.h set-timezone.c set-timezone.h \
+ clock-marshallers.c clock-marshallers.h clock-typebuiltins.c \
+ clock-typebuiltins.h calendar-client.c calendar-client.h \
+ calendar-sources.c calendar-sources.h calendar-debug.h
+am__objects_4 = clock_applet-clock-marshallers.$(OBJEXT) \
+ clock_applet-clock-typebuiltins.$(OBJEXT)
+@HAVE_LIBECAL_TRUE@am__objects_5 = \
+@HAVE_LIBECAL_TRUE@ clock_applet-calendar-client.$(OBJEXT) \
+@HAVE_LIBECAL_TRUE@ clock_applet-calendar-sources.$(OBJEXT)
+am__objects_6 = clock_applet-calendar-window.$(OBJEXT) \
+ clock_applet-clock.$(OBJEXT) clock_applet-clock-face.$(OBJEXT) \
+ clock_applet-clock-location.$(OBJEXT) \
+ clock_applet-clock-location-tile.$(OBJEXT) \
+ clock_applet-clock-map.$(OBJEXT) \
+ clock_applet-clock-sunpos.$(OBJEXT) \
+ clock_applet-clock-utils.$(OBJEXT) \
+ clock_applet-set-timezone.$(OBJEXT) $(am__objects_4) \
+ $(am__objects_5)
+@CLOCK_INPROCESS_FALSE@am_clock_applet_OBJECTS = $(am__objects_6)
+clock_applet_OBJECTS = $(am_clock_applet_OBJECTS)
+@CLOCK_INPROCESS_FALSE@clock_applet_DEPENDENCIES = \
+@CLOCK_INPROCESS_FALSE@ $(am__DEPENDENCIES_2)
+clock_applet_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(clock_applet_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_test_system_timezone_OBJECTS = test-system-timezone.$(OBJEXT)
+test_system_timezone_OBJECTS = $(am_test_system_timezone_OBJECTS)
+test_system_timezone_DEPENDENCIES = libsystem-timezone.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+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 = $(libclock_applet_la_SOURCES) \
+ $(libsystem_timezone_la_SOURCES) $(clock_applet_SOURCES) \
+ $(test_system_timezone_SOURCES)
+DIST_SOURCES = $(am__libclock_applet_la_SOURCES_DIST) \
+ $(libsystem_timezone_la_SOURCES) \
+ $(am__clock_applet_SOURCES_DIST) \
+ $(test_system_timezone_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+DATA = $(applet_DATA) $(schemas_DATA) $(service_DATA) $(ui_DATA) \
+ $(xmlui_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CLOCK_CFLAGS = @CLOCK_CFLAGS@
+CLOCK_EDS_ICONDIR = @CLOCK_EDS_ICONDIR@
+CLOCK_LIBS = @CLOCK_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGG_SMCLIENT_CFLAGS = @EGG_SMCLIENT_CFLAGS@
+EGG_SMCLIENT_LIBS = @EGG_SMCLIENT_LIBS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FISH_CFLAGS = @FISH_CFLAGS@
+FISH_LIBS = @FISH_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_QUERYMODULES = @GIO_QUERYMODULES@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBMATE_PANEL_APPLET_CFLAGS = @LIBMATE_PANEL_APPLET_CFLAGS@
+LIBMATE_PANEL_APPLET_LIBS = @LIBMATE_PANEL_APPLET_LIBS@
+LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS@
+LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MATE_PANEL_APPLET_LT_VERSION = @LIB_MATE_PANEL_APPLET_LT_VERSION@
+LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION = @LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECOMPONENT_ACT_IDLDIR = @MATECOMPONENT_ACT_IDLDIR@
+MATECOMPONENT_CFLAGS = @MATECOMPONENT_CFLAGS@
+MATECOMPONENT_IDLDIR = @MATECOMPONENT_IDLDIR@
+MATECOMPONENT_LIBS = @MATECOMPONENT_LIBS@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MATECORBA_IDL = @MATECORBA_IDL@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NETWORK_MANAGER_CFLAGS = @NETWORK_MANAGER_CFLAGS@
+NETWORK_MANAGER_LIBS = @NETWORK_MANAGER_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOTIFICATION_AREA_CFLAGS = @NOTIFICATION_AREA_CFLAGS@
+NOTIFICATION_AREA_LIBS = @NOTIFICATION_AREA_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANEL_CFLAGS = @PANEL_CFLAGS@
+PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE = @PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+PANEL_LIBS = @PANEL_LIBS@
+PANEL_MODULE_MATECOMPONENT_CFLAGS = @PANEL_MODULE_MATECOMPONENT_CFLAGS@
+PANEL_MODULE_MATECOMPONENT_LIBS = @PANEL_MODULE_MATECOMPONENT_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+REBUILD = @REBUILD@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TZ_CFLAGS = @TZ_CFLAGS@
+TZ_LIBS = @TZ_LIBS@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WNCKLET_CFLAGS = @WNCKLET_CFLAGS@
+WNCKLET_LIBS = @WNCKLET_LIBS@
+XGETTEXT = @XGETTEXT@
+XMKMF = @XMKMF@
+XRANDR_CFLAGS = @XRANDR_CFLAGS@
+XRANDR_LIBS = @XRANDR_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+appletsdir = @appletsdir@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+modulesdir = @modulesdir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = pixmaps
+noinst_LTLIBRARIES = libsystem-timezone.la
+AM_CPPFLAGS = \
+ $(TZ_CFLAGS) \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+AM_CFLAGS = $(WARN_CFLAGS)
+libsystem_timezone_la_SOURCES = \
+ system-timezone.c \
+ system-timezone.h
+
+libsystem_timezone_la_LIBADD = $(TZ_LIBS)
+@HAVE_LIBECAL_TRUE@CALENDAR_SOURCES = \
+@HAVE_LIBECAL_TRUE@ calendar-client.c \
+@HAVE_LIBECAL_TRUE@ calendar-client.h \
+@HAVE_LIBECAL_TRUE@ calendar-sources.c \
+@HAVE_LIBECAL_TRUE@ calendar-sources.h \
+@HAVE_LIBECAL_TRUE@ calendar-debug.h
+
+CLOCK_SOURCES = \
+ calendar-window.c \
+ calendar-window.h \
+ clock.c \
+ clock.h \
+ clock-face.c \
+ clock-face.h \
+ clock-location.c \
+ clock-location.h \
+ clock-location-tile.c \
+ clock-location-tile.h \
+ clock-map.c \
+ clock-map.h \
+ clock-sunpos.c \
+ clock-sunpos.h \
+ clock-utils.c \
+ clock-utils.h \
+ set-timezone.c \
+ set-timezone.h \
+ $(BUILT_SOURCES) \
+ $(CALENDAR_SOURCES)
+
+CLOCK_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ $(LIBMATE_PANEL_APPLET_CFLAGS) \
+ $(CLOCK_CFLAGS) \
+ -I$(srcdir)/../../libmate-panel-applet \
+ -I$(top_builddir)/libmate-panel-applet \
+ -DMATELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
+ -DBUILDERDIR=\""$(uidir)"\" \
+ -DCLOCK_MENU_UI_DIR=\""$(xmluidir)"\" \
+ -DICONDIR=\""$(datadir)/mate-panel/pixmaps"\" \
+ -DCLOCK_EDS_ICONDIR="\"$(CLOCK_EDS_ICONDIR)\"" \
+ -DMATEWEATHER_I_KNOW_THIS_IS_UNSTABLE
+
+CLOCK_LDADD = \
+ ../../libmate-panel-applet/libmate-panel-applet-3.la \
+ $(CLOCK_LIBS) \
+ $(LIBMATE_PANEL_APPLET_LIBS) \
+ libsystem-timezone.la \
+ -lm
+
+test_system_timezone_SOURCES = \
+ test-system-timezone.c
+
+test_system_timezone_LDADD = libsystem-timezone.la
+@CLOCK_INPROCESS_FALSE@APPLET_IN_PROCESS = false
+@CLOCK_INPROCESS_TRUE@APPLET_IN_PROCESS = true
+@CLOCK_INPROCESS_FALSE@APPLET_LOCATION = $(libexecdir)/clock-applet
+@CLOCK_INPROCESS_TRUE@APPLET_LOCATION = $(pkglibdir)/libclock-applet.so
+@CLOCK_INPROCESS_TRUE@clock_appletlibdir = $(pkglibdir)
+@CLOCK_INPROCESS_TRUE@clock_appletlib_LTLIBRARIES = libclock-applet.la
+@CLOCK_INPROCESS_TRUE@libclock_applet_la_SOURCES = $(CLOCK_SOURCES)
+@CLOCK_INPROCESS_TRUE@libclock_applet_la_CPPFLAGS = $(CLOCK_CPPFLAGS)
+@CLOCK_INPROCESS_TRUE@libclock_applet_la_LIBADD = $(CLOCK_LDADD)
+@CLOCK_INPROCESS_TRUE@libclock_applet_la_LDFLAGS = -module -avoid-version
+@CLOCK_INPROCESS_TRUE@libclock_applet_la_CFLAGS = $(AM_CFLAGS)
+@CLOCK_INPROCESS_FALSE@clock_applet_SOURCES = $(CLOCK_SOURCES)
+@CLOCK_INPROCESS_FALSE@clock_applet_CPPFLAGS = $(CLOCK_CPPFLAGS)
+@CLOCK_INPROCESS_FALSE@clock_applet_LDADD = $(CLOCK_LDADD)
+@CLOCK_INPROCESS_FALSE@clock_applet_CFLAGS = $(AM_CFLAGS)
+clock_enum_headers = \
+ $(top_srcdir)/applets/clock/clock-utils.h
+
+BUILT_SOURCES = \
+ clock-marshallers.c \
+ clock-marshallers.h \
+ clock-typebuiltins.c \
+ clock-typebuiltins.h
+
+appletdir = $(datadir)/mate-panel/applets
+applet_in_files = org.mate.panel.ClockApplet.mate-panel-applet.in
+applet_DATA = $(applet_in_files:.mate-panel-applet.in=.mate-panel-applet)
+@CLOCK_INPROCESS_FALSE@servicedir = $(datadir)/dbus-1/services
+@CLOCK_INPROCESS_FALSE@service_in_files = org.mate.panel.applet.ClockAppletFactory.service.in
+@CLOCK_INPROCESS_FALSE@service_DATA = $(service_in_files:.service.in=.service)
+uidir = $(datadir)/mate-panel/ui
+ui_DATA = clock.ui
+xmluidir = $(datadir)/mate-panel/ui
+xmlui_DATA = clock-menu.xml
+schemasdir = $(MATECONF_SCHEMA_FILE_DIR)
+schemas_in_files = clock.schemas.in
+schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
+EXTRA_DIST = \
+ org.mate.panel.ClockApplet.mate-panel-applet.in.in \
+ $(schemas_in_files) \
+ $(xmlui_DATA) \
+ $(ui_DATA) \
+ clock-marshallers.list \
+ $(service_in_files)
+
+CLEANFILES = \
+ $(BUILT_SOURCES) \
+ $(applet_DATA) \
+ $(applet_DATA).in \
+ $(service_DATA) \
+ $(schemas_DATA) \
+ $(polkit_DATA) \
+ $(dbus_services_DATA)
+
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applets/clock/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applets/clock/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-clock_appletlibLTLIBRARIES: $(clock_appletlib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(clock_appletlibdir)" || $(MKDIR_P) "$(DESTDIR)$(clock_appletlibdir)"
+ @list='$(clock_appletlib_LTLIBRARIES)'; test -n "$(clock_appletlibdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(clock_appletlibdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(clock_appletlibdir)"; \
+ }
+
+uninstall-clock_appletlibLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(clock_appletlib_LTLIBRARIES)'; test -n "$(clock_appletlibdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(clock_appletlibdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(clock_appletlibdir)/$$f"; \
+ done
+
+clean-clock_appletlibLTLIBRARIES:
+ -test -z "$(clock_appletlib_LTLIBRARIES)" || rm -f $(clock_appletlib_LTLIBRARIES)
+ @list='$(clock_appletlib_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libclock-applet.la: $(libclock_applet_la_OBJECTS) $(libclock_applet_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libclock_applet_la_LINK) $(am_libclock_applet_la_rpath) $(libclock_applet_la_OBJECTS) $(libclock_applet_la_LIBADD) $(LIBS)
+libsystem-timezone.la: $(libsystem_timezone_la_OBJECTS) $(libsystem_timezone_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libsystem_timezone_la_OBJECTS) $(libsystem_timezone_la_LIBADD) $(LIBS)
+install-libexecPROGRAMS: $(libexec_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)"
+ @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p || test -f $$p1; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-libexecPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(libexecdir)" && rm -f $$files
+
+clean-libexecPROGRAMS:
+ @list='$(libexec_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+clock-applet$(EXEEXT): $(clock_applet_OBJECTS) $(clock_applet_DEPENDENCIES)
+ @rm -f clock-applet$(EXEEXT)
+ $(AM_V_CCLD)$(clock_applet_LINK) $(clock_applet_OBJECTS) $(clock_applet_LDADD) $(LIBS)
+test-system-timezone$(EXEEXT): $(test_system_timezone_OBJECTS) $(test_system_timezone_DEPENDENCIES)
+ @rm -f test-system-timezone$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_system_timezone_OBJECTS) $(test_system_timezone_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-calendar-client.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-calendar-sources.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-calendar-window.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-face.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-location-tile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-location.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-map.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-marshallers.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-sunpos.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-typebuiltins.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-set-timezone.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-calendar-client.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-calendar-sources.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-calendar-window.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-face.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-location-tile.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-location.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-map.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-marshallers.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-sunpos.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-typebuiltins.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-set-timezone.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/system-timezone.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-system-timezone.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+libclock_applet_la-calendar-window.lo: calendar-window.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-calendar-window.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-calendar-window.Tpo -c -o libclock_applet_la-calendar-window.lo `test -f 'calendar-window.c' || echo '$(srcdir)/'`calendar-window.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-calendar-window.Tpo $(DEPDIR)/libclock_applet_la-calendar-window.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-window.c' object='libclock_applet_la-calendar-window.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-calendar-window.lo `test -f 'calendar-window.c' || echo '$(srcdir)/'`calendar-window.c
+
+libclock_applet_la-clock.lo: clock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock.Tpo -c -o libclock_applet_la-clock.lo `test -f 'clock.c' || echo '$(srcdir)/'`clock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock.Tpo $(DEPDIR)/libclock_applet_la-clock.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock.c' object='libclock_applet_la-clock.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock.lo `test -f 'clock.c' || echo '$(srcdir)/'`clock.c
+
+libclock_applet_la-clock-face.lo: clock-face.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-face.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-face.Tpo -c -o libclock_applet_la-clock-face.lo `test -f 'clock-face.c' || echo '$(srcdir)/'`clock-face.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-face.Tpo $(DEPDIR)/libclock_applet_la-clock-face.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-face.c' object='libclock_applet_la-clock-face.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-face.lo `test -f 'clock-face.c' || echo '$(srcdir)/'`clock-face.c
+
+libclock_applet_la-clock-location.lo: clock-location.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-location.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-location.Tpo -c -o libclock_applet_la-clock-location.lo `test -f 'clock-location.c' || echo '$(srcdir)/'`clock-location.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-location.Tpo $(DEPDIR)/libclock_applet_la-clock-location.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location.c' object='libclock_applet_la-clock-location.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-location.lo `test -f 'clock-location.c' || echo '$(srcdir)/'`clock-location.c
+
+libclock_applet_la-clock-location-tile.lo: clock-location-tile.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-location-tile.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-location-tile.Tpo -c -o libclock_applet_la-clock-location-tile.lo `test -f 'clock-location-tile.c' || echo '$(srcdir)/'`clock-location-tile.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-location-tile.Tpo $(DEPDIR)/libclock_applet_la-clock-location-tile.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location-tile.c' object='libclock_applet_la-clock-location-tile.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-location-tile.lo `test -f 'clock-location-tile.c' || echo '$(srcdir)/'`clock-location-tile.c
+
+libclock_applet_la-clock-map.lo: clock-map.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-map.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-map.Tpo -c -o libclock_applet_la-clock-map.lo `test -f 'clock-map.c' || echo '$(srcdir)/'`clock-map.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-map.Tpo $(DEPDIR)/libclock_applet_la-clock-map.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-map.c' object='libclock_applet_la-clock-map.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-map.lo `test -f 'clock-map.c' || echo '$(srcdir)/'`clock-map.c
+
+libclock_applet_la-clock-sunpos.lo: clock-sunpos.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-sunpos.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-sunpos.Tpo -c -o libclock_applet_la-clock-sunpos.lo `test -f 'clock-sunpos.c' || echo '$(srcdir)/'`clock-sunpos.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-sunpos.Tpo $(DEPDIR)/libclock_applet_la-clock-sunpos.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-sunpos.c' object='libclock_applet_la-clock-sunpos.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-sunpos.lo `test -f 'clock-sunpos.c' || echo '$(srcdir)/'`clock-sunpos.c
+
+libclock_applet_la-clock-utils.lo: clock-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-utils.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-utils.Tpo -c -o libclock_applet_la-clock-utils.lo `test -f 'clock-utils.c' || echo '$(srcdir)/'`clock-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-utils.Tpo $(DEPDIR)/libclock_applet_la-clock-utils.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-utils.c' object='libclock_applet_la-clock-utils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-utils.lo `test -f 'clock-utils.c' || echo '$(srcdir)/'`clock-utils.c
+
+libclock_applet_la-set-timezone.lo: set-timezone.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-set-timezone.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-set-timezone.Tpo -c -o libclock_applet_la-set-timezone.lo `test -f 'set-timezone.c' || echo '$(srcdir)/'`set-timezone.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-set-timezone.Tpo $(DEPDIR)/libclock_applet_la-set-timezone.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='set-timezone.c' object='libclock_applet_la-set-timezone.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-set-timezone.lo `test -f 'set-timezone.c' || echo '$(srcdir)/'`set-timezone.c
+
+libclock_applet_la-clock-marshallers.lo: clock-marshallers.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-marshallers.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-marshallers.Tpo -c -o libclock_applet_la-clock-marshallers.lo `test -f 'clock-marshallers.c' || echo '$(srcdir)/'`clock-marshallers.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-marshallers.Tpo $(DEPDIR)/libclock_applet_la-clock-marshallers.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-marshallers.c' object='libclock_applet_la-clock-marshallers.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-marshallers.lo `test -f 'clock-marshallers.c' || echo '$(srcdir)/'`clock-marshallers.c
+
+libclock_applet_la-clock-typebuiltins.lo: clock-typebuiltins.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-typebuiltins.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-typebuiltins.Tpo -c -o libclock_applet_la-clock-typebuiltins.lo `test -f 'clock-typebuiltins.c' || echo '$(srcdir)/'`clock-typebuiltins.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-typebuiltins.Tpo $(DEPDIR)/libclock_applet_la-clock-typebuiltins.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-typebuiltins.c' object='libclock_applet_la-clock-typebuiltins.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-typebuiltins.lo `test -f 'clock-typebuiltins.c' || echo '$(srcdir)/'`clock-typebuiltins.c
+
+libclock_applet_la-calendar-client.lo: calendar-client.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-calendar-client.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-calendar-client.Tpo -c -o libclock_applet_la-calendar-client.lo `test -f 'calendar-client.c' || echo '$(srcdir)/'`calendar-client.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-calendar-client.Tpo $(DEPDIR)/libclock_applet_la-calendar-client.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-client.c' object='libclock_applet_la-calendar-client.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-calendar-client.lo `test -f 'calendar-client.c' || echo '$(srcdir)/'`calendar-client.c
+
+libclock_applet_la-calendar-sources.lo: calendar-sources.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-calendar-sources.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-calendar-sources.Tpo -c -o libclock_applet_la-calendar-sources.lo `test -f 'calendar-sources.c' || echo '$(srcdir)/'`calendar-sources.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-calendar-sources.Tpo $(DEPDIR)/libclock_applet_la-calendar-sources.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-sources.c' object='libclock_applet_la-calendar-sources.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-calendar-sources.lo `test -f 'calendar-sources.c' || echo '$(srcdir)/'`calendar-sources.c
+
+clock_applet-calendar-window.o: calendar-window.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-window.o -MD -MP -MF $(DEPDIR)/clock_applet-calendar-window.Tpo -c -o clock_applet-calendar-window.o `test -f 'calendar-window.c' || echo '$(srcdir)/'`calendar-window.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-window.Tpo $(DEPDIR)/clock_applet-calendar-window.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-window.c' object='clock_applet-calendar-window.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-window.o `test -f 'calendar-window.c' || echo '$(srcdir)/'`calendar-window.c
+
+clock_applet-calendar-window.obj: calendar-window.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-window.obj -MD -MP -MF $(DEPDIR)/clock_applet-calendar-window.Tpo -c -o clock_applet-calendar-window.obj `if test -f 'calendar-window.c'; then $(CYGPATH_W) 'calendar-window.c'; else $(CYGPATH_W) '$(srcdir)/calendar-window.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-window.Tpo $(DEPDIR)/clock_applet-calendar-window.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-window.c' object='clock_applet-calendar-window.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-window.obj `if test -f 'calendar-window.c'; then $(CYGPATH_W) 'calendar-window.c'; else $(CYGPATH_W) '$(srcdir)/calendar-window.c'; fi`
+
+clock_applet-clock.o: clock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock.o -MD -MP -MF $(DEPDIR)/clock_applet-clock.Tpo -c -o clock_applet-clock.o `test -f 'clock.c' || echo '$(srcdir)/'`clock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock.Tpo $(DEPDIR)/clock_applet-clock.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock.c' object='clock_applet-clock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock.o `test -f 'clock.c' || echo '$(srcdir)/'`clock.c
+
+clock_applet-clock.obj: clock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock.Tpo -c -o clock_applet-clock.obj `if test -f 'clock.c'; then $(CYGPATH_W) 'clock.c'; else $(CYGPATH_W) '$(srcdir)/clock.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock.Tpo $(DEPDIR)/clock_applet-clock.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock.c' object='clock_applet-clock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock.obj `if test -f 'clock.c'; then $(CYGPATH_W) 'clock.c'; else $(CYGPATH_W) '$(srcdir)/clock.c'; fi`
+
+clock_applet-clock-face.o: clock-face.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-face.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-face.Tpo -c -o clock_applet-clock-face.o `test -f 'clock-face.c' || echo '$(srcdir)/'`clock-face.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-face.Tpo $(DEPDIR)/clock_applet-clock-face.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-face.c' object='clock_applet-clock-face.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-face.o `test -f 'clock-face.c' || echo '$(srcdir)/'`clock-face.c
+
+clock_applet-clock-face.obj: clock-face.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-face.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-face.Tpo -c -o clock_applet-clock-face.obj `if test -f 'clock-face.c'; then $(CYGPATH_W) 'clock-face.c'; else $(CYGPATH_W) '$(srcdir)/clock-face.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-face.Tpo $(DEPDIR)/clock_applet-clock-face.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-face.c' object='clock_applet-clock-face.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-face.obj `if test -f 'clock-face.c'; then $(CYGPATH_W) 'clock-face.c'; else $(CYGPATH_W) '$(srcdir)/clock-face.c'; fi`
+
+clock_applet-clock-location.o: clock-location.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-location.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-location.Tpo -c -o clock_applet-clock-location.o `test -f 'clock-location.c' || echo '$(srcdir)/'`clock-location.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-location.Tpo $(DEPDIR)/clock_applet-clock-location.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location.c' object='clock_applet-clock-location.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-location.o `test -f 'clock-location.c' || echo '$(srcdir)/'`clock-location.c
+
+clock_applet-clock-location.obj: clock-location.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-location.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-location.Tpo -c -o clock_applet-clock-location.obj `if test -f 'clock-location.c'; then $(CYGPATH_W) 'clock-location.c'; else $(CYGPATH_W) '$(srcdir)/clock-location.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-location.Tpo $(DEPDIR)/clock_applet-clock-location.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location.c' object='clock_applet-clock-location.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-location.obj `if test -f 'clock-location.c'; then $(CYGPATH_W) 'clock-location.c'; else $(CYGPATH_W) '$(srcdir)/clock-location.c'; fi`
+
+clock_applet-clock-location-tile.o: clock-location-tile.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-location-tile.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-location-tile.Tpo -c -o clock_applet-clock-location-tile.o `test -f 'clock-location-tile.c' || echo '$(srcdir)/'`clock-location-tile.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-location-tile.Tpo $(DEPDIR)/clock_applet-clock-location-tile.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location-tile.c' object='clock_applet-clock-location-tile.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-location-tile.o `test -f 'clock-location-tile.c' || echo '$(srcdir)/'`clock-location-tile.c
+
+clock_applet-clock-location-tile.obj: clock-location-tile.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-location-tile.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-location-tile.Tpo -c -o clock_applet-clock-location-tile.obj `if test -f 'clock-location-tile.c'; then $(CYGPATH_W) 'clock-location-tile.c'; else $(CYGPATH_W) '$(srcdir)/clock-location-tile.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-location-tile.Tpo $(DEPDIR)/clock_applet-clock-location-tile.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location-tile.c' object='clock_applet-clock-location-tile.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-location-tile.obj `if test -f 'clock-location-tile.c'; then $(CYGPATH_W) 'clock-location-tile.c'; else $(CYGPATH_W) '$(srcdir)/clock-location-tile.c'; fi`
+
+clock_applet-clock-map.o: clock-map.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-map.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-map.Tpo -c -o clock_applet-clock-map.o `test -f 'clock-map.c' || echo '$(srcdir)/'`clock-map.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-map.Tpo $(DEPDIR)/clock_applet-clock-map.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-map.c' object='clock_applet-clock-map.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-map.o `test -f 'clock-map.c' || echo '$(srcdir)/'`clock-map.c
+
+clock_applet-clock-map.obj: clock-map.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-map.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-map.Tpo -c -o clock_applet-clock-map.obj `if test -f 'clock-map.c'; then $(CYGPATH_W) 'clock-map.c'; else $(CYGPATH_W) '$(srcdir)/clock-map.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-map.Tpo $(DEPDIR)/clock_applet-clock-map.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-map.c' object='clock_applet-clock-map.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-map.obj `if test -f 'clock-map.c'; then $(CYGPATH_W) 'clock-map.c'; else $(CYGPATH_W) '$(srcdir)/clock-map.c'; fi`
+
+clock_applet-clock-sunpos.o: clock-sunpos.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-sunpos.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-sunpos.Tpo -c -o clock_applet-clock-sunpos.o `test -f 'clock-sunpos.c' || echo '$(srcdir)/'`clock-sunpos.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-sunpos.Tpo $(DEPDIR)/clock_applet-clock-sunpos.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-sunpos.c' object='clock_applet-clock-sunpos.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-sunpos.o `test -f 'clock-sunpos.c' || echo '$(srcdir)/'`clock-sunpos.c
+
+clock_applet-clock-sunpos.obj: clock-sunpos.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-sunpos.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-sunpos.Tpo -c -o clock_applet-clock-sunpos.obj `if test -f 'clock-sunpos.c'; then $(CYGPATH_W) 'clock-sunpos.c'; else $(CYGPATH_W) '$(srcdir)/clock-sunpos.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-sunpos.Tpo $(DEPDIR)/clock_applet-clock-sunpos.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-sunpos.c' object='clock_applet-clock-sunpos.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-sunpos.obj `if test -f 'clock-sunpos.c'; then $(CYGPATH_W) 'clock-sunpos.c'; else $(CYGPATH_W) '$(srcdir)/clock-sunpos.c'; fi`
+
+clock_applet-clock-utils.o: clock-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-utils.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-utils.Tpo -c -o clock_applet-clock-utils.o `test -f 'clock-utils.c' || echo '$(srcdir)/'`clock-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-utils.Tpo $(DEPDIR)/clock_applet-clock-utils.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-utils.c' object='clock_applet-clock-utils.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-utils.o `test -f 'clock-utils.c' || echo '$(srcdir)/'`clock-utils.c
+
+clock_applet-clock-utils.obj: clock-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-utils.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-utils.Tpo -c -o clock_applet-clock-utils.obj `if test -f 'clock-utils.c'; then $(CYGPATH_W) 'clock-utils.c'; else $(CYGPATH_W) '$(srcdir)/clock-utils.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-utils.Tpo $(DEPDIR)/clock_applet-clock-utils.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-utils.c' object='clock_applet-clock-utils.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-utils.obj `if test -f 'clock-utils.c'; then $(CYGPATH_W) 'clock-utils.c'; else $(CYGPATH_W) '$(srcdir)/clock-utils.c'; fi`
+
+clock_applet-set-timezone.o: set-timezone.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-set-timezone.o -MD -MP -MF $(DEPDIR)/clock_applet-set-timezone.Tpo -c -o clock_applet-set-timezone.o `test -f 'set-timezone.c' || echo '$(srcdir)/'`set-timezone.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-set-timezone.Tpo $(DEPDIR)/clock_applet-set-timezone.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='set-timezone.c' object='clock_applet-set-timezone.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-set-timezone.o `test -f 'set-timezone.c' || echo '$(srcdir)/'`set-timezone.c
+
+clock_applet-set-timezone.obj: set-timezone.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-set-timezone.obj -MD -MP -MF $(DEPDIR)/clock_applet-set-timezone.Tpo -c -o clock_applet-set-timezone.obj `if test -f 'set-timezone.c'; then $(CYGPATH_W) 'set-timezone.c'; else $(CYGPATH_W) '$(srcdir)/set-timezone.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-set-timezone.Tpo $(DEPDIR)/clock_applet-set-timezone.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='set-timezone.c' object='clock_applet-set-timezone.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-set-timezone.obj `if test -f 'set-timezone.c'; then $(CYGPATH_W) 'set-timezone.c'; else $(CYGPATH_W) '$(srcdir)/set-timezone.c'; fi`
+
+clock_applet-clock-marshallers.o: clock-marshallers.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-marshallers.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-marshallers.Tpo -c -o clock_applet-clock-marshallers.o `test -f 'clock-marshallers.c' || echo '$(srcdir)/'`clock-marshallers.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-marshallers.Tpo $(DEPDIR)/clock_applet-clock-marshallers.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-marshallers.c' object='clock_applet-clock-marshallers.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-marshallers.o `test -f 'clock-marshallers.c' || echo '$(srcdir)/'`clock-marshallers.c
+
+clock_applet-clock-marshallers.obj: clock-marshallers.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-marshallers.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-marshallers.Tpo -c -o clock_applet-clock-marshallers.obj `if test -f 'clock-marshallers.c'; then $(CYGPATH_W) 'clock-marshallers.c'; else $(CYGPATH_W) '$(srcdir)/clock-marshallers.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-marshallers.Tpo $(DEPDIR)/clock_applet-clock-marshallers.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-marshallers.c' object='clock_applet-clock-marshallers.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-marshallers.obj `if test -f 'clock-marshallers.c'; then $(CYGPATH_W) 'clock-marshallers.c'; else $(CYGPATH_W) '$(srcdir)/clock-marshallers.c'; fi`
+
+clock_applet-clock-typebuiltins.o: clock-typebuiltins.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-typebuiltins.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-typebuiltins.Tpo -c -o clock_applet-clock-typebuiltins.o `test -f 'clock-typebuiltins.c' || echo '$(srcdir)/'`clock-typebuiltins.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-typebuiltins.Tpo $(DEPDIR)/clock_applet-clock-typebuiltins.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-typebuiltins.c' object='clock_applet-clock-typebuiltins.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-typebuiltins.o `test -f 'clock-typebuiltins.c' || echo '$(srcdir)/'`clock-typebuiltins.c
+
+clock_applet-clock-typebuiltins.obj: clock-typebuiltins.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-typebuiltins.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-typebuiltins.Tpo -c -o clock_applet-clock-typebuiltins.obj `if test -f 'clock-typebuiltins.c'; then $(CYGPATH_W) 'clock-typebuiltins.c'; else $(CYGPATH_W) '$(srcdir)/clock-typebuiltins.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-typebuiltins.Tpo $(DEPDIR)/clock_applet-clock-typebuiltins.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-typebuiltins.c' object='clock_applet-clock-typebuiltins.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-typebuiltins.obj `if test -f 'clock-typebuiltins.c'; then $(CYGPATH_W) 'clock-typebuiltins.c'; else $(CYGPATH_W) '$(srcdir)/clock-typebuiltins.c'; fi`
+
+clock_applet-calendar-client.o: calendar-client.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-client.o -MD -MP -MF $(DEPDIR)/clock_applet-calendar-client.Tpo -c -o clock_applet-calendar-client.o `test -f 'calendar-client.c' || echo '$(srcdir)/'`calendar-client.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-client.Tpo $(DEPDIR)/clock_applet-calendar-client.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-client.c' object='clock_applet-calendar-client.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-client.o `test -f 'calendar-client.c' || echo '$(srcdir)/'`calendar-client.c
+
+clock_applet-calendar-client.obj: calendar-client.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-client.obj -MD -MP -MF $(DEPDIR)/clock_applet-calendar-client.Tpo -c -o clock_applet-calendar-client.obj `if test -f 'calendar-client.c'; then $(CYGPATH_W) 'calendar-client.c'; else $(CYGPATH_W) '$(srcdir)/calendar-client.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-client.Tpo $(DEPDIR)/clock_applet-calendar-client.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-client.c' object='clock_applet-calendar-client.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-client.obj `if test -f 'calendar-client.c'; then $(CYGPATH_W) 'calendar-client.c'; else $(CYGPATH_W) '$(srcdir)/calendar-client.c'; fi`
+
+clock_applet-calendar-sources.o: calendar-sources.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-sources.o -MD -MP -MF $(DEPDIR)/clock_applet-calendar-sources.Tpo -c -o clock_applet-calendar-sources.o `test -f 'calendar-sources.c' || echo '$(srcdir)/'`calendar-sources.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-sources.Tpo $(DEPDIR)/clock_applet-calendar-sources.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-sources.c' object='clock_applet-calendar-sources.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-sources.o `test -f 'calendar-sources.c' || echo '$(srcdir)/'`calendar-sources.c
+
+clock_applet-calendar-sources.obj: calendar-sources.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-sources.obj -MD -MP -MF $(DEPDIR)/clock_applet-calendar-sources.Tpo -c -o clock_applet-calendar-sources.obj `if test -f 'calendar-sources.c'; then $(CYGPATH_W) 'calendar-sources.c'; else $(CYGPATH_W) '$(srcdir)/calendar-sources.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-sources.Tpo $(DEPDIR)/clock_applet-calendar-sources.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-sources.c' object='clock_applet-calendar-sources.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-sources.obj `if test -f 'calendar-sources.c'; then $(CYGPATH_W) 'calendar-sources.c'; else $(CYGPATH_W) '$(srcdir)/calendar-sources.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-appletDATA: $(applet_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(appletdir)" || $(MKDIR_P) "$(DESTDIR)$(appletdir)"
+ @list='$(applet_DATA)'; test -n "$(appletdir)" || 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)$(appletdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(appletdir)" || exit $$?; \
+ done
+
+uninstall-appletDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(applet_DATA)'; test -n "$(appletdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(appletdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(appletdir)" && rm -f $$files
+install-schemasDATA: $(schemas_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(schemasdir)" || $(MKDIR_P) "$(DESTDIR)$(schemasdir)"
+ @list='$(schemas_DATA)'; test -n "$(schemasdir)" || 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)$(schemasdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(schemasdir)" || exit $$?; \
+ done
+
+uninstall-schemasDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(schemas_DATA)'; test -n "$(schemasdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(schemasdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(schemasdir)" && rm -f $$files
+install-serviceDATA: $(service_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(servicedir)" || $(MKDIR_P) "$(DESTDIR)$(servicedir)"
+ @list='$(service_DATA)'; test -n "$(servicedir)" || 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)$(servicedir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(servicedir)" || exit $$?; \
+ done
+
+uninstall-serviceDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(service_DATA)'; test -n "$(servicedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(servicedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(servicedir)" && rm -f $$files
+install-uiDATA: $(ui_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(uidir)" || $(MKDIR_P) "$(DESTDIR)$(uidir)"
+ @list='$(ui_DATA)'; test -n "$(uidir)" || 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)$(uidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(uidir)" || exit $$?; \
+ done
+
+uninstall-uiDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(uidir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(uidir)" && rm -f $$files
+install-xmluiDATA: $(xmlui_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(xmluidir)" || $(MKDIR_P) "$(DESTDIR)$(xmluidir)"
+ @list='$(xmlui_DATA)'; test -n "$(xmluidir)" || 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)$(xmluidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(xmluidir)" || exit $$?; \
+ done
+
+uninstall-xmluiDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(xmlui_DATA)'; test -n "$(xmluidir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(xmluidir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(xmluidir)" && rm -f $$files
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(clock_appletlibdir)" "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(appletdir)" "$(DESTDIR)$(schemasdir)" "$(DESTDIR)$(servicedir)" "$(DESTDIR)$(uidir)" "$(DESTDIR)$(xmluidir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+@MATECONF_SCHEMAS_INSTALL_FALSE@uninstall-local:
+@MATECONF_SCHEMAS_INSTALL_FALSE@install-data-local:
+clean: clean-recursive
+
+clean-am: clean-clock_appletlibLTLIBRARIES clean-generic \
+ clean-libexecPROGRAMS clean-libtool clean-noinstLTLIBRARIES \
+ clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-appletDATA install-clock_appletlibLTLIBRARIES \
+ install-data-local install-schemasDATA install-serviceDATA \
+ install-uiDATA install-xmluiDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-libexecPROGRAMS
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-appletDATA \
+ uninstall-clock_appletlibLTLIBRARIES uninstall-libexecPROGRAMS \
+ uninstall-local uninstall-schemasDATA uninstall-serviceDATA \
+ uninstall-uiDATA uninstall-xmluiDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+ ctags-recursive install install-am install-strip \
+ tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean \
+ clean-clock_appletlibLTLIBRARIES clean-generic \
+ clean-libexecPROGRAMS clean-libtool clean-noinstLTLIBRARIES \
+ clean-noinstPROGRAMS ctags ctags-recursive distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-appletDATA \
+ install-clock_appletlibLTLIBRARIES install-data \
+ install-data-am install-data-local install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-libexecPROGRAMS \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-schemasDATA install-serviceDATA \
+ install-strip install-uiDATA install-xmluiDATA installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am \
+ uninstall-appletDATA uninstall-clock_appletlibLTLIBRARIES \
+ uninstall-libexecPROGRAMS uninstall-local \
+ uninstall-schemasDATA uninstall-serviceDATA uninstall-uiDATA \
+ uninstall-xmluiDATA
+
+@CLOCK_INPROCESS_TRUE@$(libclock_applet_la_OBJECTS): $(BUILT_SOURCES)
+@CLOCK_INPROCESS_FALSE@$(clock_applet_OBJECTS): $(BUILT_SOURCES)
+
+clock-marshallers.c: clock-marshallers.list
+ $(AM_V_GEN)glib-genmarshal --prefix _clock_marshal --header --body --internal $< > $@
+
+clock-marshallers.h: clock-marshallers.list
+ $(AM_V_GEN)glib-genmarshal --prefix _clock_marshal --header --internal $< > $@
+
+clock-typebuiltins.c: @REBUILD@ $(clock_enum_headers)
+ $(AM_V_GEN)glib-mkenums \
+ --fhead "#include <glib-object.h>\n" \
+ --fhead "#include \"clock-typebuiltins.h\"\n\n" \
+ --fprod "\n/* enumerations from \"@filename@\" */" \
+ --fprod "\n#include \"@filename@\"\n" \
+ --vhead "static const GEnumValue _@enum_name@_values[] = {" \
+ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+ --vtail " { 0, NULL, NULL }\n};\n\n" \
+ --vtail "GType\n@enum_name@_get_type (void)\n{\n" \
+ --vtail " static GType type = 0;\n\n" \
+ --vtail " if (!type)\n" \
+ --vtail " type = g_enum_register_static (\"@EnumName@\", _@enum_name@_values);\n\n" \
+ --vtail " return type;\n}\n\n" \
+ $(clock_enum_headers) > $@
+
+clock-typebuiltins.h: @REBUILD@ $(clock_enum_headers)
+ $(AM_V_GEN)glib-mkenums \
+ --fhead "#ifndef __CLOCK_TYPEBUILTINS_H__\n" \
+ --fhead "#define __CLOCK_TYPEBUILTINS_H__ 1\n\n" \
+ --fhead "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n" \
+ --ftail "#ifdef __cplusplus\n}\n#endif\n\n" \
+ --ftail "#endif /* __CLOCK_TYPEBUILTINS_H__ */\n" \
+ --fprod "\n/* --- @filename@ --- */" \
+ --eprod "#define CLOCK_TYPE_@ENUMSHORT@ @enum_name@_get_type()\n" \
+ --eprod "GType @enum_name@_get_type (void);\n" \
+ $(clock_enum_headers) > $@
+
+$(applet_in_files): $(applet_in_files).in Makefile
+ $(AM_V_GEN)sed \
+ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+ -e "s|\@IN_PROCESS\@|$(APPLET_IN_PROCESS)|" \
+ -e "s|\@VERSION\@|$(PACKAGE_VERSION)|" \
+ $< > $@
+
+@PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+
+@CLOCK_INPROCESS_FALSE@org.mate.panel.applet.ClockAppletFactory.service: $(service_in_files)
+@CLOCK_INPROCESS_FALSE@ $(AM_V_GEN)sed \
+@CLOCK_INPROCESS_FALSE@ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+@CLOCK_INPROCESS_FALSE@ $< > $@
+
+@INTLTOOL_SCHEMAS_RULE@
+
+@MATECONF_SCHEMAS_INSTALL_TRUE@install-data-local:
+@MATECONF_SCHEMAS_INSTALL_TRUE@ if test -z "$(DESTDIR)" ; then \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ for p in $(schemas_DATA) ; do \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(top_builddir)/applets/clock/$$p ; \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ done \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ fi
+@MATECONF_SCHEMAS_INSTALL_TRUE@uninstall-local:
+@MATECONF_SCHEMAS_INSTALL_TRUE@ for p in $(schema_DATA) ; do \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-uninstall-rule $(top_builddir)/applets/clock/$$p ; \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ done
+
+-include $(top_srcdir)/git.mk
+
+# 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.
+.NOEXPORT:
diff --git a/applets/clock/calendar-client.c b/applets/clock/calendar-client.c
new file mode 100644
index 00000000..77efa137
--- /dev/null
+++ b/applets/clock/calendar-client.c
@@ -0,0 +1,2169 @@
+/*
+ * Copyright (C) 2004 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Mark McLoughlin <[email protected]>
+ * William Jon McCann <[email protected]>
+ * Martin Grimme <[email protected]>
+ * Christian Kellner <[email protected]>
+ */
+
+#include <config.h>
+
+#include "calendar-client.h"
+
+#include <libintl.h>
+#include <string.h>
+#define HANDLE_LIBICAL_MEMORY
+#include <libecal/e-cal.h>
+#include <libecal/e-cal-time-util.h>
+#include <libecal/e-cal-recur.h>
+
+#include "calendar-sources.h"
+
+#undef CALENDAR_ENABLE_DEBUG
+#include "calendar-debug.h"
+
+#define CALENDAR_CONFIG_PREFIX "/apps/evolution/calendar"
+#define CALENDAR_CONFIG_TIMEZONE CALENDAR_CONFIG_PREFIX "/display/timezone"
+
+#ifndef _
+#define _(x) gettext(x)
+#endif
+
+#ifndef N_
+#define N_(x) x
+#endif
+
+#define CALENDAR_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_CLIENT, CalendarClientPrivate))
+
+typedef struct _CalendarClientQuery CalendarClientQuery;
+typedef struct _CalendarClientSource CalendarClientSource;
+
+struct _CalendarClientQuery
+{
+ ECalView *view;
+ GHashTable *events;
+};
+
+struct _CalendarClientSource
+{
+ CalendarClient *client;
+ ECal *source;
+
+ CalendarClientQuery completed_query;
+ CalendarClientQuery in_progress_query;
+
+ guint changed_signal_id;
+
+ guint query_completed : 1;
+ guint query_in_progress : 1;
+};
+
+struct _CalendarClientPrivate
+{
+ CalendarSources *calendar_sources;
+
+ GSList *appointment_sources;
+ GSList *task_sources;
+
+ icaltimezone *zone;
+
+ guint zone_listener;
+ MateConfClient *mateconf_client;
+
+ guint day;
+ guint month;
+ guint year;
+};
+
+static void calendar_client_class_init (CalendarClientClass *klass);
+static void calendar_client_init (CalendarClient *client);
+static void calendar_client_finalize (GObject *object);
+static void calendar_client_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void calendar_client_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+
+static GSList *calendar_client_update_sources_list (CalendarClient *client,
+ GSList *sources,
+ GSList *esources,
+ guint changed_signal_id);
+static void calendar_client_appointment_sources_changed (CalendarClient *client);
+static void calendar_client_task_sources_changed (CalendarClient *client);
+
+static void calendar_client_stop_query (CalendarClient *client,
+ CalendarClientSource *source,
+ CalendarClientQuery *query);
+static void calendar_client_start_query (CalendarClient *client,
+ CalendarClientSource *source,
+ const char *query);
+
+static void calendar_client_source_finalize (CalendarClientSource *source);
+static void calendar_client_query_finalize (CalendarClientQuery *query);
+
+static void
+calendar_client_update_appointments (CalendarClient *client);
+static void
+calendar_client_update_tasks (CalendarClient *client);
+
+enum
+{
+ PROP_O,
+ PROP_DAY,
+ PROP_MONTH,
+ PROP_YEAR
+};
+
+enum
+{
+ APPOINTMENTS_CHANGED,
+ TASKS_CHANGED,
+ LAST_SIGNAL
+};
+
+static GObjectClass *parent_class = NULL;
+static guint signals [LAST_SIGNAL] = { 0, };
+
+GType
+calendar_client_get_type (void)
+{
+ static GType client_type = 0;
+
+ if (!client_type)
+ {
+ static const GTypeInfo client_info =
+ {
+ sizeof (CalendarClientClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) calendar_client_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (CalendarClient),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) calendar_client_init,
+ };
+
+ client_type = g_type_register_static (G_TYPE_OBJECT,
+ "CalendarClient",
+ &client_info, 0);
+ }
+
+ return client_type;
+}
+
+static void
+calendar_client_class_init (CalendarClientClass *klass)
+{
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ gobject_class->finalize = calendar_client_finalize;
+ gobject_class->set_property = calendar_client_set_property;
+ gobject_class->get_property = calendar_client_get_property;
+
+ g_type_class_add_private (klass, sizeof (CalendarClientPrivate));
+
+ g_object_class_install_property (gobject_class,
+ PROP_DAY,
+ g_param_spec_uint ("day",
+ "Day",
+ "The currently monitored day between 1 and 31 (0 denotes unset)",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_MONTH,
+ g_param_spec_uint ("month",
+ "Month",
+ "The currently monitored month between 0 and 11",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_YEAR,
+ g_param_spec_uint ("year",
+ "Year",
+ "The currently monitored year",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE));
+
+ signals [APPOINTMENTS_CHANGED] =
+ g_signal_new ("appointments-changed",
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (CalendarClientClass, tasks_changed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ signals [TASKS_CHANGED] =
+ g_signal_new ("tasks-changed",
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (CalendarClientClass, tasks_changed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+}
+
+/* Timezone code adapted from evolution/calendar/gui/calendar-config.c */
+/* The current timezone, e.g. "Europe/London". It may be NULL, in which case
+ you should assume UTC. */
+static gchar *
+calendar_client_config_get_timezone (MateConfClient *mateconf_client)
+{
+ char *location;
+
+ location = mateconf_client_get_string (mateconf_client,
+ CALENDAR_CONFIG_TIMEZONE,
+ NULL);
+
+ return location;
+}
+
+static icaltimezone *
+calendar_client_config_get_icaltimezone (MateConfClient *mateconf_client)
+{
+ char *location;
+ icaltimezone *zone = NULL;
+
+ location = calendar_client_config_get_timezone (mateconf_client);
+ if (!location)
+ return icaltimezone_get_utc_timezone ();
+
+ zone = icaltimezone_get_builtin_timezone (location);
+ g_free (location);
+
+ return zone;
+}
+
+static void
+calendar_client_set_timezone (CalendarClient *client)
+{
+ GSList *l;
+ GSList *esources;
+
+ client->priv->zone = calendar_client_config_get_icaltimezone (client->priv->mateconf_client);
+
+ esources = calendar_sources_get_appointment_sources (client->priv->calendar_sources);
+ for (l = esources; l; l = l->next) {
+ ECal *source = l->data;
+
+ e_cal_set_default_timezone (source, client->priv->zone, NULL);
+ }
+}
+
+static void
+calendar_client_timezone_changed_cb (MateConfClient *mateconf_client,
+ guint id,
+ MateConfEntry *entry,
+ CalendarClient *client)
+{
+ calendar_client_set_timezone (client);
+}
+
+static void
+cal_opened_cb (ECal *ecal,
+ ECalendarStatus status,
+ CalendarClientSource *cl_source)
+{
+ ECalSourceType s_type;
+ CalendarClient *client = cl_source->client;
+
+ s_type = e_cal_get_source_type (ecal);
+
+ if (status == E_CALENDAR_STATUS_BUSY &&
+ e_cal_get_load_state (ecal) == E_CAL_LOAD_NOT_LOADED)
+ {
+ e_cal_open_async (ecal, FALSE);
+ return;
+ }
+
+ g_signal_handlers_disconnect_by_func (ecal, cal_opened_cb, cl_source);
+
+ if (status != E_CALENDAR_STATUS_OK)
+ {
+ if (s_type == E_CAL_SOURCE_TYPE_EVENT)
+ client->priv->appointment_sources = g_slist_remove (client->priv->appointment_sources,
+ cl_source);
+ else
+ client->priv->task_sources = g_slist_remove (client->priv->task_sources,
+ cl_source);
+
+ calendar_client_source_finalize (cl_source);
+ g_free (cl_source);
+
+ return;
+ }
+
+ if (s_type == E_CAL_SOURCE_TYPE_EVENT)
+ calendar_client_update_appointments (client);
+ else
+ calendar_client_update_tasks (client);
+}
+
+static void
+load_calendars (CalendarClient *client,
+ CalendarEventType type)
+{
+ GSList *l, *clients;
+
+ switch (type)
+ {
+ case CALENDAR_EVENT_APPOINTMENT:
+ clients = client->priv->appointment_sources;
+ break;
+ case CALENDAR_EVENT_TASK:
+ clients = client->priv->task_sources;
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ for (l = clients; l != NULL; l = l->next)
+ {
+ ECal *ecal;
+ CalendarClientSource *cl_source = l->data;
+
+ ecal = cl_source->source;
+
+ if (e_cal_get_load_state (ecal) == E_CAL_LOAD_LOADED)
+ continue;
+
+ g_signal_connect (G_OBJECT (ecal), "cal_opened",
+ G_CALLBACK (cal_opened_cb), cl_source);
+ e_cal_open_async (ecal, TRUE);
+ }
+}
+
+static void
+calendar_client_init (CalendarClient *client)
+{
+ GSList *esources;
+
+ client->priv = CALENDAR_CLIENT_GET_PRIVATE (client);
+
+ client->priv->calendar_sources = calendar_sources_get ();
+ client->priv->mateconf_client = mateconf_client_get_default ();
+
+ esources = calendar_sources_get_appointment_sources (client->priv->calendar_sources);
+ client->priv->appointment_sources =
+ calendar_client_update_sources_list (client, NULL, esources, signals [APPOINTMENTS_CHANGED]);
+
+ esources = calendar_sources_get_task_sources (client->priv->calendar_sources);
+ client->priv->task_sources =
+ calendar_client_update_sources_list (client, NULL, esources, signals [TASKS_CHANGED]);
+
+ /* set the timezone before loading the clients */
+ calendar_client_set_timezone (client);
+ load_calendars (client, CALENDAR_EVENT_APPOINTMENT);
+ load_calendars (client, CALENDAR_EVENT_TASK);
+
+ g_signal_connect_swapped (client->priv->calendar_sources,
+ "appointment-sources-changed",
+ G_CALLBACK (calendar_client_appointment_sources_changed),
+ client);
+ g_signal_connect_swapped (client->priv->calendar_sources,
+ "task-sources-changed",
+ G_CALLBACK (calendar_client_task_sources_changed),
+ client);
+
+ mateconf_client_add_dir (client->priv->mateconf_client,
+ CALENDAR_CONFIG_PREFIX,
+ MATECONF_CLIENT_PRELOAD_NONE,
+ NULL);
+
+ client->priv->zone_listener = mateconf_client_notify_add (client->priv->mateconf_client,
+ CALENDAR_CONFIG_TIMEZONE,
+ (MateConfClientNotifyFunc) calendar_client_timezone_changed_cb,
+ client, NULL, NULL);
+
+ client->priv->day = -1;
+ client->priv->month = -1;
+ client->priv->year = -1;
+}
+
+static void
+calendar_client_finalize (GObject *object)
+{
+ CalendarClient *client = CALENDAR_CLIENT (object);
+ GSList *l;
+
+ if (client->priv->zone_listener)
+ {
+ mateconf_client_notify_remove (client->priv->mateconf_client,
+ client->priv->zone_listener);
+ client->priv->zone_listener = 0;
+ }
+
+ mateconf_client_remove_dir (client->priv->mateconf_client,
+ CALENDAR_CONFIG_PREFIX,
+ NULL);
+
+ if (client->priv->mateconf_client)
+ g_object_unref (client->priv->mateconf_client);
+ client->priv->mateconf_client = NULL;
+
+ for (l = client->priv->appointment_sources; l; l = l->next)
+ {
+ calendar_client_source_finalize (l->data);
+ g_free (l->data);
+ }
+ g_slist_free (client->priv->appointment_sources);
+ client->priv->appointment_sources = NULL;
+
+ for (l = client->priv->task_sources; l; l = l->next)
+ {
+ calendar_client_source_finalize (l->data);
+ g_free (l->data);
+ }
+ g_slist_free (client->priv->task_sources);
+ client->priv->task_sources = NULL;
+
+ if (client->priv->calendar_sources)
+ g_object_unref (client->priv->calendar_sources);
+ client->priv->calendar_sources = NULL;
+
+ if (G_OBJECT_CLASS (parent_class)->finalize)
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+calendar_client_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ CalendarClient *client = CALENDAR_CLIENT (object);
+
+ switch (prop_id)
+ {
+ case PROP_DAY:
+ calendar_client_select_day (client, g_value_get_uint (value));
+ break;
+ case PROP_MONTH:
+ calendar_client_select_month (client,
+ g_value_get_uint (value),
+ client->priv->year);
+ break;
+ case PROP_YEAR:
+ calendar_client_select_month (client,
+ client->priv->month,
+ g_value_get_uint (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+calendar_client_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ CalendarClient *client = CALENDAR_CLIENT (object);
+
+ switch (prop_id)
+ {
+ case PROP_DAY:
+ g_value_set_uint (value, client->priv->day);
+ break;
+ case PROP_MONTH:
+ g_value_set_uint (value, client->priv->month);
+ break;
+ case PROP_YEAR:
+ g_value_set_uint (value, client->priv->year);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+CalendarClient *
+calendar_client_new (void)
+{
+ return g_object_new (CALENDAR_TYPE_CLIENT, NULL);
+}
+
+/* @day and @month can happily be out of range as
+ * mktime() will normalize them correctly. From mktime(3):
+ *
+ * "If structure members are outside their legal interval,
+ * they will be normalized (so that, e.g., 40 October is
+ * changed into 9 November)."
+ *
+ * "What?", you say, "Something useful in libc?"
+ */
+static inline time_t
+make_time_for_day_begin (int day,
+ int month,
+ int year)
+{
+ struct tm localtime_tm = { 0, };
+
+ localtime_tm.tm_mday = day;
+ localtime_tm.tm_mon = month;
+ localtime_tm.tm_year = year - 1900;
+ localtime_tm.tm_isdst = -1;
+
+ return mktime (&localtime_tm);
+}
+
+static inline char *
+make_isodate_for_day_begin (int day,
+ int month,
+ int year)
+{
+ time_t utctime;
+
+ utctime = make_time_for_day_begin (day, month, year);
+
+ return utctime != -1 ? isodate_from_time_t (utctime) : NULL;
+}
+
+static time_t
+get_time_from_property (icalcomponent *ical,
+ icalproperty_kind prop_kind,
+ struct icaltimetype (* get_prop_func) (const icalproperty *prop),
+ icaltimezone *default_zone)
+{
+ icalproperty *prop;
+ struct icaltimetype ical_time;
+ icalparameter *param;
+ icaltimezone *timezone = NULL;
+
+ prop = icalcomponent_get_first_property (ical, prop_kind);
+ if (!prop)
+ return 0;
+
+ ical_time = get_prop_func (prop);
+
+ param = icalproperty_get_first_parameter (prop, ICAL_TZID_PARAMETER);
+ if (param)
+ timezone = icaltimezone_get_builtin_timezone_from_tzid (icalparameter_get_tzid (param));
+ else if (icaltime_is_utc (ical_time))
+ timezone = icaltimezone_get_utc_timezone ();
+ else
+ timezone = default_zone;
+
+ return icaltime_as_timet_with_zone (ical_time, timezone);
+}
+
+static char *
+get_ical_uid (icalcomponent *ical)
+{
+ return g_strdup (icalcomponent_get_uid (ical));
+}
+
+static char *
+get_ical_rid (icalcomponent *ical)
+{
+ icalproperty *prop;
+ struct icaltimetype ical_time;
+
+ prop = icalcomponent_get_first_property (ical, ICAL_RECURRENCEID_PROPERTY);
+ if (!prop)
+ return NULL;
+
+ ical_time = icalproperty_get_recurrenceid (prop);
+
+ return icaltime_is_valid_time (ical_time) && !icaltime_is_null_time (ical_time) ?
+ g_strdup (icaltime_as_ical_string (ical_time)) : NULL;
+}
+
+static char *
+get_ical_summary (icalcomponent *ical)
+{
+ icalproperty *prop;
+
+ prop = icalcomponent_get_first_property (ical, ICAL_SUMMARY_PROPERTY);
+ if (!prop)
+ return NULL;
+
+ return g_strdup (icalproperty_get_summary (prop));
+}
+
+static char *
+get_ical_description (icalcomponent *ical)
+{
+ icalproperty *prop;
+
+ prop = icalcomponent_get_first_property (ical, ICAL_DESCRIPTION_PROPERTY);
+ if (!prop)
+ return NULL;
+
+ return g_strdup (icalproperty_get_description (prop));
+}
+
+static inline time_t
+get_ical_start_time (icalcomponent *ical,
+ icaltimezone *default_zone)
+{
+ return get_time_from_property (ical,
+ ICAL_DTSTART_PROPERTY,
+ icalproperty_get_dtstart,
+ default_zone);
+}
+
+static inline time_t
+get_ical_end_time (icalcomponent *ical,
+ icaltimezone *default_zone)
+{
+ return get_time_from_property (ical,
+ ICAL_DTEND_PROPERTY,
+ icalproperty_get_dtend,
+ default_zone);
+}
+
+static gboolean
+get_ical_is_all_day (icalcomponent *ical,
+ time_t start_time,
+ icaltimezone *default_zone)
+{
+ icalproperty *prop;
+ struct tm *start_tm;
+ time_t end_time;
+ struct icaldurationtype duration;
+ struct icaltimetype start_icaltime;
+
+ start_icaltime = icalcomponent_get_dtstart (ical);
+ if (start_icaltime.is_date)
+ return TRUE;
+
+ start_tm = gmtime (&start_time);
+ if (start_tm->tm_sec != 0 ||
+ start_tm->tm_min != 0 ||
+ start_tm->tm_hour != 0)
+ return FALSE;
+
+ if ((end_time = get_ical_end_time (ical, default_zone)))
+ return (end_time - start_time) % 86400 == 0;
+
+ prop = icalcomponent_get_first_property (ical, ICAL_DURATION_PROPERTY);
+ if (!prop)
+ return FALSE;
+
+ duration = icalproperty_get_duration (prop);
+
+ return icaldurationtype_as_int (duration) % 86400 == 0;
+}
+
+static inline time_t
+get_ical_due_time (icalcomponent *ical,
+ icaltimezone *default_zone)
+{
+ return get_time_from_property (ical,
+ ICAL_DUE_PROPERTY,
+ icalproperty_get_due,
+ default_zone);
+}
+
+static guint
+get_ical_percent_complete (icalcomponent *ical)
+{
+ icalproperty *prop;
+ icalproperty_status status;
+ int percent_complete;
+
+ status = icalcomponent_get_status (ical);
+ if (status == ICAL_STATUS_COMPLETED)
+ return 100;
+
+ prop = icalcomponent_get_first_property (ical, ICAL_COMPLETED_PROPERTY);
+ if (prop)
+ return 100;
+
+ prop = icalcomponent_get_first_property (ical, ICAL_PERCENTCOMPLETE_PROPERTY);
+ if (!prop)
+ return 0;
+
+ percent_complete = icalproperty_get_percentcomplete (prop);
+
+ return CLAMP (percent_complete, 0, 100);
+}
+
+static inline time_t
+get_ical_completed_time (icalcomponent *ical,
+ icaltimezone *default_zone)
+{
+ return get_time_from_property (ical,
+ ICAL_COMPLETED_PROPERTY,
+ icalproperty_get_completed,
+ default_zone);
+}
+
+static int
+get_ical_priority (icalcomponent *ical)
+{
+ icalproperty *prop;
+
+ prop = icalcomponent_get_first_property (ical, ICAL_PRIORITY_PROPERTY);
+ if (!prop)
+ return -1;
+
+ return icalproperty_get_priority (prop);
+}
+
+static char *
+get_source_color (ECal *esource)
+{
+ ESource *source;
+
+ g_return_val_if_fail (E_IS_CAL (esource), NULL);
+
+ source = e_cal_get_source (esource);
+
+ return g_strdup (e_source_peek_color_spec (source));
+}
+
+static gchar *
+get_source_uri (ECal *esource)
+{
+ ESource *source;
+ gchar *string;
+ gchar **list;
+
+ g_return_val_if_fail (E_IS_CAL (esource), NULL);
+
+ source = e_cal_get_source (esource);
+ string = g_strdup (e_source_get_uri (source));
+ if (string) {
+ list = g_strsplit (string, ":", 2);
+ g_free (string);
+
+ if (list[0]) {
+ string = g_strdup (list[0]);
+ g_strfreev (list);
+ return string;
+ }
+ g_strfreev (list);
+ }
+ return NULL;
+}
+
+static inline int
+null_safe_strcmp (const char *a,
+ const char *b)
+{
+ return (!a && !b) ? 0 : (a && !b) || (!a && b) ? 1 : strcmp (a, b);
+}
+
+static inline gboolean
+calendar_appointment_equal (CalendarAppointment *a,
+ CalendarAppointment *b)
+{
+ GSList *la, *lb;
+
+ if (g_slist_length (a->occurrences) != g_slist_length (b->occurrences))
+ return FALSE;
+
+ for (la = a->occurrences, lb = b->occurrences; la && lb; la = la->next, lb = lb->next)
+ {
+ CalendarOccurrence *oa = la->data;
+ CalendarOccurrence *ob = lb->data;
+
+ if (oa->start_time != ob->start_time ||
+ oa->end_time != ob->end_time)
+ return FALSE;
+ }
+
+ return
+ null_safe_strcmp (a->uid, b->uid) == 0 &&
+ null_safe_strcmp (a->uri, b->uri) == 0 &&
+ null_safe_strcmp (a->summary, b->summary) == 0 &&
+ null_safe_strcmp (a->description, b->description) == 0 &&
+ null_safe_strcmp (a->color_string, b->color_string) == 0 &&
+ a->start_time == b->start_time &&
+ a->end_time == b->end_time &&
+ a->is_all_day == b->is_all_day;
+}
+
+static void
+calendar_appointment_copy (CalendarAppointment *appointment,
+ CalendarAppointment *appointment_copy)
+{
+ GSList *l;
+
+ g_assert (appointment != NULL);
+ g_assert (appointment_copy != NULL);
+
+ appointment_copy->occurrences = g_slist_copy (appointment->occurrences);
+ for (l = appointment_copy->occurrences; l; l = l->next)
+ {
+ CalendarOccurrence *occurrence = l->data;
+ CalendarOccurrence *occurrence_copy;
+
+ occurrence_copy = g_new0 (CalendarOccurrence, 1);
+ occurrence_copy->start_time = occurrence->start_time;
+ occurrence_copy->end_time = occurrence->end_time;
+
+ l->data = occurrence_copy;
+ }
+
+ appointment_copy->uid = g_strdup (appointment->uid);
+ appointment_copy->uri = g_strdup (appointment->uri);
+ appointment_copy->summary = g_strdup (appointment->summary);
+ appointment_copy->description = g_strdup (appointment->description);
+ appointment_copy->color_string = g_strdup (appointment->color_string);
+ appointment_copy->start_time = appointment->start_time;
+ appointment_copy->end_time = appointment->end_time;
+ appointment_copy->is_all_day = appointment->is_all_day;
+}
+
+static void
+calendar_appointment_finalize (CalendarAppointment *appointment)
+{
+ GSList *l;
+
+ for (l = appointment->occurrences; l; l = l->next)
+ g_free (l->data);
+ g_slist_free (appointment->occurrences);
+ appointment->occurrences = NULL;
+
+ g_free (appointment->uid);
+ appointment->uid = NULL;
+
+ g_free (appointment->rid);
+ appointment->rid = NULL;
+
+ g_free (appointment->uri);
+ appointment->uri = NULL;
+
+ g_free (appointment->summary);
+ appointment->summary = NULL;
+
+ g_free (appointment->description);
+ appointment->description = NULL;
+
+ g_free (appointment->color_string);
+ appointment->color_string = NULL;
+
+ appointment->start_time = 0;
+ appointment->is_all_day = FALSE;
+}
+
+static void
+calendar_appointment_init (CalendarAppointment *appointment,
+ icalcomponent *ical,
+ CalendarClientSource *source,
+ icaltimezone *default_zone)
+{
+ appointment->uid = get_ical_uid (ical);
+ appointment->rid = get_ical_rid (ical);
+ appointment->uri = get_source_uri (source->source);
+ appointment->summary = get_ical_summary (ical);
+ appointment->description = get_ical_description (ical);
+ appointment->color_string = get_source_color (source->source);
+ appointment->start_time = get_ical_start_time (ical, default_zone);
+ appointment->end_time = get_ical_end_time (ical, default_zone);
+ appointment->is_all_day = get_ical_is_all_day (ical,
+ appointment->start_time,
+ default_zone);
+}
+
+static icaltimezone *
+resolve_timezone_id (const char *tzid,
+ ECal *source)
+{
+ icaltimezone *retval;
+
+ retval = icaltimezone_get_builtin_timezone_from_tzid (tzid);
+ if (!retval)
+ {
+ e_cal_get_timezone (source, tzid, &retval, NULL);
+ }
+
+ return retval;
+}
+
+static gboolean
+calendar_appointment_collect_occurrence (ECalComponent *component,
+ time_t occurrence_start,
+ time_t occurrence_end,
+ gpointer data)
+{
+ CalendarOccurrence *occurrence;
+ GSList **collect_loc = data;
+
+ occurrence = g_new0 (CalendarOccurrence, 1);
+ occurrence->start_time = occurrence_start;
+ occurrence->end_time = occurrence_end;
+
+ *collect_loc = g_slist_prepend (*collect_loc, occurrence);
+
+ return TRUE;
+}
+
+static void
+calendar_appointment_generate_ocurrences (CalendarAppointment *appointment,
+ icalcomponent *ical,
+ ECal *source,
+ time_t start,
+ time_t end,
+ icaltimezone *default_zone)
+{
+ ECalComponent *ecal;
+
+ g_assert (appointment->occurrences == NULL);
+
+ ecal = e_cal_component_new ();
+ e_cal_component_set_icalcomponent (ecal,
+ icalcomponent_new_clone (ical));
+
+ e_cal_recur_generate_instances (ecal,
+ start,
+ end,
+ calendar_appointment_collect_occurrence,
+ &appointment->occurrences,
+ (ECalRecurResolveTimezoneFn) resolve_timezone_id,
+ source,
+ default_zone);
+
+ g_object_unref (ecal);
+
+ appointment->occurrences = g_slist_reverse (appointment->occurrences);
+}
+
+static inline gboolean
+calendar_task_equal (CalendarTask *a,
+ CalendarTask *b)
+{
+ return
+ null_safe_strcmp (a->uid, b->uid) == 0 &&
+ null_safe_strcmp (a->summary, b->summary) == 0 &&
+ null_safe_strcmp (a->description, b->description) == 0 &&
+ null_safe_strcmp (a->color_string, b->color_string) == 0 &&
+ a->start_time == b->start_time &&
+ a->due_time == b->due_time &&
+ a->percent_complete == b->percent_complete &&
+ a->completed_time == b->completed_time &&
+ a->priority == b->priority;
+}
+
+static void
+calendar_task_copy (CalendarTask *task,
+ CalendarTask *task_copy)
+{
+ g_assert (task != NULL);
+ g_assert (task_copy != NULL);
+
+ task_copy->uid = g_strdup (task->uid);
+ task_copy->summary = g_strdup (task->summary);
+ task_copy->description = g_strdup (task->description);
+ task_copy->color_string = g_strdup (task->color_string);
+ task_copy->start_time = task->start_time;
+ task_copy->due_time = task->due_time;
+ task_copy->percent_complete = task->percent_complete;
+ task_copy->completed_time = task->completed_time;
+ task_copy->priority = task->priority;
+}
+
+static void
+calendar_task_finalize (CalendarTask *task)
+{
+ g_free (task->uid);
+ task->uid = NULL;
+
+ g_free (task->summary);
+ task->summary = NULL;
+
+ g_free (task->description);
+ task->description = NULL;
+
+ g_free (task->color_string);
+ task->color_string = NULL;
+
+ task->percent_complete = 0;
+}
+
+static void
+calendar_task_init (CalendarTask *task,
+ icalcomponent *ical,
+ CalendarClientSource *source,
+ icaltimezone *default_zone)
+{
+ task->uid = get_ical_uid (ical);
+ task->summary = get_ical_summary (ical);
+ task->description = get_ical_description (ical);
+ task->color_string = get_source_color (source->source);
+ task->start_time = get_ical_start_time (ical, default_zone);
+ task->due_time = get_ical_due_time (ical, default_zone);
+ task->percent_complete = get_ical_percent_complete (ical);
+ task->completed_time = get_ical_completed_time (ical, default_zone);
+ task->priority = get_ical_priority (ical);
+}
+
+void
+calendar_event_free (CalendarEvent *event)
+{
+ switch (event->type)
+ {
+ case CALENDAR_EVENT_APPOINTMENT:
+ calendar_appointment_finalize (CALENDAR_APPOINTMENT (event));
+ break;
+ case CALENDAR_EVENT_TASK:
+ calendar_task_finalize (CALENDAR_TASK (event));
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ g_free (event);
+}
+
+static CalendarEvent *
+calendar_event_new (icalcomponent *ical,
+ CalendarClientSource *source,
+ icaltimezone *default_zone)
+{
+ CalendarEvent *event;
+
+ event = g_new0 (CalendarEvent, 1);
+
+ switch (icalcomponent_isa (ical))
+ {
+ case ICAL_VEVENT_COMPONENT:
+ event->type = CALENDAR_EVENT_APPOINTMENT;
+ calendar_appointment_init (CALENDAR_APPOINTMENT (event),
+ ical,
+ source,
+ default_zone);
+ break;
+ case ICAL_VTODO_COMPONENT:
+ event->type = CALENDAR_EVENT_TASK;
+ calendar_task_init (CALENDAR_TASK (event),
+ ical,
+ source,
+ default_zone);
+ break;
+ default:
+ g_warning ("Unknown calendar component type: %d\n",
+ icalcomponent_isa (ical));
+ g_free (event);
+ return NULL;
+ }
+
+ return event;
+}
+
+static CalendarEvent *
+calendar_event_copy (CalendarEvent *event)
+{
+ CalendarEvent *retval;
+
+ if (!event)
+ return NULL;
+
+ retval = g_new0 (CalendarEvent, 1);
+
+ retval->type = event->type;
+
+ switch (event->type)
+ {
+ case CALENDAR_EVENT_APPOINTMENT:
+ calendar_appointment_copy (CALENDAR_APPOINTMENT (event),
+ CALENDAR_APPOINTMENT (retval));
+ break;
+ case CALENDAR_EVENT_TASK:
+ calendar_task_copy (CALENDAR_TASK (event),
+ CALENDAR_TASK (retval));
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ return retval;
+}
+
+static char *
+calendar_event_get_uid (CalendarEvent *event)
+{
+ switch (event->type)
+ {
+ case CALENDAR_EVENT_APPOINTMENT:
+ return g_strdup_printf ("%s%s", CALENDAR_APPOINTMENT (event)->uid, CALENDAR_APPOINTMENT (event)->rid ? CALENDAR_APPOINTMENT (event)->rid : "");
+ break;
+ case CALENDAR_EVENT_TASK:
+ return g_strdup (CALENDAR_TASK (event)->uid);
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ return NULL;
+}
+
+static gboolean
+calendar_event_equal (CalendarEvent *a,
+ CalendarEvent *b)
+{
+ if (!a && !b)
+ return TRUE;
+
+ if ((a && !b) || (!a && b))
+ return FALSE;
+
+ if (a->type != b->type)
+ return FALSE;
+
+ switch (a->type)
+ {
+ case CALENDAR_EVENT_APPOINTMENT:
+ return calendar_appointment_equal (CALENDAR_APPOINTMENT (a),
+ CALENDAR_APPOINTMENT (b));
+ case CALENDAR_EVENT_TASK:
+ return calendar_task_equal (CALENDAR_TASK (a),
+ CALENDAR_TASK (b));
+ default:
+ break;
+ }
+
+ g_assert_not_reached ();
+
+ return FALSE;
+}
+
+static void
+calendar_event_generate_ocurrences (CalendarEvent *event,
+ icalcomponent *ical,
+ ECal *source,
+ time_t start,
+ time_t end,
+ icaltimezone *default_zone)
+{
+ if (event->type != CALENDAR_EVENT_APPOINTMENT)
+ return;
+
+ calendar_appointment_generate_ocurrences (CALENDAR_APPOINTMENT (event),
+ ical,
+ source,
+ start,
+ end,
+ default_zone);
+}
+
+static inline void
+calendar_event_debug_dump (CalendarEvent *event)
+{
+#ifdef CALENDAR_ENABLE_DEBUG
+ switch (event->type)
+ {
+ case CALENDAR_EVENT_APPOINTMENT:
+ {
+ char *start_str;
+ char *end_str;
+ GSList *l;
+
+ start_str = CALENDAR_APPOINTMENT (event)->start_time ?
+ isodate_from_time_t (CALENDAR_APPOINTMENT (event)->start_time) :
+ g_strdup ("(undefined)");
+ end_str = CALENDAR_APPOINTMENT (event)->end_time ?
+ isodate_from_time_t (CALENDAR_APPOINTMENT (event)->end_time) :
+ g_strdup ("(undefined)");
+
+ dprintf ("Appointment: uid '%s', summary '%s', description '%s', "
+ "start_time '%s', end_time '%s', is_all_day %s\n",
+ CALENDAR_APPOINTMENT (event)->uid,
+ CALENDAR_APPOINTMENT (event)->summary,
+ CALENDAR_APPOINTMENT (event)->description,
+ start_str,
+ end_str,
+ CALENDAR_APPOINTMENT (event)->is_all_day ? "(true)" : "(false)");
+
+ g_free (start_str);
+ g_free (end_str);
+
+ dprintf (" Occurrences:\n");
+ for (l = CALENDAR_APPOINTMENT (event)->occurrences; l; l = l->next)
+ {
+ CalendarOccurrence *occurrence = l->data;
+
+ start_str = occurrence->start_time ?
+ isodate_from_time_t (occurrence->start_time) :
+ g_strdup ("(undefined)");
+
+ end_str = occurrence->end_time ?
+ isodate_from_time_t (occurrence->end_time) :
+ g_strdup ("(undefined)");
+
+ dprintf (" start_time '%s', end_time '%s'\n",
+ start_str, end_str);
+
+ g_free (start_str);
+ g_free (end_str);
+ }
+ }
+ break;
+ case CALENDAR_EVENT_TASK:
+ {
+ char *start_str;
+ char *due_str;
+ char *completed_str;
+
+ start_str = CALENDAR_TASK (event)->start_time ?
+ isodate_from_time_t (CALENDAR_TASK (event)->start_time) :
+ g_strdup ("(undefined)");
+ due_str = CALENDAR_TASK (event)->due_time ?
+ isodate_from_time_t (CALENDAR_TASK (event)->due_time) :
+ g_strdup ("(undefined)");
+ completed_str = CALENDAR_TASK (event)->completed_time ?
+ isodate_from_time_t (CALENDAR_TASK (event)->completed_time) :
+ g_strdup ("(undefined)");
+
+ dprintf ("Task: uid '%s', summary '%s', description '%s', "
+ "start_time '%s', due_time '%s', percent_complete %d, completed_time '%s'\n",
+ CALENDAR_TASK (event)->uid,
+ CALENDAR_TASK (event)->summary,
+ CALENDAR_TASK (event)->description,
+ start_str,
+ due_str,
+ CALENDAR_TASK (event)->percent_complete,
+ completed_str);
+
+ g_free (completed_str);
+ }
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+#endif
+}
+
+static inline CalendarClientQuery *
+goddamn_this_is_crack (CalendarClientSource *source,
+ ECalView *view,
+ gboolean *emit_signal)
+{
+ g_assert (view != NULL);
+
+ if (source->completed_query.view == view)
+ {
+ if (emit_signal)
+ *emit_signal = TRUE;
+ return &source->completed_query;
+ }
+ else if (source->in_progress_query.view == view)
+ {
+ if (emit_signal)
+ *emit_signal = FALSE;
+ return &source->in_progress_query;
+ }
+
+ g_assert_not_reached ();
+
+ return NULL;
+}
+
+static void
+calendar_client_handle_query_completed (CalendarClientSource *source,
+ ECalendarStatus status,
+ ECalView *view)
+{
+ CalendarClientQuery *query;
+
+ query = goddamn_this_is_crack (source, view, NULL);
+
+ dprintf ("Query %p completed: %s\n", query, e_cal_get_error_message (status));
+
+ if (status != E_CALENDAR_STATUS_OK)
+ {
+ g_warning ("Calendar query failed: %s\n",
+ e_cal_get_error_message (status));
+ calendar_client_stop_query (source->client, source, query);
+ return;
+ }
+
+ g_assert (source->query_in_progress != FALSE);
+ g_assert (query == &source->in_progress_query);
+
+ calendar_client_query_finalize (&source->completed_query);
+
+ source->completed_query = source->in_progress_query;
+ source->query_completed = TRUE;
+
+ source->query_in_progress = FALSE;
+ source->in_progress_query.view = NULL;
+ source->in_progress_query.events = NULL;
+
+ g_signal_emit (source->client, source->changed_signal_id, 0);
+}
+
+static void
+calendar_client_handle_query_result (CalendarClientSource *source,
+ GList *objects,
+ ECalView *view)
+{
+ CalendarClientQuery *query;
+ CalendarClient *client;
+ gboolean emit_signal;
+ gboolean events_changed;
+ GList *l;
+ time_t month_begin;
+ time_t month_end;
+
+ client = source->client;
+
+ query = goddamn_this_is_crack (source, view, &emit_signal);
+
+ dprintf ("Query %p result: %d objects:\n",
+ query, g_list_length (objects));
+
+ month_begin = make_time_for_day_begin (1,
+ client->priv->month,
+ client->priv->year);
+
+ month_end = make_time_for_day_begin (1,
+ client->priv->month + 1,
+ client->priv->year);
+
+ events_changed = FALSE;
+ for (l = objects; l; l = l->next)
+ {
+ CalendarEvent *event;
+ CalendarEvent *old_event;
+ icalcomponent *ical = l->data;
+ char *uid;
+
+ event = calendar_event_new (ical, source, client->priv->zone);
+ if (!event)
+ continue;
+
+ calendar_event_generate_ocurrences (event,
+ ical,
+ source->source,
+ month_begin,
+ month_end,
+ client->priv->zone);
+
+ uid = calendar_event_get_uid (event);
+
+ old_event = g_hash_table_lookup (query->events, uid);
+
+ if (!calendar_event_equal (event, old_event))
+ {
+ dprintf ("Event %s: ", old_event ? "modified" : "added");
+
+ calendar_event_debug_dump (event);
+
+ g_hash_table_replace (query->events, uid, event);
+
+ events_changed = TRUE;
+ }
+ else
+ {
+ g_free (uid);
+ }
+ }
+
+ if (emit_signal && events_changed)
+ {
+ g_signal_emit (source->client, source->changed_signal_id, 0);
+ }
+}
+
+static gboolean
+check_object_remove (gpointer key,
+ gpointer value,
+ gpointer data)
+{
+ char *uid = data;
+ ssize_t len;
+
+ len = strlen (uid);
+
+ if (len <= strlen (key) && strncmp (uid, key, len) == 0)
+ {
+ dprintf ("Event removed: ");
+
+ calendar_event_debug_dump (value);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+calendar_client_handle_objects_removed (CalendarClientSource *source,
+ GList *ids,
+ ECalView *view)
+{
+ CalendarClientQuery *query;
+ gboolean emit_signal;
+ gboolean events_changed;
+ GList *l;
+
+ query = goddamn_this_is_crack (source, view, &emit_signal);
+
+ events_changed = FALSE;
+ for (l = ids; l; l = l->next)
+ {
+ CalendarEvent *event;
+ ECalComponentId *id = l->data;
+ char *uid = g_strdup_printf ("%s%s", id->uid, id->rid ? id->rid : "");
+
+ if (!id->rid || !(*id->rid))
+ {
+ int size = g_hash_table_size (query->events);
+
+ g_hash_table_foreach_remove (query->events, check_object_remove, id->uid);
+
+ if (size != g_hash_table_size (query->events))
+ events_changed = TRUE;
+ }
+ else if ((event = g_hash_table_lookup (query->events, uid)))
+ {
+ dprintf ("Event removed: ");
+
+ calendar_event_debug_dump (event);
+
+ g_assert (g_hash_table_remove (query->events, uid));
+
+ events_changed = TRUE;
+ }
+ g_free (uid);
+ }
+
+ if (emit_signal && events_changed)
+ {
+ g_signal_emit (source->client, source->changed_signal_id, 0);
+ }
+}
+
+static void
+calendar_client_query_finalize (CalendarClientQuery *query)
+{
+ if (query->view)
+ g_object_unref (query->view);
+ query->view = NULL;
+
+ if (query->events)
+ g_hash_table_destroy (query->events);
+ query->events = NULL;
+}
+
+static void
+calendar_client_stop_query (CalendarClient *client,
+ CalendarClientSource *source,
+ CalendarClientQuery *query)
+{
+ if (query == &source->in_progress_query)
+ {
+ dprintf ("Stopping in progress query %p\n", query);
+
+ g_assert (source->query_in_progress != FALSE);
+
+ source->query_in_progress = FALSE;
+ }
+ else if (query == &source->completed_query)
+ {
+ dprintf ("Stopping completed query %p\n", query);
+
+ g_assert (source->query_completed != FALSE);
+
+ source->query_completed = FALSE;
+ }
+ else
+ g_assert_not_reached ();
+
+ calendar_client_query_finalize (query);
+}
+
+static void
+calendar_client_start_query (CalendarClient *client,
+ CalendarClientSource *source,
+ const char *query)
+{
+ ECalView *view = NULL;
+ GError *error = NULL;
+
+ if (!e_cal_get_query (source->source, query, &view, &error))
+ {
+ g_warning ("Error preparing the query: '%s': %s\n",
+ query, error->message);
+ g_error_free (error);
+ return;
+ }
+
+ g_assert (view != NULL);
+
+ if (source->query_in_progress)
+ calendar_client_stop_query (client, source, &source->in_progress_query);
+
+ dprintf ("Starting query %p: '%s'\n", &source->in_progress_query, query);
+
+ source->query_in_progress = TRUE;
+ source->in_progress_query.view = view;
+ source->in_progress_query.events =
+ g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ (GDestroyNotify) calendar_event_free);
+
+ g_signal_connect_swapped (view, "objects-added",
+ G_CALLBACK (calendar_client_handle_query_result),
+ source);
+ g_signal_connect_swapped (view, "objects-modified",
+ G_CALLBACK (calendar_client_handle_query_result),
+ source);
+ g_signal_connect_swapped (view, "objects-removed",
+ G_CALLBACK (calendar_client_handle_objects_removed),
+ source);
+ g_signal_connect_swapped (view, "view-done",
+ G_CALLBACK (calendar_client_handle_query_completed),
+ source);
+
+ e_cal_view_start (view);
+}
+
+static void
+calendar_client_update_appointments (CalendarClient *client)
+{
+ GSList *l;
+ char *query;
+ char *month_begin;
+ char *month_end;
+
+ if (client->priv->month == -1 ||
+ client->priv->year == -1)
+ return;
+
+ month_begin = make_isodate_for_day_begin (1,
+ client->priv->month,
+ client->priv->year);
+
+ month_end = make_isodate_for_day_begin (1,
+ client->priv->month + 1,
+ client->priv->year);
+
+ query = g_strdup_printf ("occur-in-time-range? (make-time \"%s\") "
+ "(make-time \"%s\")",
+ month_begin, month_end);
+
+ for (l = client->priv->appointment_sources; l; l = l->next)
+ {
+ CalendarClientSource *cs = l->data;
+
+ if (e_cal_get_load_state (cs->source) != E_CAL_LOAD_LOADED)
+ continue;
+
+ calendar_client_start_query (client, cs, query);
+ }
+
+ g_free (month_begin);
+ g_free (month_end);
+ g_free (query);
+}
+
+/* FIXME:
+ * perhaps we should use evo's "hide_completed_tasks" pref?
+ */
+static void
+calendar_client_update_tasks (CalendarClient *client)
+{
+ GSList *l;
+ char *query;
+
+#ifdef FIX_BROKEN_TASKS_QUERY
+ /* FIXME: this doesn't work for tasks without a start or
+ * due date
+ * Look at filter_task() to see the behaviour we
+ * want.
+ */
+
+ char *day_begin;
+ char *day_end;
+
+ if (client->priv->day == -1 ||
+ client->priv->month == -1 ||
+ client->priv->year == -1)
+ return;
+
+ day_begin = make_isodate_for_day_begin (client->priv->day,
+ client->priv->month,
+ client->priv->year);
+
+ day_end = make_isodate_for_day_begin (client->priv->day + 1,
+ client->priv->month,
+ client->priv->year);
+ if (!day_begin || !day_end)
+ {
+ g_warning ("Cannot run query with invalid date: %dd %dy %dm\n",
+ client->priv->day,
+ client->priv->month,
+ client->priv->year);
+ g_free (day_begin);
+ g_free (day_end);
+ return;
+ }
+
+ query = g_strdup_printf ("(and (occur-in-time-range? (make-time \"%s\") "
+ "(make-time \"%s\")) "
+ "(or (not is-completed?) "
+ "(and (is-completed?) "
+ "(not (completed-before? (make-time \"%s\"))))))",
+ day_begin, day_end, day_begin);
+#else
+ query = g_strdup ("#t");
+#endif /* FIX_BROKEN_TASKS_QUERY */
+
+ for (l = client->priv->task_sources; l; l = l->next)
+ {
+ CalendarClientSource *cs = l->data;
+
+ if (e_cal_get_load_state (cs->source) != E_CAL_LOAD_LOADED)
+ continue;
+
+ calendar_client_start_query (client, cs, query);
+ }
+
+#ifdef FIX_BROKEN_TASKS_QUERY
+ g_free (day_begin);
+ g_free (day_end);
+#endif
+ g_free (query);
+}
+
+static void
+calendar_client_source_finalize (CalendarClientSource *source)
+{
+ source->client = NULL;
+
+ if (source->source) {
+ g_signal_handlers_disconnect_by_func (source->source,
+ cal_opened_cb, source);
+ g_object_unref (source->source);
+ }
+ source->source = NULL;
+
+ calendar_client_query_finalize (&source->completed_query);
+ calendar_client_query_finalize (&source->in_progress_query);
+
+ source->query_completed = FALSE;
+ source->query_in_progress = FALSE;
+}
+
+static int
+compare_calendar_sources (CalendarClientSource *s1,
+ CalendarClientSource *s2)
+{
+ return (s1->source == s2->source) ? 0 : 1;
+}
+
+static GSList *
+calendar_client_update_sources_list (CalendarClient *client,
+ GSList *sources,
+ GSList *esources,
+ guint changed_signal_id)
+{
+ GSList *retval, *l;
+
+ retval = NULL;
+
+ for (l = esources; l; l = l->next)
+ {
+ CalendarClientSource dummy_source;
+ CalendarClientSource *new_source;
+ GSList *s;
+ ECal *esource = l->data;
+
+ dummy_source.source = esource;
+
+ dprintf ("update_sources_list: adding client %s: ",
+ e_source_peek_uid (e_cal_get_source (esource)));
+
+ if ((s = g_slist_find_custom (sources,
+ &dummy_source,
+ (GCompareFunc) compare_calendar_sources)))
+ {
+ dprintf ("already on list\n");
+ new_source = s->data;
+ sources = g_slist_delete_link (sources, s);
+ }
+ else
+ {
+ dprintf ("added\n");
+ new_source = g_new0 (CalendarClientSource, 1);
+ new_source->client = client;
+ new_source->source = g_object_ref (esource);
+ new_source->changed_signal_id = changed_signal_id;
+ }
+
+ retval = g_slist_prepend (retval, new_source);
+ }
+
+ for (l = sources; l; l = l->next)
+ {
+ CalendarClientSource *source = l->data;
+
+ dprintf ("Removing client %s from list\n",
+ e_source_peek_uid (e_cal_get_source (source->source)));
+
+ calendar_client_source_finalize (source);
+ g_free (source);
+ }
+ g_slist_free (sources);
+
+ return retval;
+}
+
+static void
+calendar_client_appointment_sources_changed (CalendarClient *client)
+{
+ GSList *esources;
+
+ dprintf ("appointment_sources_changed: updating ...\n");
+
+ esources = calendar_sources_get_appointment_sources (client->priv->calendar_sources);
+
+ client->priv->appointment_sources =
+ calendar_client_update_sources_list (client,
+ client->priv->appointment_sources,
+ esources,
+ signals [APPOINTMENTS_CHANGED]);
+
+ load_calendars (client, CALENDAR_EVENT_APPOINTMENT);
+ calendar_client_update_appointments (client);
+}
+
+static void
+calendar_client_task_sources_changed (CalendarClient *client)
+{
+ GSList *esources;
+
+ dprintf ("task_sources_changed: updating ...\n");
+
+ esources = calendar_sources_get_task_sources (client->priv->calendar_sources);
+
+ client->priv->task_sources =
+ calendar_client_update_sources_list (client,
+ client->priv->task_sources,
+ esources,
+ signals [TASKS_CHANGED]);
+
+ load_calendars (client, CALENDAR_EVENT_TASK);
+ calendar_client_update_tasks (client);
+}
+
+void
+calendar_client_get_date (CalendarClient *client,
+ guint *year,
+ guint *month,
+ guint *day)
+{
+ g_return_if_fail (CALENDAR_IS_CLIENT (client));
+
+ if (year)
+ *year = client->priv->year;
+
+ if (month)
+ *month = client->priv->month;
+
+ if (day)
+ *day = client->priv->day;
+}
+
+void
+calendar_client_select_month (CalendarClient *client,
+ guint month,
+ guint year)
+{
+ g_return_if_fail (CALENDAR_IS_CLIENT (client));
+ g_return_if_fail (month <= 11);
+
+ if (client->priv->year != year || client->priv->month != month)
+ {
+ client->priv->month = month;
+ client->priv->year = year;
+
+ calendar_client_update_appointments (client);
+ calendar_client_update_tasks (client);
+
+ g_object_freeze_notify (G_OBJECT (client));
+ g_object_notify (G_OBJECT (client), "month");
+ g_object_notify (G_OBJECT (client), "year");
+ g_object_thaw_notify (G_OBJECT (client));
+ }
+}
+
+void
+calendar_client_select_day (CalendarClient *client,
+ guint day)
+{
+ g_return_if_fail (CALENDAR_IS_CLIENT (client));
+ g_return_if_fail (day <= 31);
+
+ if (client->priv->day != day)
+ {
+ client->priv->day = day;
+
+ /* don't need to update appointments unless
+ * the selected month changes
+ */
+#ifdef FIX_BROKEN_TASKS_QUERY
+ calendar_client_update_tasks (client);
+#endif
+
+ g_object_notify (G_OBJECT (client), "day");
+ }
+}
+
+typedef struct
+{
+ CalendarClient *client;
+ GSList *events;
+ time_t start_time;
+ time_t end_time;
+} FilterData;
+
+typedef void (* CalendarEventFilterFunc) (const char *uid,
+ CalendarEvent *event,
+ FilterData *filter_data);
+
+static void
+filter_appointment (const char *uid,
+ CalendarEvent *event,
+ FilterData *filter_data)
+{
+ GSList *occurrences, *l;
+
+ if (event->type != CALENDAR_EVENT_APPOINTMENT)
+ return;
+
+ occurrences = CALENDAR_APPOINTMENT (event)->occurrences;
+ CALENDAR_APPOINTMENT (event)->occurrences = NULL;
+
+ for (l = occurrences; l; l = l->next)
+ {
+ CalendarOccurrence *occurrence = l->data;
+ time_t start_time = occurrence->start_time;
+ time_t end_time = occurrence->end_time;
+
+ if ((start_time >= filter_data->start_time &&
+ start_time < filter_data->end_time) ||
+ (start_time <= filter_data->start_time &&
+ (end_time - 1) > filter_data->start_time))
+ {
+ CalendarEvent *new_event;
+
+ new_event = calendar_event_copy (event);
+
+ CALENDAR_APPOINTMENT (new_event)->start_time = occurrence->start_time;
+ CALENDAR_APPOINTMENT (new_event)->end_time = occurrence->end_time;
+
+ filter_data->events = g_slist_prepend (filter_data->events, new_event);
+ }
+ }
+
+ CALENDAR_APPOINTMENT (event)->occurrences = occurrences;
+}
+
+static void
+filter_task (const char *uid,
+ CalendarEvent *event,
+ FilterData *filter_data)
+{
+#ifdef FIX_BROKEN_TASKS_QUERY
+ CalendarTask *task;
+#endif
+
+ if (event->type != CALENDAR_EVENT_TASK)
+ return;
+
+#ifdef FIX_BROKEN_TASKS_QUERY
+ task = CALENDAR_TASK (event);
+
+ if (task->start_time && task->start_time > filter_data->start_time)
+ return;
+
+ if (task->completed_time &&
+ (task->completed_time < filter_data->start_time ||
+ task->completed_time > filter_data->end_time))
+ return;
+#endif /* FIX_BROKEN_TASKS_QUERY */
+
+ filter_data->events = g_slist_prepend (filter_data->events,
+ calendar_event_copy (event));
+}
+
+static GSList *
+calendar_client_filter_events (CalendarClient *client,
+ GSList *sources,
+ CalendarEventFilterFunc filter_func,
+ time_t start_time,
+ time_t end_time)
+{
+ FilterData filter_data;
+ GSList *l;
+ GSList *retval;
+
+ if (!sources)
+ return NULL;
+
+ filter_data.client = client;
+ filter_data.events = NULL;
+ filter_data.start_time = start_time;
+ filter_data.end_time = end_time;
+
+ retval = NULL;
+ for (l = sources; l; l = l->next)
+ {
+ CalendarClientSource *source = l->data;
+
+ if (source->query_completed)
+ {
+ filter_data.events = NULL;
+ g_hash_table_foreach (source->completed_query.events,
+ (GHFunc) filter_func,
+ &filter_data);
+
+ filter_data.events = g_slist_reverse (filter_data.events);
+
+ retval = g_slist_concat (retval, filter_data.events);
+ }
+ }
+
+ return retval;
+}
+
+GSList *
+calendar_client_get_events (CalendarClient *client,
+ CalendarEventType event_mask)
+{
+ GSList *appointments;
+ GSList *tasks;
+ time_t day_begin;
+ time_t day_end;
+
+ g_return_val_if_fail (CALENDAR_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (client->priv->day != -1 &&
+ client->priv->month != -1 &&
+ client->priv->year != -1, NULL);
+
+ day_begin = make_time_for_day_begin (client->priv->day,
+ client->priv->month,
+ client->priv->year);
+ day_end = make_time_for_day_begin (client->priv->day + 1,
+ client->priv->month,
+ client->priv->year);
+
+ appointments = NULL;
+ if (event_mask & CALENDAR_EVENT_APPOINTMENT)
+ {
+ appointments = calendar_client_filter_events (client,
+ client->priv->appointment_sources,
+ filter_appointment,
+ day_begin,
+ day_end);
+ }
+
+ tasks = NULL;
+ if (event_mask & CALENDAR_EVENT_TASK)
+ {
+ tasks = calendar_client_filter_events (client,
+ client->priv->task_sources,
+ filter_task,
+ day_begin,
+ day_end);
+ }
+
+ return g_slist_concat (appointments, tasks);
+}
+
+static inline int
+day_from_time_t (time_t t)
+{
+ struct tm *tm = localtime (&t);
+
+ g_assert (tm == NULL || (tm->tm_mday >=1 && tm->tm_mday <= 31));
+
+ return tm ? tm->tm_mday : 0;
+}
+
+void
+calendar_client_foreach_appointment_day (CalendarClient *client,
+ CalendarDayIter iter_func,
+ gpointer user_data)
+{
+ GSList *appointments, *l;
+ gboolean marked_days [32] = { FALSE, };
+ time_t month_begin;
+ time_t month_end;
+ int i;
+
+ g_return_if_fail (CALENDAR_IS_CLIENT (client));
+ g_return_if_fail (iter_func != NULL);
+ g_return_if_fail (client->priv->month != -1 &&
+ client->priv->year != -1);
+
+ month_begin = make_time_for_day_begin (1,
+ client->priv->month,
+ client->priv->year);
+ month_end = make_time_for_day_begin (1,
+ client->priv->month + 1,
+ client->priv->year);
+
+ appointments = calendar_client_filter_events (client,
+ client->priv->appointment_sources,
+ filter_appointment,
+ month_begin,
+ month_end);
+ for (l = appointments; l; l = l->next)
+ {
+ CalendarAppointment *appointment = l->data;
+
+ if (appointment->start_time)
+ {
+ time_t day_time = appointment->start_time;
+
+ if (day_time >= month_begin)
+ marked_days [day_from_time_t (day_time)] = TRUE;
+
+ if (appointment->end_time)
+ {
+ int day_offset;
+ int duration = appointment->end_time - appointment->start_time;
+ /* mark the days for the appointment, no need to add an extra one when duration is a multiple of 86400 */
+ for (day_offset = 1; day_offset <= duration / 86400 && duration != day_offset * 86400; day_offset++)
+ {
+ time_t day_tm = appointment->start_time + day_offset * 86400;
+
+ if (day_tm > month_end)
+ break;
+ if (day_tm >= month_begin)
+ marked_days [day_from_time_t (day_tm)] = TRUE;
+ }
+ }
+ }
+ calendar_event_free (CALENDAR_EVENT (appointment));
+ }
+
+ g_slist_free (appointments);
+
+ for (i = 1; i < 32; i++)
+ {
+ if (marked_days [i])
+ iter_func (client, i, user_data);
+ }
+}
+
+void
+calendar_client_set_task_completed (CalendarClient *client,
+ char *task_uid,
+ gboolean task_completed,
+ guint percent_complete)
+{
+ GSList *l;
+ ECal *esource;
+ icalcomponent *ical;
+ icalproperty *prop;
+ icalproperty_status status;
+
+ g_return_if_fail (CALENDAR_IS_CLIENT (client));
+ g_return_if_fail (task_uid != NULL);
+ g_return_if_fail (task_completed == FALSE || percent_complete == 100);
+
+ ical = NULL;
+ esource = NULL;
+ for (l = client->priv->task_sources; l; l = l->next)
+ {
+ CalendarClientSource *source = l->data;
+
+ esource = source->source;
+ e_cal_get_object (esource, task_uid, NULL, &ical, NULL);
+ if (ical)
+ break;
+ }
+
+ if (!ical)
+ {
+ g_warning ("Cannot locate task with uid = '%s'\n", task_uid);
+ return;
+ }
+
+ g_assert (esource != NULL);
+
+ /* Completed time */
+ prop = icalcomponent_get_first_property (ical,
+ ICAL_COMPLETED_PROPERTY);
+ if (task_completed)
+ {
+ struct icaltimetype completed_time;
+
+ completed_time = icaltime_current_time_with_zone (client->priv->zone);
+ if (!prop)
+ {
+ icalcomponent_add_property (ical,
+ icalproperty_new_completed (completed_time));
+ }
+ else
+ {
+ icalproperty_set_completed (prop, completed_time);
+ }
+ }
+ else if (prop)
+ {
+ icalcomponent_remove_property (ical, prop);
+ }
+
+ /* Percent complete */
+ prop = icalcomponent_get_first_property (ical,
+ ICAL_PERCENTCOMPLETE_PROPERTY);
+ if (!prop)
+ {
+ icalcomponent_add_property (ical,
+ icalproperty_new_percentcomplete (percent_complete));
+ }
+ else
+ {
+ icalproperty_set_percentcomplete (prop, percent_complete);
+ }
+
+ /* Status */
+ status = task_completed ? ICAL_STATUS_COMPLETED : ICAL_STATUS_NEEDSACTION;
+ prop = icalcomponent_get_first_property (ical, ICAL_STATUS_PROPERTY);
+ if (prop)
+ {
+ icalproperty_set_status (prop, status);
+ }
+ else
+ {
+ icalcomponent_add_property (ical,
+ icalproperty_new_status (status));
+ }
+
+ e_cal_modify_object (esource, ical, CALOBJ_MOD_ALL, NULL);
+}
diff --git a/applets/clock/calendar-client.h b/applets/clock/calendar-client.h
new file mode 100644
index 00000000..9d502ba0
--- /dev/null
+++ b/applets/clock/calendar-client.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2004 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Mark McLoughlin <[email protected]>
+ * William Jon McCann <[email protected]>
+ * Martin Grimme <[email protected]>
+ * Christian Kellner <[email protected]>
+ */
+
+#ifndef __CALENDAR_CLIENT_H__
+#define __CALENDAR_CLIENT_H__
+
+#include <glib-object.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum
+{
+ CALENDAR_EVENT_APPOINTMENT = 1 << 0,
+ CALENDAR_EVENT_TASK = 1 << 1,
+ CALENDAR_EVENT_ALL = (1 << 2) - 1
+} CalendarEventType;
+
+#define CALENDAR_TYPE_CLIENT (calendar_client_get_type ())
+#define CALENDAR_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CALENDAR_TYPE_CLIENT, CalendarClient))
+#define CALENDAR_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), CALENDAR_TYPE_CLIENT, CalendarClientClass))
+#define CALENDAR_IS_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CALENDAR_TYPE_CLIENT))
+#define CALENDAR_IS_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CALENDAR_TYPE_CLIENT))
+#define CALENDAR_CLIENT_GET_CLASS(o)(G_TYPE_INSTANCE_GET_CLASS ((o), CALENDAR_TYPE_CLIENT, CalendarClientClass))
+
+typedef struct _CalendarClient CalendarClient;
+typedef struct _CalendarClientClass CalendarClientClass;
+typedef struct _CalendarClientPrivate CalendarClientPrivate;
+
+struct _CalendarClient
+{
+ GObject parent;
+ CalendarClientPrivate *priv;
+};
+
+struct _CalendarClientClass
+{
+ GObjectClass parent_class;
+
+ void (* appointments_changed) (CalendarClient *client);
+ void (* tasks_changed) (CalendarClient *client);
+};
+
+
+typedef struct
+{
+ time_t start_time;
+ time_t end_time;
+} CalendarOccurrence;
+
+typedef struct
+{
+ char *uid;
+ char *rid;
+ char *uri;
+ char *summary;
+ char *description;
+ char *color_string;
+ time_t start_time;
+ time_t end_time;
+ guint is_all_day : 1;
+
+ /* Only used internally */
+ GSList *occurrences;
+} CalendarAppointment;
+
+typedef struct
+{
+ char *uid;
+ char *summary;
+ char *description;
+ char *color_string;
+ char *url;
+ time_t start_time;
+ time_t due_time;
+ guint percent_complete;
+ time_t completed_time;
+ int priority;
+} CalendarTask;
+
+typedef struct
+{
+ union
+ {
+ CalendarAppointment appointment;
+ CalendarTask task;
+ } event;
+ CalendarEventType type;
+} CalendarEvent;
+
+#define CALENDAR_EVENT(e) ((CalendarEvent *)(e))
+#define CALENDAR_APPOINTMENT(e) ((CalendarAppointment *)(e))
+#define CALENDAR_TASK(e) ((CalendarTask *)(e))
+
+typedef void (* CalendarDayIter) (CalendarClient *client,
+ guint day,
+ gpointer user_data);
+
+
+GType calendar_client_get_type (void) G_GNUC_CONST;
+CalendarClient *calendar_client_new (void);
+
+void calendar_client_get_date (CalendarClient *client,
+ guint *year,
+ guint *month,
+ guint *day);
+void calendar_client_select_month (CalendarClient *client,
+ guint month,
+ guint year);
+void calendar_client_select_day (CalendarClient *client,
+ guint day);
+
+GSList *calendar_client_get_events (CalendarClient *client,
+ CalendarEventType event_mask);
+void calendar_client_foreach_appointment_day (CalendarClient *client,
+ CalendarDayIter iter_func,
+ gpointer user_data);
+
+void calendar_client_set_task_completed (CalendarClient *client,
+ char *task_uid,
+ gboolean task_completed,
+ guint percent_complete);
+
+void calendar_event_free (CalendarEvent *event);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CALENDAR_CLIENT_H__ */
diff --git a/applets/clock/calendar-debug.h b/applets/clock/calendar-debug.h
new file mode 100644
index 00000000..a7ea2a79
--- /dev/null
+++ b/applets/clock/calendar-debug.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2004 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Mark McLoughlin <[email protected]>
+ */
+
+#ifndef __CALENDAR_DEBUG_H__
+#define __CALENDAR_DEBUG_H__
+
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef CALENDAR_ENABLE_DEBUG
+
+#include <stdio.h>
+
+#ifdef G_HAVE_ISO_VARARGS
+# define dprintf(...) fprintf (stderr, __VA_ARGS__);
+#elif defined(G_HAVE_GNUC_VARARGS)
+# define dprintf(args...) fprintf (stderr, args);
+#endif
+
+#else /* if !defined (CALENDAR_DEBUG) */
+
+#ifdef G_HAVE_ISO_VARARGS
+# define dprintf(...)
+#elif defined(G_HAVE_GNUC_VARARGS)
+# define dprintf(args...)
+#endif
+
+#endif /* CALENDAR_ENABLE_DEBUG */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CALENDAR_DEBUG_H__ */
diff --git a/applets/clock/calendar-sources.c b/applets/clock/calendar-sources.c
new file mode 100644
index 00000000..721ff062
--- /dev/null
+++ b/applets/clock/calendar-sources.c
@@ -0,0 +1,658 @@
+/*
+ * Copyright (C) 2004 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Mark McLoughlin <[email protected]>
+ * William Jon McCann <[email protected]>
+ * Martin Grimme <[email protected]>
+ * Christian Kellner <[email protected]>
+ */
+
+#include <config.h>
+
+#include "calendar-sources.h"
+
+#include <libintl.h>
+#include <string.h>
+#include <mateconf/mateconf-client.h>
+#define HANDLE_LIBICAL_MEMORY
+#include <libecal/e-cal.h>
+#include <libedataserver/e-source-list.h>
+#include <libedataserverui/e-passwords.h>
+
+#undef CALENDAR_ENABLE_DEBUG
+#include "calendar-debug.h"
+
+#ifndef _
+#define _(x) gettext(x)
+#endif
+
+#ifndef N_
+#define N_(x) x
+#endif
+
+#define CALENDAR_SOURCES_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesPrivate))
+
+#define CALENDAR_SOURCES_EVO_DIR "/apps/evolution"
+#define CALENDAR_SOURCES_APPOINTMENT_SOURCES_KEY CALENDAR_SOURCES_EVO_DIR "/calendar/sources"
+#define CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_DIR CALENDAR_SOURCES_EVO_DIR "/calendar/display"
+#define CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_KEY CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_DIR "/selected_calendars"
+#define CALENDAR_SOURCES_TASK_SOURCES_KEY CALENDAR_SOURCES_EVO_DIR "/tasks/sources"
+#define CALENDAR_SOURCES_SELECTED_TASK_SOURCES_DIR CALENDAR_SOURCES_EVO_DIR "/calendar/tasks"
+#define CALENDAR_SOURCES_SELECTED_TASK_SOURCES_KEY CALENDAR_SOURCES_SELECTED_TASK_SOURCES_DIR "/selected_tasks"
+
+typedef struct _CalendarSourceData CalendarSourceData;
+
+struct _CalendarSourceData
+{
+ ECalSourceType source_type;
+ CalendarSources *sources;
+ guint changed_signal;
+
+ GSList *clients;
+ GSList *selected_sources;
+ ESourceList *esource_list;
+
+ guint selected_sources_listener;
+ char *selected_sources_dir;
+
+ guint timeout_id;
+
+ guint loaded : 1;
+};
+
+struct _CalendarSourcesPrivate
+{
+ CalendarSourceData appointment_sources;
+ CalendarSourceData task_sources;
+
+ MateConfClient *mateconf_client;
+};
+
+static void calendar_sources_class_init (CalendarSourcesClass *klass);
+static void calendar_sources_init (CalendarSources *sources);
+static void calendar_sources_finalize (GObject *object);
+
+static void backend_died_cb (ECal *client, CalendarSourceData *source_data);
+static void calendar_sources_esource_list_changed (ESourceList *source_list,
+ CalendarSourceData *source_data);
+
+enum
+{
+ APPOINTMENT_SOURCES_CHANGED,
+ TASK_SOURCES_CHANGED,
+ LAST_SIGNAL
+};
+static guint signals [LAST_SIGNAL] = { 0, };
+
+static GObjectClass *parent_class = NULL;
+static CalendarSources *calendar_sources_singleton = NULL;
+
+GType
+calendar_sources_get_type (void)
+{
+ static GType sources_type = 0;
+
+ if (!sources_type)
+ {
+ static const GTypeInfo sources_info =
+ {
+ sizeof (CalendarSourcesClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) calendar_sources_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (CalendarSources),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) calendar_sources_init,
+ };
+
+ sources_type = g_type_register_static (G_TYPE_OBJECT,
+ "CalendarSources",
+ &sources_info, 0);
+ }
+
+ return sources_type;
+}
+
+static void
+calendar_sources_class_init (CalendarSourcesClass *klass)
+{
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ gobject_class->finalize = calendar_sources_finalize;
+
+ g_type_class_add_private (klass, sizeof (CalendarSourcesPrivate));
+
+ signals [APPOINTMENT_SOURCES_CHANGED] =
+ g_signal_new ("appointment-sources-changed",
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (CalendarSourcesClass,
+ appointment_sources_changed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ signals [TASK_SOURCES_CHANGED] =
+ g_signal_new ("task-sources-changed",
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (CalendarSourcesClass,
+ task_sources_changed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+}
+
+static void
+calendar_sources_init (CalendarSources *sources)
+{
+ sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources);
+
+ sources->priv->appointment_sources.source_type = E_CAL_SOURCE_TYPE_EVENT;
+ sources->priv->appointment_sources.sources = sources;
+ sources->priv->appointment_sources.changed_signal = signals [APPOINTMENT_SOURCES_CHANGED];
+ sources->priv->appointment_sources.timeout_id = 0;
+
+ sources->priv->task_sources.source_type = E_CAL_SOURCE_TYPE_TODO;
+ sources->priv->task_sources.sources = sources;
+ sources->priv->task_sources.changed_signal = signals [TASK_SOURCES_CHANGED];
+ sources->priv->task_sources.timeout_id = 0;
+
+ sources->priv->mateconf_client = mateconf_client_get_default ();
+}
+
+static void
+calendar_sources_finalize_source_data (CalendarSources *sources,
+ CalendarSourceData *source_data)
+{
+ if (source_data->loaded)
+ {
+ GSList *l;
+
+ if (source_data->selected_sources_dir)
+ {
+ mateconf_client_remove_dir (sources->priv->mateconf_client,
+ source_data->selected_sources_dir,
+ NULL);
+
+ g_free (source_data->selected_sources_dir);
+ source_data->selected_sources_dir = NULL;
+ }
+
+ if (source_data->selected_sources_listener)
+ {
+ mateconf_client_notify_remove (sources->priv->mateconf_client,
+ source_data->selected_sources_listener);
+ source_data->selected_sources_listener = 0;
+ }
+
+ for (l = source_data->clients; l; l = l->next)
+ {
+ g_signal_handlers_disconnect_by_func (G_OBJECT (l->data),
+ G_CALLBACK (backend_died_cb),
+ source_data);
+ g_object_unref (l->data);
+ }
+ g_slist_free (source_data->clients);
+ source_data->clients = NULL;
+
+ if (source_data->esource_list)
+ {
+ g_signal_handlers_disconnect_by_func (source_data->esource_list,
+ G_CALLBACK (calendar_sources_esource_list_changed),
+ source_data);
+ g_object_unref (source_data->esource_list);
+ }
+ source_data->esource_list = NULL;
+
+ for (l = source_data->selected_sources; l; l = l->next)
+ g_free (l->data);
+ g_slist_free (source_data->selected_sources);
+ source_data->selected_sources = NULL;
+
+ if (source_data->timeout_id != 0)
+ {
+ g_source_remove (source_data->timeout_id);
+ source_data->timeout_id = 0;
+ }
+
+ source_data->loaded = FALSE;
+ }
+}
+
+static void
+calendar_sources_finalize (GObject *object)
+{
+ CalendarSources *sources = CALENDAR_SOURCES (object);
+
+ calendar_sources_finalize_source_data (sources, &sources->priv->appointment_sources);
+ calendar_sources_finalize_source_data (sources, &sources->priv->task_sources);
+
+ if (sources->priv->mateconf_client)
+ g_object_unref (sources->priv->mateconf_client);
+ sources->priv->mateconf_client = NULL;
+
+ if (G_OBJECT_CLASS (parent_class)->finalize)
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+CalendarSources *
+calendar_sources_get (void)
+{
+ gpointer singleton_location = &calendar_sources_singleton;
+
+ if (calendar_sources_singleton)
+ return g_object_ref (calendar_sources_singleton);
+
+ calendar_sources_singleton = g_object_new (CALENDAR_TYPE_SOURCES, NULL);
+ g_object_add_weak_pointer (G_OBJECT (calendar_sources_singleton),
+ singleton_location);
+
+ return calendar_sources_singleton;
+}
+
+static gboolean
+is_source_selected (ESource *esource,
+ GSList *selected_sources)
+{
+ const char *uid;
+ GSList *l;
+
+ uid = e_source_peek_uid (esource);
+
+ for (l = selected_sources; l; l = l->next)
+ {
+ const char *source = l->data;
+
+ if (!strcmp (source, uid))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static char *
+auth_func_cb (ECal *ecal,
+ const char *prompt,
+ const char *key,
+ gpointer user_data)
+{
+ ESource *source;
+ const gchar *auth_domain;
+ const gchar *component_name;
+
+ source = e_cal_get_source (ecal);
+ auth_domain = e_source_get_property (source, "auth-domain");
+ component_name = auth_domain ? auth_domain : "Calendar";
+
+ return e_passwords_get_password (component_name, key);
+}
+
+/* The clients are just created here but not loaded */
+static ECal *
+get_ecal_from_source (ESource *esource,
+ ECalSourceType source_type,
+ GSList *existing_clients)
+{
+ ECal *retval;
+
+ if (existing_clients)
+ {
+ GSList *l;
+
+ for (l = existing_clients; l; l = l->next)
+ {
+ ECal *client = E_CAL (l->data);
+
+ if (e_source_equal (esource, e_cal_get_source (client)))
+ {
+ dprintf (" load_esource: found existing source ... returning that\n");
+
+ return g_object_ref (client);
+ }
+ }
+ }
+
+ retval = e_cal_new (esource, source_type);
+ if (!retval)
+ {
+ g_warning ("Could not load source '%s' from '%s'\n",
+ e_source_peek_name (esource),
+ e_source_peek_relative_uri (esource));
+ return NULL;
+ }
+
+ e_cal_set_auth_func (retval, auth_func_cb, NULL);
+
+ return retval;
+}
+
+/* - Order doesn't matter
+ * - Can just compare object pointers since we
+ * re-use client connections
+ */
+static gboolean
+compare_ecal_lists (GSList *a,
+ GSList *b)
+{
+ GSList *l;
+
+ if (g_slist_length (a) != g_slist_length (b))
+ return FALSE;
+
+ for (l = a; l; l = l->next)
+ {
+ if (!g_slist_find (b, l->data))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static inline void
+debug_dump_selected_sources (GSList *selected_sources)
+{
+#ifdef CALENDAR_ENABLE_DEBUG
+ GSList *l;
+
+ dprintf ("Selected sources:\n");
+ for (l = selected_sources; l; l = l->next)
+ {
+ char *source = l->data;
+
+ dprintf (" %s\n", source);
+ }
+ dprintf ("\n");
+#endif
+}
+
+static inline void
+debug_dump_ecal_list (GSList *ecal_list)
+{
+#ifdef CALENDAR_ENABLE_DEBUG
+ GSList *l;
+
+ dprintf ("Loaded clients:\n");
+ for (l = ecal_list; l; l = l->next)
+ {
+ ECal *client = l->data;
+ ESource *source = e_cal_get_source (client);
+
+ dprintf (" %s %s %s\n",
+ e_source_peek_uid (source),
+ e_source_peek_name (source),
+ e_cal_get_uri (client));
+ }
+#endif
+}
+
+static void
+calendar_sources_load_esource_list (CalendarSourceData *source_data);
+
+static gboolean
+backend_restart (gpointer data)
+{
+ CalendarSourceData *source_data = data;
+
+ calendar_sources_load_esource_list (source_data);
+
+ source_data->timeout_id = 0;
+
+ return FALSE;
+}
+
+static void
+backend_died_cb (ECal *client, CalendarSourceData *source_data)
+{
+ const char *uristr;
+
+ source_data->clients = g_slist_remove (source_data->clients, client);
+ if (g_slist_length (source_data->clients) < 1)
+ {
+ g_slist_free (source_data->clients);
+ source_data->clients = NULL;
+ }
+ uristr = e_cal_get_uri (client);
+ g_warning ("The calendar backend for %s has crashed.", uristr);
+
+ if (source_data->timeout_id != 0)
+ {
+ g_source_remove (source_data->timeout_id);
+ source_data->timeout_id = 0;
+ }
+
+ source_data->timeout_id = g_timeout_add_seconds (2, backend_restart,
+ source_data);
+}
+
+static void
+calendar_sources_load_esource_list (CalendarSourceData *source_data)
+{
+ GSList *clients = NULL;
+ GSList *groups, *l;
+ gboolean emit_signal = FALSE;
+
+ g_return_if_fail (source_data->esource_list != NULL);
+
+ debug_dump_selected_sources (source_data->selected_sources);
+
+ dprintf ("Source groups:\n");
+ groups = e_source_list_peek_groups (source_data->esource_list);
+ for (l = groups; l; l = l->next)
+ {
+ GSList *esources, *s;
+
+ dprintf (" %s\n", e_source_group_peek_uid (l->data));
+ dprintf (" sources:\n");
+
+ esources = e_source_group_peek_sources (l->data);
+ for (s = esources; s; s = s->next)
+ {
+ ESource *esource = E_SOURCE (s->data);
+ ECal *client;
+
+ dprintf (" type = '%s' uid = '%s', name = '%s', relative uri = '%s': \n",
+ source_data->source_type == E_CAL_SOURCE_TYPE_EVENT ? "appointment" : "task",
+ e_source_peek_uid (esource),
+ e_source_peek_name (esource),
+ e_source_peek_relative_uri (esource));
+
+ if (is_source_selected (esource, source_data->selected_sources) &&
+ (client = get_ecal_from_source (esource, source_data->source_type, source_data->clients)))
+ {
+ clients = g_slist_prepend (clients, client);
+ }
+ }
+ }
+ dprintf ("\n");
+
+ if (source_data->loaded &&
+ !compare_ecal_lists (source_data->clients, clients))
+ emit_signal = TRUE;
+
+ for (l = source_data->clients; l; l = l->next)
+ {
+ g_signal_handlers_disconnect_by_func (G_OBJECT (l->data),
+ G_CALLBACK (backend_died_cb),
+ source_data);
+
+ g_object_unref (l->data);
+ }
+ g_slist_free (source_data->clients);
+ source_data->clients = g_slist_reverse (clients);
+
+ /* connect to backend_died after we disconnected the previous signal
+ * handlers. If we do it before, we'll lose some handlers (for clients that
+ * were already there before) */
+ for (l = source_data->clients; l; l = l->next)
+ {
+ g_signal_connect (G_OBJECT (l->data), "backend_died",
+ G_CALLBACK (backend_died_cb), source_data);
+ }
+
+ if (emit_signal)
+ {
+ dprintf ("Emitting %s-sources-changed signal\n",
+ source_data->source_type == E_CAL_SOURCE_TYPE_EVENT ? "appointment" : "task");
+ g_signal_emit (source_data->sources, source_data->changed_signal, 0);
+ }
+
+ debug_dump_ecal_list (source_data->clients);
+}
+
+static void
+calendar_sources_esource_list_changed (ESourceList *source_list,
+ CalendarSourceData *source_data)
+
+{
+ dprintf ("ESourceList changed, reloading\n");
+
+ calendar_sources_load_esource_list (source_data);
+}
+
+static void
+calendar_sources_selected_sources_notify (MateConfClient *client,
+ guint cnx_id,
+ MateConfEntry *entry,
+ CalendarSourceData *source_data)
+{
+ GSList *l;
+
+ if (!entry->value ||
+ entry->value->type != MATECONF_VALUE_LIST ||
+ mateconf_value_get_list_type (entry->value) != MATECONF_VALUE_STRING)
+ return;
+
+ dprintf ("Selected sources key (%s) changed, reloading\n", entry->key);
+
+ for (l = source_data->selected_sources; l; l = l->next)
+ g_free (l->data);
+ source_data->selected_sources = NULL;
+
+ for (l = mateconf_value_get_list (entry->value); l; l = l->next)
+ {
+ const char *source = mateconf_value_get_string (l->data);
+
+ source_data->selected_sources =
+ g_slist_prepend (source_data->selected_sources,
+ g_strdup (source));
+ }
+ source_data->selected_sources =
+ g_slist_reverse (source_data->selected_sources);
+
+ calendar_sources_load_esource_list (source_data);
+}
+
+static void
+calendar_sources_load_sources (CalendarSources *sources,
+ CalendarSourceData *source_data,
+ const char *sources_key,
+ const char *selected_sources_key,
+ const char *selected_sources_dir)
+{
+ MateConfClient *mateconf_client;
+ GError *error;
+
+ dprintf ("---------------------------\n");
+ dprintf ("Loading sources:\n");
+ dprintf (" sources_key: %s\n", sources_key);
+ dprintf (" selected_sources_key: %s\n", selected_sources_key);
+ dprintf (" selected_sources_dir: %s\n", selected_sources_dir);
+
+ mateconf_client = sources->priv->mateconf_client;
+
+ error = NULL;
+ source_data->selected_sources = mateconf_client_get_list (mateconf_client,
+ selected_sources_key,
+ MATECONF_VALUE_STRING,
+ &error);
+ if (error)
+ {
+ g_warning ("Failed to get selected sources from '%s': %s\n",
+ selected_sources_key,
+ error->message);
+ g_error_free (error);
+ return;
+ }
+
+ mateconf_client_add_dir (mateconf_client,
+ selected_sources_dir,
+ MATECONF_CLIENT_PRELOAD_NONE,
+ NULL);
+ source_data->selected_sources_dir = g_strdup (selected_sources_dir);
+
+ source_data->selected_sources_listener =
+ mateconf_client_notify_add (mateconf_client,
+ selected_sources_dir,
+ (MateConfClientNotifyFunc) calendar_sources_selected_sources_notify,
+ source_data, NULL, NULL);
+
+ source_data->esource_list = e_source_list_new_for_mateconf (mateconf_client, sources_key);
+ g_signal_connect (source_data->esource_list, "changed",
+ G_CALLBACK (calendar_sources_esource_list_changed),
+ source_data);
+
+ calendar_sources_load_esource_list (source_data);
+
+ source_data->loaded = TRUE;
+
+ dprintf ("---------------------------\n");
+}
+
+GSList *
+calendar_sources_get_appointment_sources (CalendarSources *sources)
+{
+ g_return_val_if_fail (CALENDAR_IS_SOURCES (sources), NULL);
+
+ if (!sources->priv->appointment_sources.loaded)
+ {
+ calendar_sources_load_sources (sources,
+ &sources->priv->appointment_sources,
+ CALENDAR_SOURCES_APPOINTMENT_SOURCES_KEY,
+ CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_KEY,
+ CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_DIR);
+ }
+
+ return sources->priv->appointment_sources.clients;
+}
+
+GSList *
+calendar_sources_get_task_sources (CalendarSources *sources)
+{
+ g_return_val_if_fail (CALENDAR_IS_SOURCES (sources), NULL);
+
+ if (!sources->priv->task_sources.loaded)
+ {
+ calendar_sources_load_sources (sources,
+ &sources->priv->task_sources,
+ CALENDAR_SOURCES_TASK_SOURCES_KEY,
+ CALENDAR_SOURCES_SELECTED_TASK_SOURCES_KEY,
+ CALENDAR_SOURCES_SELECTED_TASK_SOURCES_DIR);
+ }
+
+ return sources->priv->task_sources.clients;
+}
diff --git a/applets/clock/calendar-sources.h b/applets/clock/calendar-sources.h
new file mode 100644
index 00000000..3f080c55
--- /dev/null
+++ b/applets/clock/calendar-sources.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2004 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Mark McLoughlin <[email protected]>
+ * William Jon McCann <[email protected]>
+ * Martin Grimme <[email protected]>
+ * Christian Kellner <[email protected]>
+ */
+
+#ifndef __CALENDAR_SOURCES_H__
+#define __CALENDAR_SOURCES_H__
+
+#include <glib-object.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CALENDAR_TYPE_SOURCES (calendar_sources_get_type ())
+#define CALENDAR_SOURCES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CALENDAR_TYPE_SOURCES, CalendarSources))
+#define CALENDAR_SOURCES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), CALENDAR_TYPE_SOURCES, CalendarSourcesClass))
+#define CALENDAR_IS_SOURCES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CALENDAR_TYPE_SOURCES))
+#define CALENDAR_IS_SOURCES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CALENDAR_TYPE_SOURCES))
+#define CALENDAR_SOURCES_GET_CLASS(o)(G_TYPE_INSTANCE_GET_CLASS ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesClass))
+
+typedef struct _CalendarSources CalendarSources;
+typedef struct _CalendarSourcesClass CalendarSourcesClass;
+typedef struct _CalendarSourcesPrivate CalendarSourcesPrivate;
+
+struct _CalendarSources
+{
+ GObject parent;
+ CalendarSourcesPrivate *priv;
+};
+
+struct _CalendarSourcesClass
+{
+ GObjectClass parent_class;
+
+ void (* appointment_sources_changed) (CalendarSources *sources);
+ void (* task_sources_changed) (CalendarSources *sources);
+};
+
+
+GType calendar_sources_get_type (void) G_GNUC_CONST;
+CalendarSources *calendar_sources_get (void);
+GSList *calendar_sources_get_appointment_sources (CalendarSources *sources);
+GSList *calendar_sources_get_task_sources (CalendarSources *sources);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CALENDAR_SOURCES_H__ */
diff --git a/applets/clock/calendar-window.c b/applets/clock/calendar-window.c
new file mode 100644
index 00000000..d675f492
--- /dev/null
+++ b/applets/clock/calendar-window.c
@@ -0,0 +1,2125 @@
+/*
+ * calendar-window.c: toplevel window containing a calendar and
+ * tasks/appointments
+ *
+ * Copyright (C) 2007 Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Vincent Untz <[email protected]>
+ *
+ * Most of the original code comes from clock.c
+ */
+
+ /*
+ * Evolution calendar integration TODO:
+ * + Fix treeview scrolling and sizing
+ * + Tooltips for tasks/appointments
+ * + Do everything backwards if the clock is on the bottom
+ * + Double clicking appointments/tasks should open them in evo
+ * + Consider using different colours for different sources
+ * + Consider doing a GtkMenu tearoff type thing
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <mateconf/mateconf-client.h>
+
+#define MATE_DESKTOP_USE_UNSTABLE_API
+#include <libmate/mate-desktop-utils.h>
+
+#include "calendar-window.h"
+
+#include "clock.h"
+#include "clock-utils.h"
+#include "clock-typebuiltins.h"
+#ifdef HAVE_LIBECAL
+#include "calendar-client.h"
+#endif
+
+#define CALENDAR_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_WINDOW, CalendarWindowPrivate))
+
+#define KEY_LOCATIONS_EXPANDED "expand_locations"
+#ifdef HAVE_LIBECAL
+/* For the following value, take into account the KEY_* that are not inside this #ifdef! */
+# define N_CALENDAR_WINDOW_MATECONF_PREFS 5
+# define KEY_APPOINTMENTS_EXPANDED "expand_appointments"
+# define KEY_BIRTHDAYS_EXPANDED "expand_birthdays"
+# define KEY_TASKS_EXPANDED "expand_tasks"
+# define KEY_WEATHER_EXPANDED "expand_weather"
+
+# define KEY_CALENDAR_APP "/desktop/mate/applications/calendar"
+# define KEY_TASKS_APP "/desktop/mate/applications/tasks"
+#else
+# define N_CALENDAR_WINDOW_MATECONF_PREFS 1
+#endif
+
+enum {
+ EDIT_LOCATIONS,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+struct _CalendarWindowPrivate {
+ GtkWidget *calendar;
+
+ char *prefs_dir;
+
+ gboolean invert_order;
+ gboolean show_weeks;
+ time_t *current_time;
+
+ GtkWidget *locations_list;
+
+#ifdef HAVE_LIBECAL
+ ClockFormat time_format;
+
+ CalendarClient *client;
+
+ GtkWidget *appointment_list;
+ GtkWidget *birthday_list;
+ GtkWidget *weather_list;
+ GtkWidget *task_list;
+
+ GtkListStore *appointments_model;
+ GtkListStore *tasks_model;
+
+ GtkTreeSelection *previous_selection;
+
+ GtkTreeModelFilter *appointments_filter;
+ GtkTreeModelFilter *birthdays_filter;
+ GtkTreeModelFilter *tasks_filter;
+ GtkTreeModelFilter *weather_filter;
+
+ MateConfClient *mateconfclient;
+#endif /* HAVE_LIBECAL */
+};
+
+G_DEFINE_TYPE (CalendarWindow, calendar_window, GTK_TYPE_WINDOW)
+
+enum {
+ PROP_0,
+ PROP_INVERTORDER,
+ PROP_SHOWWEEKS,
+#ifdef HAVE_LIBECAL
+ PROP_TIMEFORMAT,
+#endif
+ PROP_CURRENTTIMEP,
+ PROP_PREFSDIR
+};
+
+static time_t *calendar_window_get_current_time_p (CalendarWindow *calwin);
+static void calendar_window_set_current_time_p (CalendarWindow *calwin,
+ time_t *current_time);
+static const char *calendar_window_get_prefs_dir (CalendarWindow *calwin);
+static void calendar_window_set_prefs_dir (CalendarWindow *calwin,
+ const char *prefs_dir);
+static GtkWidget * create_hig_frame (CalendarWindow *calwin,
+ const char *title,
+ const char *button_label,
+ const char *key,
+ GCallback callback);
+
+#ifdef HAVE_LIBECAL
+
+static void
+clock_launch_calendar_tasks_app (CalendarWindow *calwin,
+ const char *key_program,
+ const char *argument)
+{
+ char **argv;
+ int argc;
+ char *key;
+ char *program;
+ gboolean terminal;
+ char *command_line;
+ GdkScreen *screen;
+ GError *error;
+ gboolean result;
+
+ key = g_strdup_printf ("%s%s", key_program, "/exec");
+ program = mateconf_client_get_string (calwin->priv->mateconfclient,
+ key, NULL);
+ g_free (key);
+
+ key = g_strdup_printf ("%s%s", key_program, "/needs_term");
+ terminal = mateconf_client_get_bool (calwin->priv->mateconfclient,
+ key, NULL);
+ g_free (key);
+
+ if (program == NULL) {
+ g_printerr ("Cannot launch calendar/tasks application: key not set\n");
+ return;
+ }
+
+ command_line = g_find_program_in_path (program);
+ if (command_line == NULL) {
+ g_printerr ("Cannot launch calendar/tasks application: %s in path\n", program);
+ g_free (program);
+ return;
+ }
+ g_free (command_line);
+
+ if (argument) {
+ argc = 2;
+ argv = g_new0 (char *, 3);
+ argv[1] = g_strdup (argument);
+ } else {
+ argc = 1;
+ argv = g_new0 (char *, 2);
+ }
+ argv[0] = program; /* no strdup, and it will get freed for free */
+
+ screen = gtk_widget_get_screen (calwin->priv->calendar);
+ error = NULL;
+
+ if (terminal)
+ mate_desktop_prepend_terminal_to_vector (&argc, &argv);
+
+ result = gdk_spawn_on_screen (screen,
+ NULL, /* working directory */
+ argv,
+ NULL, /* envp */
+ G_SPAWN_SEARCH_PATH,
+ NULL, /* child setup func */
+ NULL, /* user data */
+ NULL, /* child pid */
+ &error);
+
+ if (!result) {
+ g_printerr ("Cannot launch calendar/tasks application: %s\n",
+ error->message);
+ g_error_free (error);
+ }
+
+ g_strfreev (argv);
+}
+
+static void
+clock_launch_calendar_app (CalendarWindow *calwin,
+ const char *argument)
+{
+ clock_launch_calendar_tasks_app (calwin, KEY_CALENDAR_APP, argument);
+}
+
+static void
+clock_launch_tasks_app (CalendarWindow *calwin,
+ const char *argument)
+{
+ clock_launch_calendar_tasks_app (calwin, KEY_TASKS_APP, argument);
+}
+
+static void
+update_frame_visibility (GtkWidget *frame,
+ GtkTreeModel *model)
+{
+ GtkTreeIter iter;
+ gboolean model_empty;
+
+ if (!frame)
+ return;
+
+ model_empty = !gtk_tree_model_get_iter_first (model, &iter);
+
+ if (model_empty)
+ gtk_widget_hide (frame);
+ else
+ gtk_widget_show (frame);
+}
+
+enum {
+ APPOINTMENT_COLUMN_UID,
+ APPOINTMENT_COLUMN_URI,
+ APPOINTMENT_COLUMN_SUMMARY,
+ APPOINTMENT_COLUMN_DESCRIPTION,
+ APPOINTMENT_COLUMN_START_TIME,
+ APPOINTMENT_COLUMN_START_TEXT,
+ APPOINTMENT_COLUMN_END_TIME,
+ APPOINTMENT_COLUMN_ALL_DAY,
+ APPOINTMENT_COLUMN_PIXBUF,
+ N_APPOINTMENT_COLUMNS
+};
+
+enum {
+ TASK_COLUMN_UID,
+ TASK_COLUMN_SUMMARY,
+ TASK_COLUMN_DESCRIPTION,
+ TASK_COLUMN_START_TIME,
+ TASK_COLUMN_DUE_TIME,
+ TASK_COLUMN_PERCENT_COMPLETE,
+ TASK_COLUMN_PERCENT_COMPLETE_TEXT,
+ TASK_COLUMN_COMPLETED,
+ TASK_COLUMN_COMPLETED_TIME,
+ TASK_COLUMN_OVERDUE_ATTR,
+ TASK_COLUMN_COLOR,
+ TASK_COLUMN_PRIORITY,
+ N_TASK_COLUMNS
+};
+
+static char *
+format_time (ClockFormat format,
+ time_t t,
+ guint year,
+ guint month,
+ guint day)
+{
+ struct tm *tm;
+ char *time_format;
+ char result [256] = { 0, };
+
+ if (!t)
+ return NULL;
+
+ tm = localtime (&t);
+ if (!tm)
+ return NULL;
+
+ if (year == (tm->tm_year + 1900) &&
+ month == tm->tm_mon &&
+ day == tm->tm_mday) {
+ if (format == CLOCK_FORMAT_12)
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 12-hours format
+ * (eg, like in the US: 8:10 am). The %p expands to
+ * am/pm. */
+ time_format = g_locale_from_utf8 (_("%l:%M %p"), -1, NULL, NULL, NULL);
+ else
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 24-hours format
+ * (eg, like in France: 20:10). */
+ time_format = g_locale_from_utf8 (_("%H:%M"), -1, NULL, NULL, NULL);
+ }
+ else {
+ /* Translators: This is a strftime format string.
+ * It is used to display the start date of an appointment, in
+ * the most abbreviated way possible. */
+ time_format = g_locale_from_utf8 (_("%b %d"), -1, NULL, NULL, NULL);
+ }
+
+ strftime (result, sizeof (result), time_format, tm);
+ g_free (time_format);
+
+ return g_locale_to_utf8 (result, -1, NULL, NULL, NULL);
+}
+
+static void
+handle_tasks_changed (CalendarWindow *calwin)
+{
+ GSList *events, *l;
+
+ gtk_list_store_clear (calwin->priv->tasks_model);
+
+ events = calendar_client_get_events (calwin->priv->client,
+ CALENDAR_EVENT_TASK);
+ for (l = events; l; l = l->next) {
+ CalendarTask *task = l->data;
+ GtkTreeIter iter;
+ char *percent_complete_text;
+
+ g_assert (CALENDAR_EVENT (task)->type == CALENDAR_EVENT_TASK);
+
+ /* FIXME: should this format be locale specific ? */
+ percent_complete_text = g_strdup_printf ("%d%%", task->percent_complete);
+
+ gtk_list_store_append (calwin->priv->tasks_model, &iter);
+ gtk_list_store_set (calwin->priv->tasks_model, &iter,
+ TASK_COLUMN_UID, task->uid,
+ TASK_COLUMN_SUMMARY, task->summary,
+ TASK_COLUMN_DESCRIPTION, task->description,
+ TASK_COLUMN_START_TIME, (gint64)task->start_time,
+ TASK_COLUMN_DUE_TIME, (gint64)task->due_time,
+ TASK_COLUMN_PERCENT_COMPLETE, task->percent_complete,
+ TASK_COLUMN_PERCENT_COMPLETE_TEXT, percent_complete_text,
+ TASK_COLUMN_COMPLETED, task->percent_complete == 100,
+ TASK_COLUMN_COMPLETED_TIME, (gint64)task->completed_time,
+ TASK_COLUMN_COLOR, task->color_string,
+ TASK_COLUMN_PRIORITY, task->priority,
+ -1);
+
+ g_free (percent_complete_text);
+ calendar_event_free (CALENDAR_EVENT (task));
+ }
+ g_slist_free (events);
+
+ update_frame_visibility (calwin->priv->task_list,
+ GTK_TREE_MODEL (calwin->priv->tasks_filter));
+}
+
+static void
+handle_task_completed_toggled (CalendarWindow *calwin,
+ const char *path_str,
+ GtkCellRendererToggle *cell)
+{
+ GtkTreePath *child_path, *path;
+ GtkTreeIter iter;
+ char *uid;
+ gboolean task_completed;
+ guint percent_complete;
+
+ path = gtk_tree_path_new_from_string (path_str);
+ child_path = gtk_tree_model_filter_convert_path_to_child_path (calwin->priv->tasks_filter, path);
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &iter, child_path);
+ gtk_tree_model_get (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &iter,
+ TASK_COLUMN_UID, &uid,
+ TASK_COLUMN_COMPLETED, &task_completed,
+ TASK_COLUMN_PERCENT_COMPLETE, &percent_complete,
+ -1);
+
+ task_completed = !task_completed;
+ percent_complete = task_completed ? 100 : 0;
+
+ calendar_client_set_task_completed (calwin->priv->client,
+ uid,
+ task_completed,
+ percent_complete);
+
+ g_free (uid);
+ gtk_tree_path_free (path);
+ gtk_tree_path_free (child_path);
+}
+
+static void
+handle_task_percent_complete_edited (CalendarWindow *calwin,
+ const char *path_str,
+ const char *text,
+ GtkCellRendererText *cell)
+{
+ GtkTreePath *child_path, *path;
+ GtkTreeIter iter;
+ char *uid;
+ int percent_complete;
+ char *error = NULL, *text_copy;
+
+ path = gtk_tree_path_new_from_string (path_str);
+ child_path = gtk_tree_model_filter_convert_path_to_child_path (calwin->priv->tasks_filter, path);
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &iter, child_path);
+ gtk_tree_model_get (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &iter, TASK_COLUMN_UID, &uid,
+ -1);
+
+ text_copy = g_strdup (text);
+ text_copy = g_strdelimit (text_copy, "%", ' ');
+ text_copy = g_strstrip (text_copy);
+ percent_complete = (int) g_strtod (text_copy, &error);
+ if (!error || !error [0]) {
+ gboolean task_completed;
+
+ percent_complete = CLAMP (percent_complete, 0, 100);
+ task_completed = (percent_complete == 100);
+
+ calendar_client_set_task_completed (calwin->priv->client,
+ uid,
+ task_completed,
+ percent_complete);
+ }
+
+ g_free (uid);
+ g_free (text_copy);
+ gtk_tree_path_free (path);
+ gtk_tree_path_free (child_path);
+}
+
+static gboolean
+is_appointment (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ gchar *uri;
+
+ gtk_tree_model_get (model, iter, APPOINTMENT_COLUMN_URI, &uri, -1);
+ if (uri)
+ return (g_ascii_strcasecmp (uri, "file") == 0 ||
+ g_ascii_strcasecmp (uri, "webcal") == 0 ||
+ g_ascii_strcasecmp (uri, "caldav") == 0 ||
+ g_ascii_strcasecmp (uri, "exchange") == 0 ||
+ g_ascii_strcasecmp (uri, "groupwise") == 0 ||
+ g_ascii_strcasecmp (uri, "google") == 0);
+ return FALSE;
+}
+
+static gboolean
+is_birthday (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ gchar *uri;
+
+ gtk_tree_model_get (model, iter, APPOINTMENT_COLUMN_URI, &uri, -1);
+ if (uri)
+ return (g_ascii_strcasecmp (uri, "contacts") == 0);
+ return FALSE;
+}
+
+static gboolean
+is_weather (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ gchar *uri;
+
+ gtk_tree_model_get (model, iter, APPOINTMENT_COLUMN_URI, &uri, -1);
+ if (uri)
+ return (g_ascii_strcasecmp (uri, "weather") == 0);
+ return FALSE;
+}
+
+static gboolean
+filter_out_tasks (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ CalendarWindow *calwin)
+{
+ gint64 start_time64;
+ gint64 completed_time64;
+ time_t start_time;
+ time_t completed_time;
+ time_t one_day_ago;
+ gboolean visible;
+
+ gtk_tree_model_get (model, iter,
+ TASK_COLUMN_START_TIME, &start_time64,
+ TASK_COLUMN_COMPLETED_TIME, &completed_time64,
+ -1);
+ start_time = start_time64;
+ completed_time = completed_time64;
+
+ one_day_ago = *(calwin->priv->current_time) - (24 * 60 * 60);
+
+ visible = !start_time || start_time <= *(calwin->priv->current_time);
+ if (visible)
+ visible = !completed_time || completed_time >= one_day_ago;
+
+ return visible;
+}
+
+static void
+modify_task_text_attributes (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ GValue *value,
+ gint column,
+ CalendarWindow *calwin)
+{
+ gint64 due_time64;
+ time_t due_time;
+ PangoAttrList *attr_list;
+ PangoAttribute *attr;
+ GtkTreeIter child_iter;
+
+ gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model),
+ &child_iter,
+ iter);
+
+ if (column != TASK_COLUMN_OVERDUE_ATTR) {
+ memset (value, 0, sizeof (GValue));
+ gtk_tree_model_get_value (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &child_iter, column, value);
+
+ return;
+ }
+
+ gtk_tree_model_get (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &child_iter, TASK_COLUMN_DUE_TIME, &due_time64,
+ -1);
+ due_time = due_time64;
+
+ if (due_time && due_time > *(calwin->priv->current_time))
+ return;
+
+ attr_list = pango_attr_list_new ();
+
+ attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
+ attr->start_index = 0;
+ attr->end_index = G_MAXINT;
+ pango_attr_list_insert (attr_list, attr);
+
+ g_value_take_boxed (value, attr_list);
+}
+
+static gboolean
+task_activated_cb (GtkTreeView *view,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ CalendarWindow *calwin)
+{
+ GtkTreeIter iter;
+ GtkTreePath *child_path;
+ char *uid;
+ char *argument;
+
+ child_path = gtk_tree_model_filter_convert_path_to_child_path (calwin->priv->tasks_filter,
+ path);
+
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &iter, child_path);
+ gtk_tree_model_get (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &iter, TASK_COLUMN_UID, &uid, -1);
+
+ argument = g_strdup_printf ("task:%s", uid);
+
+ clock_launch_tasks_app (calwin, argument);
+
+ g_free (argument);
+ g_free (uid);
+ gtk_tree_path_free (child_path);
+
+ return TRUE;
+}
+
+static void
+set_renderer_pixbuf_color_by_column (GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gint column_number)
+{
+ char *color_string;
+ GdkPixbuf *pixbuf = NULL;
+ GdkColor color;
+
+ gtk_tree_model_get (model, iter, column_number, &color_string, -1);
+
+ if (color_string && gdk_color_parse (color_string, &color)) {
+ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 16, 16);
+ /* GdkColor has 16 bits per color, gdk_pixbuf only uses 8 bits
+ * per color. So just drop the least significant parts */
+ gdk_pixbuf_fill (pixbuf,
+ (color.red & 0xff00) << 16 |
+ (color.green & 0xff00) << 8 |
+ (color.blue & 0xff00));
+
+ g_object_set (renderer, "visible", pixbuf != NULL, "pixbuf", pixbuf, NULL);
+
+ if (pixbuf)
+ g_object_unref (pixbuf);
+
+ g_free (color_string);
+ }
+}
+
+static void
+set_renderer_pixbuf_pixmap (GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ const char *iconpath)
+{
+ GdkPixbuf *pixbuf = NULL;
+ GError *error = NULL;
+
+ if (!g_file_test (iconpath, G_FILE_TEST_IS_REGULAR)) {
+ g_printerr ("File '%s' does not exist.\n", iconpath);
+ return;
+ }
+
+ pixbuf = gdk_pixbuf_new_from_file (iconpath, &error);
+ if (error) {
+ g_printerr ("Cannot load '%s': %s\n",
+ iconpath, error->message);
+ g_error_free (error);
+ return;
+ }
+
+ g_object_set (renderer,
+ "visible", pixbuf != NULL,
+ "pixbuf", pixbuf,
+ NULL);
+
+ if (pixbuf)
+ g_object_unref (pixbuf);
+}
+
+static void
+set_renderer_pixbuf_pixmap_for_bday (GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gint data_column)
+{
+ const gchar *path = NULL;
+ gchar *type = NULL;
+
+ gtk_tree_model_get (model, iter, data_column, &type, -1);
+ if (!type)
+ return;
+
+ /* type should be in format like this:
+ * pas-id-4121A93E00000001-anniversary
+ * pas-id-41112AF900000003-birthday
+ * ...
+ */
+ if (g_strrstr (type, "birthday") != NULL)
+ path = CLOCK_EDS_ICONDIR G_DIR_SEPARATOR_S "category_birthday_16.png";
+ else if (g_strrstr (type, "anniversary") != NULL)
+ path = CLOCK_EDS_ICONDIR G_DIR_SEPARATOR_S "category_gifts_16.png";
+ else
+ path = CLOCK_EDS_ICONDIR G_DIR_SEPARATOR_S "category_miscellaneous_16.png";
+
+ g_free (type);
+
+ set_renderer_pixbuf_pixmap (renderer, model, iter, path);
+}
+
+static void
+set_renderer_pixbuf_pixmap_for_weather (GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter)
+{
+ set_renderer_pixbuf_pixmap (renderer, model, iter,
+ CLOCK_EDS_ICONDIR G_DIR_SEPARATOR_S "category_holiday_16.png");
+}
+
+static void
+task_pixbuf_cell_data_func (GtkTreeViewColumn *column,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ set_renderer_pixbuf_color_by_column (renderer,
+ model,
+ iter,
+ TASK_COLUMN_COLOR);
+}
+
+static void
+appointment_pixbuf_cell_data_func (GtkTreeViewColumn *column,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ set_renderer_pixbuf_color_by_column (renderer,
+ model,
+ iter,
+ APPOINTMENT_COLUMN_PIXBUF);
+}
+static void
+birthday_pixbuf_cell_data_func (GtkTreeViewColumn *column,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+
+ /* APPOINTMENT_COLUMN_UID contains data to select between
+ * anniversary or birthday
+ */
+ set_renderer_pixbuf_pixmap_for_bday (renderer,
+ model,
+ iter,
+ APPOINTMENT_COLUMN_UID);
+}
+static void
+weather_pixbuf_cell_data_func (GtkTreeViewColumn *column,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+
+ set_renderer_pixbuf_pixmap_for_weather (renderer,
+ model,
+ iter);
+}
+
+static int
+compare_tasks (GtkTreeModel *model,
+ GtkTreeIter *a,
+ GtkTreeIter *b,
+ gpointer user_data)
+{
+ gboolean done_a, done_b;
+ int priority_a, priority_b;
+
+ gtk_tree_model_get (model, a,
+ TASK_COLUMN_COMPLETED, &done_a,
+ TASK_COLUMN_PRIORITY, &priority_a,
+ -1);
+ gtk_tree_model_get (model, b,
+ TASK_COLUMN_COMPLETED, &done_b,
+ TASK_COLUMN_PRIORITY, &priority_b,
+ -1);
+
+ /* Always sort completed tasks last */
+ if (done_a != done_b)
+ return done_a ? -1 : 1;
+
+ /* We change undefined priorities so they appear as "Normal" */
+ if (priority_a <= 0)
+ priority_a = 5;
+ if (priority_b <= 0)
+ priority_b = 5;
+
+ /* We'll just use the ordering of the priority values. */
+ if (priority_a < priority_b)
+ return -1;
+ else if (priority_a > priority_b)
+ return 1;
+ else {
+ gint64 due_time_a64, due_time_b64;
+ time_t due_time_a, due_time_b;
+
+ gtk_tree_model_get (model, a,
+ TASK_COLUMN_DUE_TIME, &due_time_a64, -1);
+ gtk_tree_model_get (model, b,
+ TASK_COLUMN_DUE_TIME, &due_time_b64, -1);
+ due_time_a = due_time_a64;
+ due_time_b = due_time_b64;
+
+ if (due_time_a < due_time_b)
+ return -1;
+ else if (due_time_a > due_time_b)
+ return 1;
+ else {
+ char *summary_a, *summary_b;
+ int res;
+
+ gtk_tree_model_get (model, a, TASK_COLUMN_SUMMARY, &summary_a, -1);
+ gtk_tree_model_get (model, b, TASK_COLUMN_SUMMARY, &summary_b, -1);
+
+ res = g_utf8_collate (summary_a ? summary_a: "",
+ summary_b ? summary_b: "");
+
+ g_free (summary_a);
+ g_free (summary_b);
+
+ return res;
+ }
+ }
+}
+
+static void
+calendar_window_tree_selection_changed (GtkTreeSelection *selection,
+ CalendarWindow *calwin)
+{
+ if (selection == calwin->priv->previous_selection)
+ return;
+
+ if (calwin->priv->previous_selection) {
+ g_signal_handlers_block_by_func (calwin->priv->previous_selection,
+ calendar_window_tree_selection_changed,
+ calwin);
+ gtk_tree_selection_unselect_all (calwin->priv->previous_selection);
+ g_signal_handlers_unblock_by_func (calwin->priv->previous_selection,
+ calendar_window_tree_selection_changed,
+ calwin);
+ }
+
+ calwin->priv->previous_selection = selection;
+}
+
+static void
+edit_tasks (CalendarWindow *calwin)
+{
+ clock_launch_tasks_app (calwin, NULL);
+}
+
+static GtkWidget *
+create_task_list (CalendarWindow *calwin,
+ GtkWidget **tree_view,
+ GtkWidget **scrolled_window)
+{
+ GtkWidget *list;
+ GtkWidget *view;
+ GtkWidget *scrolled;
+ GtkCellRenderer *cell;
+ GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
+
+ list = create_hig_frame (calwin,
+ _("Tasks"), _("Edit"),
+ KEY_TASKS_EXPANDED,
+ G_CALLBACK (edit_tasks));
+
+ *scrolled_window = scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled),
+ GTK_SHADOW_IN);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+ /* we show the widget before adding to the container, since adding to
+ * the container changes the visibility depending on the state of the
+ * expander */
+ gtk_widget_show (scrolled);
+ gtk_container_add (GTK_CONTAINER (list), scrolled);
+
+ g_assert (calwin->priv->tasks_model != NULL);
+
+ *tree_view = view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (calwin->priv->tasks_filter));
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), FALSE);
+
+ g_signal_connect (view, "row-activated",
+ G_CALLBACK (task_activated_cb), calwin);
+
+ /* Source color */
+ column = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_set_cell_data_func (column, cell,
+ (GtkTreeCellDataFunc) task_pixbuf_cell_data_func,
+ NULL, NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+
+ /* Completed toggle */
+ column = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_toggle_new ();
+ g_object_set (cell,
+ "activatable", TRUE,
+ NULL);
+ g_signal_connect_swapped (cell, "toggled",
+ G_CALLBACK (handle_task_completed_toggled),
+ calwin);
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_add_attribute (column, cell,
+ "active", TASK_COLUMN_COMPLETED);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+
+ /* Percent complete */
+ column = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell,
+ "editable", TRUE,
+ NULL);
+ g_signal_connect_swapped (cell, "edited",
+ G_CALLBACK (handle_task_percent_complete_edited),
+ calwin);
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_add_attribute (column, cell,
+ "text", TASK_COLUMN_PERCENT_COMPLETE_TEXT);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+
+ /* Summary */
+ column = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_set_attributes (column, cell,
+ "text", TASK_COLUMN_SUMMARY,
+ "strikethrough", TASK_COLUMN_COMPLETED,
+ "attributes", TASK_COLUMN_OVERDUE_ATTR,
+ NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (calendar_window_tree_selection_changed),
+ calwin);
+
+ gtk_container_add (GTK_CONTAINER (scrolled), view);
+
+ gtk_widget_show (view);
+
+ return list;
+}
+
+static void
+mark_day_on_calendar (CalendarClient *client,
+ guint day,
+ CalendarWindow *calwin)
+{
+ gtk_calendar_mark_day (GTK_CALENDAR (calwin->priv->calendar), day);
+}
+
+static void
+handle_appointments_changed (CalendarWindow *calwin)
+{
+ GSList *events, *l;
+ guint year, month, day;
+
+ if (calwin->priv->calendar) {
+ gtk_calendar_clear_marks (GTK_CALENDAR (calwin->priv->calendar));
+
+ calendar_client_foreach_appointment_day (calwin->priv->client,
+ (CalendarDayIter) mark_day_on_calendar,
+ calwin);
+ }
+
+ gtk_list_store_clear (calwin->priv->appointments_model);
+
+ calendar_client_get_date (calwin->priv->client, &year, &month, &day);
+
+ events = calendar_client_get_events (calwin->priv->client,
+ CALENDAR_EVENT_APPOINTMENT);
+ for (l = events; l; l = l->next) {
+ CalendarAppointment *appointment = l->data;
+ GtkTreeIter iter;
+ char *start_text;
+
+ g_assert (CALENDAR_EVENT (appointment)->type == CALENDAR_EVENT_APPOINTMENT);
+
+ if (appointment->is_all_day)
+ start_text = g_strdup (_("All Day"));
+ else
+ start_text = format_time (calwin->priv->time_format,
+ appointment->start_time,
+ year, month, day);
+
+
+ gtk_list_store_append (calwin->priv->appointments_model,
+ &iter);
+ gtk_list_store_set (calwin->priv->appointments_model, &iter,
+ APPOINTMENT_COLUMN_UID, appointment->uid,
+ APPOINTMENT_COLUMN_URI, appointment->uri,
+ APPOINTMENT_COLUMN_SUMMARY, appointment->summary,
+ APPOINTMENT_COLUMN_DESCRIPTION, appointment->description,
+ APPOINTMENT_COLUMN_START_TIME, (gint64)appointment->start_time,
+ APPOINTMENT_COLUMN_START_TEXT, start_text,
+ APPOINTMENT_COLUMN_END_TIME, (gint64)appointment->end_time,
+ APPOINTMENT_COLUMN_ALL_DAY, appointment->is_all_day,
+ APPOINTMENT_COLUMN_PIXBUF, appointment->color_string,
+ -1);
+
+ g_free (start_text);
+ calendar_event_free (CALENDAR_EVENT (appointment));
+ }
+ g_slist_free (events);
+
+ update_frame_visibility (calwin->priv->appointment_list,
+ GTK_TREE_MODEL (calwin->priv->appointments_filter));
+ update_frame_visibility (calwin->priv->birthday_list,
+ GTK_TREE_MODEL (calwin->priv->birthdays_filter));
+ update_frame_visibility (calwin->priv->weather_list,
+ GTK_TREE_MODEL (calwin->priv->weather_filter));
+}
+
+static GtkWidget *
+create_list_for_appointment_model (CalendarWindow *calwin,
+ const char *label,
+ GtkTreeModelFilter **filter,
+ GtkTreeModelFilterVisibleFunc is_for_filter,
+ GtkTreeCellDataFunc set_pixbuf_cell,
+ gboolean show_start,
+ GtkWidget **tree_view,
+ GtkWidget **scrolled_window,
+ const char *key,
+ GCallback callback)
+{
+ GtkWidget *list;
+ GtkWidget *view;
+ GtkWidget *scrolled;
+ GtkCellRenderer *cell;
+ GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
+
+
+ list = create_hig_frame (calwin, label, _("Edit"), key, callback);
+
+ *scrolled_window = scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled),
+ GTK_SHADOW_IN);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+ /* we show the widget before adding to the container, since adding to
+ * the container changes the visibility depending on the state of the
+ * expander */
+ gtk_widget_show (scrolled);
+ gtk_container_add (GTK_CONTAINER (list), scrolled);
+
+ g_assert (calwin->priv->appointments_model != NULL);
+
+ if (!*filter) {
+ *filter =
+ GTK_TREE_MODEL_FILTER (
+ gtk_tree_model_filter_new (GTK_TREE_MODEL (calwin->priv->appointments_model),
+ NULL));
+ gtk_tree_model_filter_set_visible_func (
+ *filter,
+ (GtkTreeModelFilterVisibleFunc) is_for_filter,
+ calwin,
+ NULL);
+ }
+
+ *tree_view = view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (*filter));
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), FALSE);
+
+ /* Icon */
+ column = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_set_cell_data_func (column, cell,
+ (GtkTreeCellDataFunc) set_pixbuf_cell,
+ NULL, NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+
+ if (show_start) {
+ /* Start time */
+ column = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_add_attribute (column, cell,
+ "text", APPOINTMENT_COLUMN_START_TEXT);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+ }
+
+ /* Summary */
+ column = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_add_attribute (column, cell,
+ "text", APPOINTMENT_COLUMN_SUMMARY);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (calendar_window_tree_selection_changed),
+ calwin);
+
+ gtk_container_add (GTK_CONTAINER (scrolled), view);
+
+ gtk_widget_show (view);
+
+ return list;
+}
+
+static void
+edit_appointments (CalendarWindow *calwin)
+{
+ clock_launch_calendar_app (calwin, NULL);
+}
+
+static GtkWidget *
+create_appointment_list (CalendarWindow *calwin,
+ GtkWidget **tree_view,
+ GtkWidget **scrolled_window)
+{
+ return create_list_for_appointment_model (
+ calwin,
+ _("Appointments"),
+ &calwin->priv->appointments_filter,
+ is_appointment,
+ appointment_pixbuf_cell_data_func,
+ TRUE,
+ tree_view,
+ scrolled_window,
+ KEY_APPOINTMENTS_EXPANDED,
+ G_CALLBACK (edit_appointments));
+}
+
+static void
+edit_birthdays (CalendarWindow *calwin)
+{
+ clock_launch_calendar_app (calwin, NULL);
+}
+
+static GtkWidget *
+create_birthday_list (CalendarWindow *calwin,
+ GtkWidget **tree_view,
+ GtkWidget **scrolled_window)
+{
+ /* FIXME: Figure out how to get rid of useless localized message in front of the summary */
+ return create_list_for_appointment_model (
+ calwin,
+ _("Birthdays and Anniversaries"),
+ &calwin->priv->birthdays_filter,
+ is_birthday,
+ birthday_pixbuf_cell_data_func,
+ FALSE,
+ tree_view,
+ scrolled_window,
+ KEY_BIRTHDAYS_EXPANDED,
+ G_CALLBACK (edit_birthdays));
+}
+
+static void
+edit_weather (CalendarWindow *calwin)
+{
+ clock_launch_calendar_app (calwin, NULL);
+}
+
+
+static GtkWidget *
+create_weather_list (CalendarWindow *calwin,
+ GtkWidget **tree_view,
+ GtkWidget **scrolled_window)
+{
+ return create_list_for_appointment_model (
+ calwin,
+ _("Weather Information"),
+ &calwin->priv->weather_filter,
+ is_weather,
+ weather_pixbuf_cell_data_func,
+ FALSE,
+ tree_view,
+ scrolled_window,
+ KEY_WEATHER_EXPANDED,
+ G_CALLBACK (edit_weather));
+}
+
+static void
+calendar_window_create_tasks_model (CalendarWindow *calwin)
+{
+ GType column_types [N_TASK_COLUMNS] = {
+ G_TYPE_STRING, /* uid */
+ G_TYPE_STRING, /* summary */
+ G_TYPE_STRING, /* description */
+ G_TYPE_INT64, /* start time */
+ G_TYPE_INT64, /* due time */
+ G_TYPE_UINT, /* percent complete */
+ G_TYPE_STRING, /* percent complete text */
+ G_TYPE_BOOLEAN, /* completed */
+ G_TYPE_INT64, /* completed time */
+ PANGO_TYPE_ATTR_LIST, /* summary text attributes */
+ G_TYPE_STRING, /* color */
+ G_TYPE_INT /* priority */
+ };
+
+ calwin->priv->tasks_model = gtk_list_store_newv (N_TASK_COLUMNS,
+ column_types);
+
+ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (calwin->priv->tasks_model),
+ TASK_COLUMN_PRIORITY,
+ compare_tasks,
+ NULL, NULL);
+
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (calwin->priv->tasks_model),
+ TASK_COLUMN_PRIORITY,
+ GTK_SORT_ASCENDING);
+
+ calwin->priv->tasks_filter = GTK_TREE_MODEL_FILTER (
+ gtk_tree_model_filter_new (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ NULL));
+ gtk_tree_model_filter_set_visible_func (
+ calwin->priv->tasks_filter,
+ (GtkTreeModelFilterVisibleFunc) filter_out_tasks,
+ calwin,
+ NULL);
+ gtk_tree_model_filter_set_modify_func (
+ calwin->priv->tasks_filter,
+ N_TASK_COLUMNS,
+ column_types,
+ (GtkTreeModelFilterModifyFunc) modify_task_text_attributes,
+ calwin,
+ NULL);
+}
+
+static void
+calendar_window_create_appointments_model (CalendarWindow *calwin)
+{
+ calwin->priv->appointments_model =
+ gtk_list_store_new (N_APPOINTMENT_COLUMNS,
+ G_TYPE_STRING, /* uid */
+ G_TYPE_STRING, /* uri */
+ G_TYPE_STRING, /* summary */
+ G_TYPE_STRING, /* description */
+ G_TYPE_INT64, /* start time */
+ G_TYPE_STRING, /* start time text */
+ G_TYPE_INT64, /* end time */
+ G_TYPE_BOOLEAN, /* all day */
+ G_TYPE_STRING); /* color */
+
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (calwin->priv->appointments_model),
+ APPOINTMENT_COLUMN_START_TIME,
+ GTK_SORT_ASCENDING);
+}
+
+static void
+calendar_day_activated (GtkCalendar *calendar,
+ CalendarWindow *calwin)
+{
+ unsigned int day;
+ unsigned int month;
+ unsigned int year;
+ time_t date;
+ struct tm utc_date_tm;
+ struct tm local_date_tm = { 0, };
+ char *argument;
+
+ gtk_calendar_get_date (calendar, &year, &month, &day);
+
+ local_date_tm.tm_mday = (int) day;
+ local_date_tm.tm_mon = (int) month;
+ local_date_tm.tm_year = (int) year - 1900;
+ local_date_tm.tm_isdst = -1;
+
+ /* convert the local date picked in the calendar to broken-down UTC */
+ date = mktime (&local_date_tm);
+ gmtime_r (&date, &utc_date_tm);
+
+ /* FIXME: once bug 409200 is fixed, we'll have to make this hh:mm:ss
+ * instead of hhmmss */
+ argument = g_strdup_printf ("calendar:///?startdate="
+ "%.4d%.2d%.2dT%.2d%.2d%.2dZ",
+ utc_date_tm.tm_year + 1900,
+ utc_date_tm.tm_mon + 1,
+ utc_date_tm.tm_mday,
+ utc_date_tm.tm_hour,
+ utc_date_tm.tm_min,
+ 0);
+
+ clock_launch_calendar_app (calwin, argument);
+
+ g_free (argument);
+}
+
+static void
+calendar_day_selected (GtkCalendar *calendar,
+ CalendarWindow *calwin)
+{
+ guint day;
+
+ gtk_calendar_get_date (calendar, NULL, NULL, &day);
+
+ calendar_client_select_day (calwin->priv->client, day);
+
+ handle_appointments_changed (calwin);
+ handle_tasks_changed (calwin);
+}
+
+static void
+calendar_month_selected (GtkCalendar *calendar,
+ CalendarWindow *calwin)
+{
+ guint year, month;
+
+ gtk_calendar_get_date (calendar, &year, &month, NULL);
+
+ calendar_client_select_month (calwin->priv->client, month, year);
+
+ handle_appointments_changed (calwin);
+ handle_tasks_changed (calwin);
+}
+
+typedef struct
+{
+ GtkWidget *calendar;
+ GtkWidget *tree;
+} ConstraintData;
+
+static void
+constrain_list_size (GtkWidget *widget,
+ GtkRequisition *requisition,
+ ConstraintData *constraint)
+{
+ GtkRequisition req;
+ int screen_h;
+ int max_height;
+
+ /* constrain width to the calendar width */
+ gtk_widget_size_request (constraint->calendar, &req);
+ requisition->width = MIN (requisition->width, req.width);
+
+ screen_h = gdk_screen_get_height (gtk_widget_get_screen (widget));
+ /* constrain height to be the tree height up to a max */
+ max_height = (screen_h - req.height) / 3;
+ gtk_widget_size_request (constraint->tree, &req);
+
+ requisition->height = MIN (req.height, max_height);
+ requisition->height += 2 * gtk_widget_get_style (widget)->ythickness;
+}
+
+static void
+setup_list_size_constraint (GtkWidget *widget,
+ GtkWidget *calendar,
+ GtkWidget *tree)
+{
+ ConstraintData *constraint;
+
+ constraint = g_new0 (ConstraintData, 1);
+ constraint->calendar = calendar;
+ constraint->tree = tree;
+
+ g_signal_connect_data (widget, "size-request",
+ G_CALLBACK (constrain_list_size), constraint,
+ (GClosureNotify) g_free, 0);
+}
+
+static void
+expander_activated (GtkExpander *expander,
+ CalendarWindow *calwin)
+{
+ const char *key;
+
+ key = (const gchar*)g_object_get_data (G_OBJECT (expander), "mateconf-key");
+
+ if (mateconf_client_key_is_writable (calwin->priv->mateconfclient,
+ key, NULL)) {
+ mateconf_client_set_bool (calwin->priv->mateconfclient, key,
+ gtk_expander_get_expanded (expander),
+ NULL);
+ }
+}
+
+static void
+expanded_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ GtkExpander *expander)
+{
+ gboolean value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ value = mateconf_value_get_bool (entry->value);
+
+ gtk_expander_set_expanded (expander, value);
+}
+
+static void
+remove_listener (gpointer data)
+{
+ MateConfClient *client;
+
+ client = mateconf_client_get_default ();
+ mateconf_client_notify_remove (client, GPOINTER_TO_UINT (data));
+ g_object_unref (client);
+}
+
+static void
+connect_expander_with_mateconf (CalendarWindow *calwin,
+ GtkWidget *expander,
+ const char *relative_key)
+{
+ char *key;
+ gboolean expanded;
+ guint listener;
+
+ key = g_strdup_printf ("%s/%s",
+ calwin->priv->prefs_dir, relative_key);
+
+ g_object_set_data_full (G_OBJECT (expander), "mateconf-key", (gpointer)key, g_free);
+
+ expanded = mateconf_client_get_bool (calwin->priv->mateconfclient, key,
+ NULL);
+ gtk_expander_set_expanded (GTK_EXPANDER (expander), expanded);
+
+ g_signal_connect_after (expander, "activate",
+ G_CALLBACK (expander_activated),
+ calwin);
+
+ listener = mateconf_client_notify_add (
+ calwin->priv->mateconfclient, key,
+ (MateConfClientNotifyFunc) expanded_changed,
+ expander, NULL, NULL);
+
+ g_object_set_data_full (G_OBJECT (expander), "listener-id",
+ GUINT_TO_POINTER (listener), remove_listener);
+}
+#endif /* HAVE_LIBECAL */
+
+static void
+calendar_window_pack_pim (CalendarWindow *calwin,
+ GtkWidget *vbox)
+{
+#ifdef HAVE_LIBECAL
+ GtkWidget *list;
+ GtkWidget *tree_view;
+ GtkWidget *scrolled_window;
+ guint year, month, day;
+
+ calendar_window_create_tasks_model (calwin);
+ calendar_window_create_appointments_model (calwin);
+
+ list = create_task_list (calwin, &tree_view, &scrolled_window);
+ setup_list_size_constraint (scrolled_window,
+ calwin->priv->calendar, tree_view);
+ update_frame_visibility (list,
+ GTK_TREE_MODEL (calwin->priv->tasks_model));
+ calwin->priv->task_list = list;
+
+ list = create_birthday_list (calwin, &tree_view, &scrolled_window);
+ setup_list_size_constraint (scrolled_window,
+ calwin->priv->calendar, tree_view);
+ update_frame_visibility (list,
+ GTK_TREE_MODEL (calwin->priv->birthdays_filter));
+ calwin->priv->birthday_list = list;
+
+ list = create_weather_list (calwin, &tree_view, &scrolled_window);
+ setup_list_size_constraint (scrolled_window,
+ calwin->priv->calendar, tree_view);
+ update_frame_visibility (list,
+ GTK_TREE_MODEL (calwin->priv->weather_filter));
+ calwin->priv->weather_list = list;
+
+ list = create_appointment_list (calwin, &tree_view, &scrolled_window);
+ setup_list_size_constraint (scrolled_window,
+ calwin->priv->calendar, tree_view);
+ update_frame_visibility (list,
+ GTK_TREE_MODEL (calwin->priv->appointments_filter));
+ calwin->priv->appointment_list = list;
+
+ if (!calwin->priv->invert_order) {
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->task_list,
+ TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->appointment_list,
+ TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->birthday_list,
+ TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->weather_list,
+ TRUE, TRUE, 0);
+ } else {
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->weather_list,
+ TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->birthday_list,
+ TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->appointment_list,
+ TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->task_list,
+ TRUE, TRUE, 0);
+ }
+
+ if (!calwin->priv->client) {
+ calwin->priv->client = calendar_client_new ();
+
+ g_signal_connect_swapped (calwin->priv->client,
+ "tasks-changed",
+ G_CALLBACK (handle_tasks_changed),
+ calwin);
+ g_signal_connect_swapped (calwin->priv->client,
+ "appointments-changed",
+ G_CALLBACK (handle_appointments_changed),
+ calwin);
+ }
+
+ gtk_calendar_get_date (GTK_CALENDAR (calwin->priv->calendar),
+ &year, &month, &day);
+
+ calendar_client_select_day (calwin->priv->client, day);
+ calendar_client_select_month (calwin->priv->client, month, year);
+
+ handle_tasks_changed (calwin);
+ handle_appointments_changed (calwin);
+
+ g_signal_connect (calwin->priv->calendar,
+ "day-selected-double-click",
+ G_CALLBACK (calendar_day_activated),
+ calwin);
+ g_signal_connect (calwin->priv->calendar,
+ "day-selected",
+ G_CALLBACK (calendar_day_selected),
+ calwin);
+ g_signal_connect (calwin->priv->calendar,
+ "month-changed",
+ G_CALLBACK (calendar_month_selected),
+ calwin);
+#endif /* HAVE_LIBECAL */
+}
+
+static GtkWidget *
+calendar_window_create_calendar (CalendarWindow *calwin)
+{
+ GtkWidget *calendar;
+ GtkCalendarDisplayOptions options;
+ struct tm *tm;
+
+ calendar = gtk_calendar_new ();
+ options = gtk_calendar_get_display_options (GTK_CALENDAR (calendar));
+ if (calwin->priv->show_weeks)
+ options |= GTK_CALENDAR_SHOW_WEEK_NUMBERS;
+ else
+ options &= ~(GTK_CALENDAR_SHOW_WEEK_NUMBERS);
+ gtk_calendar_set_display_options (GTK_CALENDAR (calendar), options);
+
+ tm = localtime (calwin->priv->current_time);
+
+ gtk_calendar_select_month (GTK_CALENDAR (calendar),
+ tm->tm_mon,
+ tm->tm_year + 1900);
+ gtk_calendar_select_day (GTK_CALENDAR (calendar), tm->tm_mday);
+
+ return calendar;
+}
+
+static void
+expand_collapse_child (GtkWidget *child,
+ gpointer data)
+{
+ gboolean expanded;
+
+ if (data == child || gtk_widget_is_ancestor (data, child))
+ return;
+
+ expanded = gtk_expander_get_expanded (GTK_EXPANDER (data));
+ g_object_set (child, "visible", expanded, NULL);
+}
+
+static void
+expand_collapse (GtkWidget *expander,
+ GParamSpec *pspec,
+ gpointer data)
+{
+ GtkWidget *box = data;
+
+ gtk_container_foreach (GTK_CONTAINER (box),
+ (GtkCallback)expand_collapse_child,
+ expander);
+}
+
+static void add_child (GtkContainer *container,
+ GtkWidget *child,
+ GtkExpander *expander)
+{
+ expand_collapse_child (child, expander);
+}
+
+static GtkWidget *
+create_hig_frame (CalendarWindow *calwin,
+ const char *title,
+ const char *button_label,
+ const char *key,
+ GCallback callback)
+{
+ GtkWidget *vbox;
+ GtkWidget *alignment;
+ GtkWidget *label;
+ GtkWidget *hbox;
+ GtkWidget *button;
+ char *bold_title;
+ char *text;
+ GtkWidget *expander;
+
+ vbox = gtk_vbox_new (FALSE, 6);
+
+ bold_title = g_strdup_printf ("<b>%s</b>", title);
+ expander = gtk_expander_new (bold_title);
+ g_free (bold_title);
+ gtk_expander_set_use_markup (GTK_EXPANDER (expander), TRUE);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), expander, FALSE, FALSE, 0);
+ gtk_widget_show_all (vbox);
+
+ g_signal_connect (expander, "notify::expanded",
+ G_CALLBACK (expand_collapse), hbox);
+ g_signal_connect (expander, "notify::expanded",
+ G_CALLBACK (expand_collapse), vbox);
+
+ /* FIXME: this doesn't really work, since "add" does not
+ * get emitted for e.g. gtk_box_pack_start
+ */
+ g_signal_connect (vbox, "add", G_CALLBACK (add_child), expander);
+ g_signal_connect (hbox, "add", G_CALLBACK (add_child), expander);
+
+ if (button_label) {
+ button = gtk_button_new ();
+ text = g_markup_printf_escaped ("<small>%s</small>", button_label);
+ label = gtk_label_new (text);
+ g_free (text);
+ gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
+ gtk_container_add (GTK_CONTAINER (button), label);
+
+ alignment = gtk_alignment_new (1, 0, 0, 0);
+ gtk_container_add (GTK_CONTAINER (alignment), button);
+ gtk_widget_show_all (alignment);
+
+ gtk_container_add (GTK_CONTAINER (hbox), alignment);
+
+ g_signal_connect_swapped (button, "clicked", callback, calwin);
+ }
+
+#ifdef HAVE_LIBECAL
+ connect_expander_with_mateconf (calwin, expander, key);
+#endif
+
+ return vbox;
+}
+
+static void
+edit_locations (CalendarWindow *calwin)
+{
+ g_signal_emit (calwin, signals[EDIT_LOCATIONS], 0);
+}
+
+static void
+calendar_window_pack_locations (CalendarWindow *calwin, GtkWidget *vbox)
+{
+ calwin->priv->locations_list = create_hig_frame (calwin,
+ _("Locations"), _("Edit"),
+ KEY_LOCATIONS_EXPANDED,
+ G_CALLBACK (edit_locations));
+
+ /* we show the widget before adding to the container, since adding to
+ * the container changes the visibility depending on the state of the
+ * expander */
+ gtk_widget_show (calwin->priv->locations_list);
+ gtk_container_add (GTK_CONTAINER (vbox), calwin->priv->locations_list);
+
+ //gtk_box_pack_start (GTK_BOX (vbox), calwin->priv->locations_list, TRUE, FALSE, 0);
+}
+
+static void
+calendar_window_fill (CalendarWindow *calwin)
+{
+ GtkWidget *frame;
+ GtkWidget *vbox;
+
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
+ gtk_container_add (GTK_CONTAINER (calwin), frame);
+ gtk_widget_show (frame);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ gtk_widget_show (vbox);
+
+ calwin->priv->calendar = calendar_window_create_calendar (calwin);
+ gtk_widget_show (calwin->priv->calendar);
+
+ if (!calwin->priv->invert_order) {
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->calendar, TRUE, FALSE, 0);
+ calendar_window_pack_pim (calwin, vbox);
+ calendar_window_pack_locations (calwin, vbox);
+ } else {
+ calendar_window_pack_locations (calwin, vbox);
+ calendar_window_pack_pim (calwin, vbox);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->calendar, TRUE, FALSE, 0);
+ }
+}
+
+GtkWidget *
+calendar_window_get_locations_box (CalendarWindow *calwin)
+{
+ return calwin->priv->locations_list;
+}
+
+static GObject *
+calendar_window_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_properties)
+{
+ GObject *obj;
+ CalendarWindow *calwin;
+
+ obj = G_OBJECT_CLASS (calendar_window_parent_class)->constructor (type,
+ n_construct_properties,
+ construct_properties);
+
+ calwin = CALENDAR_WINDOW (obj);
+
+ g_assert (calwin->priv->current_time != NULL);
+ g_assert (calwin->priv->prefs_dir != NULL);
+
+ calendar_window_fill (calwin);
+
+ return obj;
+}
+
+static void
+calendar_window_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ CalendarWindow *calwin;
+
+ g_return_if_fail (CALENDAR_IS_WINDOW (object));
+
+ calwin = CALENDAR_WINDOW (object);
+
+ switch (prop_id) {
+ case PROP_INVERTORDER:
+ g_value_set_boolean (value,
+ calendar_window_get_invert_order (calwin));
+ break;
+ case PROP_SHOWWEEKS:
+ g_value_set_boolean (value,
+ calendar_window_get_show_weeks (calwin));
+ break;
+#ifdef HAVE_LIBECAL
+ case PROP_TIMEFORMAT:
+ g_value_set_enum (value,
+ calendar_window_get_time_format (calwin));
+ break;
+#endif
+ case PROP_CURRENTTIMEP:
+ g_value_set_pointer (value,
+ calendar_window_get_current_time_p (calwin));
+ break;
+ case PROP_PREFSDIR:
+ g_value_set_string (value,
+ calendar_window_get_prefs_dir (calwin));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+calendar_window_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ CalendarWindow *calwin;
+
+ g_return_if_fail (CALENDAR_IS_WINDOW (object));
+
+ calwin = CALENDAR_WINDOW (object);
+
+ switch (prop_id) {
+ case PROP_INVERTORDER:
+ calendar_window_set_invert_order (calwin,
+ g_value_get_boolean (value));
+ break;
+ case PROP_SHOWWEEKS:
+ calendar_window_set_show_weeks (calwin,
+ g_value_get_boolean (value));
+ break;
+#ifdef HAVE_LIBECAL
+ case PROP_TIMEFORMAT:
+ calendar_window_set_time_format (calwin,
+ g_value_get_enum (value));
+ break;
+#endif
+ case PROP_CURRENTTIMEP:
+ calendar_window_set_current_time_p (calwin,
+ g_value_get_pointer (value));
+ break;
+ case PROP_PREFSDIR:
+ calendar_window_set_prefs_dir (calwin,
+ g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+calendar_window_destroy (GtkObject *object)
+{
+#ifdef HAVE_LIBECAL
+ CalendarWindow *calwin;
+
+ calwin = CALENDAR_WINDOW (object);
+
+ if (calwin->priv->client)
+ g_object_unref (calwin->priv->client);
+ calwin->priv->client = NULL;
+
+ if (calwin->priv->appointments_model)
+ g_object_unref (calwin->priv->appointments_model);
+ calwin->priv->appointments_model = NULL;
+
+ if (calwin->priv->tasks_model)
+ g_object_unref (calwin->priv->tasks_model);
+ calwin->priv->tasks_model = NULL;
+
+ if (calwin->priv->appointments_filter)
+ g_object_unref (calwin->priv->appointments_filter);
+ calwin->priv->appointments_filter = NULL;
+
+ if (calwin->priv->birthdays_filter)
+ g_object_unref (calwin->priv->birthdays_filter);
+ calwin->priv->birthdays_filter = NULL;
+
+ if (calwin->priv->tasks_filter)
+ g_object_unref (calwin->priv->tasks_filter);
+ calwin->priv->tasks_filter = NULL;
+
+ if (calwin->priv->weather_filter)
+ g_object_unref (calwin->priv->weather_filter);
+ calwin->priv->weather_filter = NULL;
+
+ if (calwin->priv->mateconfclient)
+ g_object_unref (calwin->priv->mateconfclient);
+ calwin->priv->mateconfclient = NULL;
+#endif /* HAVE_LIBECAL */
+
+ GTK_OBJECT_CLASS (calendar_window_parent_class)->destroy (object);
+}
+
+static void
+calendar_window_class_init (CalendarWindowClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GtkObjectClass *gtkobject_class = GTK_OBJECT_CLASS (klass);
+
+ gobject_class->constructor = calendar_window_constructor;
+ gobject_class->get_property = calendar_window_get_property;
+ gobject_class->set_property = calendar_window_set_property;
+
+ gtkobject_class->destroy = calendar_window_destroy;
+
+ g_type_class_add_private (klass, sizeof (CalendarWindowPrivate));
+
+ signals[EDIT_LOCATIONS] = g_signal_new ("edit-locations",
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (CalendarWindowClass, edit_locations),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ g_object_class_install_property (
+ gobject_class,
+ PROP_INVERTORDER,
+ g_param_spec_boolean ("invert-order",
+ "Invert Order",
+ "Invert order of the calendar and tree views",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (
+ gobject_class,
+ PROP_SHOWWEEKS,
+ g_param_spec_boolean ("show-weeks",
+ "Show Weeks",
+ "Show weeks in the calendar",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+#ifdef HAVE_LIBECAL
+ g_object_class_install_property (
+ gobject_class,
+ PROP_TIMEFORMAT,
+ g_param_spec_enum ("time-format",
+ "Time Format",
+ "Time format used to display time",
+ CLOCK_TYPE_FORMAT,
+ clock_locale_format (),
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+#endif
+
+ g_object_class_install_property (
+ gobject_class,
+ PROP_CURRENTTIMEP,
+ g_param_spec_pointer ("current-time",
+ "Current Time",
+ "Pointer to a variable containing the current time",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property (
+ gobject_class,
+ PROP_PREFSDIR,
+ g_param_spec_string ("prefs-dir",
+ "Preferences Directory",
+ "Preferences directory in MateConf",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+}
+
+static void
+calendar_window_init (CalendarWindow *calwin)
+{
+ GtkWindow *window;
+
+ calwin->priv = CALENDAR_WINDOW_GET_PRIVATE (calwin);
+
+ window = GTK_WINDOW (calwin);
+ gtk_window_set_type_hint (window, GDK_WINDOW_TYPE_HINT_DOCK);
+ gtk_window_set_decorated (window, FALSE);
+ gtk_window_set_resizable (window, FALSE);
+ gtk_window_stick (window);
+ gtk_window_set_title (window, _("Calendar"));
+ gtk_window_set_icon_name (window, CLOCK_ICON);
+
+#ifdef HAVE_LIBECAL
+ calwin->priv->previous_selection = NULL;
+ calwin->priv->mateconfclient = mateconf_client_get_default ();
+#endif
+}
+
+GtkWidget *
+calendar_window_new (time_t *static_current_time,
+ const char *prefs_dir,
+ gboolean invert_order)
+{
+ CalendarWindow *calwin;
+
+ calwin = g_object_new (CALENDAR_TYPE_WINDOW,
+ "type", GTK_WINDOW_TOPLEVEL,
+ "current-time", static_current_time,
+ "invert-order", invert_order,
+ "prefs-dir", prefs_dir,
+ NULL);
+
+ return GTK_WIDGET (calwin);
+}
+
+void
+calendar_window_refresh (CalendarWindow *calwin)
+{
+ g_return_if_fail (CALENDAR_IS_WINDOW (calwin));
+
+#ifdef HAVE_LIBECAL
+ if (calwin->priv->appointments_filter && calwin->priv->appointment_list)
+ gtk_tree_model_filter_refilter (calwin->priv->appointments_filter);
+ if (calwin->priv->birthdays_filter && calwin->priv->birthday_list)
+ gtk_tree_model_filter_refilter (calwin->priv->birthdays_filter);
+ if (calwin->priv->tasks_filter && calwin->priv->task_list)
+ gtk_tree_model_filter_refilter (calwin->priv->tasks_filter);
+ if (calwin->priv->weather_filter && calwin->priv->weather_list)
+ gtk_tree_model_filter_refilter (calwin->priv->weather_filter);
+#endif
+}
+
+gboolean
+calendar_window_get_invert_order (CalendarWindow *calwin)
+{
+ g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin), FALSE);
+
+ return calwin->priv->invert_order;
+}
+
+void
+calendar_window_set_invert_order (CalendarWindow *calwin,
+ gboolean invert_order)
+{
+ g_return_if_fail (CALENDAR_IS_WINDOW (calwin));
+
+ if (invert_order == calwin->priv->invert_order)
+ return;
+
+ calwin->priv->invert_order = invert_order;
+ //FIXME: update the order of the content of the window
+
+ g_object_notify (G_OBJECT (calwin), "invert-order");
+}
+
+gboolean
+calendar_window_get_show_weeks (CalendarWindow *calwin)
+{
+ g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin), FALSE);
+
+ return calwin->priv->show_weeks;
+}
+
+void
+calendar_window_set_show_weeks (CalendarWindow *calwin,
+ gboolean show_weeks)
+{
+ GtkCalendarDisplayOptions options;
+
+ g_return_if_fail (CALENDAR_IS_WINDOW (calwin));
+
+ if (show_weeks == calwin->priv->show_weeks)
+ return;
+
+ calwin->priv->show_weeks = show_weeks;
+
+ if (calwin->priv->calendar) {
+ options = gtk_calendar_get_display_options (GTK_CALENDAR (calwin->priv->calendar));
+
+ if (show_weeks)
+ options |= GTK_CALENDAR_SHOW_WEEK_NUMBERS;
+ else
+ options &= ~(GTK_CALENDAR_SHOW_WEEK_NUMBERS);
+
+ gtk_calendar_set_display_options (GTK_CALENDAR (calwin->priv->calendar),
+ options);
+ }
+
+ g_object_notify (G_OBJECT (calwin), "show-weeks");
+}
+
+ClockFormat
+calendar_window_get_time_format (CalendarWindow *calwin)
+{
+ g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin),
+ CLOCK_FORMAT_INVALID);
+
+#ifdef HAVE_LIBECAL
+ return calwin->priv->time_format;
+#else
+ return CLOCK_FORMAT_INVALID;
+#endif
+}
+
+void
+calendar_window_set_time_format (CalendarWindow *calwin,
+ ClockFormat time_format)
+{
+ g_return_if_fail (CALENDAR_IS_WINDOW (calwin));
+
+#ifdef HAVE_LIBECAL
+ if (time_format != CLOCK_FORMAT_12 && time_format != CLOCK_FORMAT_24)
+ time_format = clock_locale_format ();
+
+ if (time_format == calwin->priv->time_format)
+ return;
+
+ calwin->priv->time_format = time_format;
+ /* Time to display for appointments has changed */
+ if (calwin->priv->appointments_model)
+ handle_appointments_changed (calwin);
+
+ g_object_notify (G_OBJECT (calwin), "time-format");
+#endif
+}
+
+static time_t *
+calendar_window_get_current_time_p (CalendarWindow *calwin)
+{
+ g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin), NULL);
+
+ return calwin->priv->current_time;
+}
+
+static void
+calendar_window_set_current_time_p (CalendarWindow *calwin,
+ time_t *current_time)
+{
+ g_return_if_fail (CALENDAR_IS_WINDOW (calwin));
+
+ if (current_time == calwin->priv->current_time)
+ return;
+
+ calwin->priv->current_time = current_time;
+
+ g_object_notify (G_OBJECT (calwin), "current-time");
+}
+
+static const char *
+calendar_window_get_prefs_dir (CalendarWindow *calwin)
+{
+ g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin), NULL);
+
+ return calwin->priv->prefs_dir;
+}
+
+static void
+calendar_window_set_prefs_dir (CalendarWindow *calwin,
+ const char *prefs_dir)
+{
+ g_return_if_fail (CALENDAR_IS_WINDOW (calwin));
+
+ if (!calwin->priv->prefs_dir && (!prefs_dir || !prefs_dir [0]))
+ return;
+
+ if (calwin->priv->prefs_dir && prefs_dir && prefs_dir [0] &&
+ !strcmp (calwin->priv->prefs_dir, prefs_dir))
+ return;
+
+ if (calwin->priv->prefs_dir)
+ g_free (calwin->priv->prefs_dir);
+ calwin->priv->prefs_dir = NULL;
+
+ if (prefs_dir && prefs_dir [0])
+ calwin->priv->prefs_dir = g_strdup (prefs_dir);
+
+ g_object_notify (G_OBJECT (calwin), "prefs-dir");
+}
diff --git a/applets/clock/calendar-window.h b/applets/clock/calendar-window.h
new file mode 100644
index 00000000..0b0546c8
--- /dev/null
+++ b/applets/clock/calendar-window.h
@@ -0,0 +1,84 @@
+/*
+ * calendar-window.h: toplevel window containing a calendar and
+ * tasks/appointments
+ *
+ * Copyright (C) 2007 Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Vincent Untz <[email protected]>
+ *
+ * Most of the original code comes from clock.c
+ */
+
+#ifndef CALENDAR_WINDOW_H
+#define CALENDAR_WINDOW_H
+
+#include <gtk/gtk.h>
+#include "clock-utils.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CALENDAR_TYPE_WINDOW (calendar_window_get_type ())
+#define CALENDAR_WINDOW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CALENDAR_TYPE_WINDOW, CalendarWindow))
+#define CALENDAR_WINDOW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), CALENDAR_TYPE_WINDOW, CalendarWindowClass))
+#define CALENDAR_IS_WINDOW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CALENDAR_TYPE_WINDOW))
+#define CALENDAR_IS_WINDOW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CALENDAR_TYPE_WINDOW))
+#define CALENDAR_WINDOW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CALENDAR_TYPE_WINDOW, CalendarWindowClass))
+
+typedef struct _CalendarWindow CalendarWindow;
+typedef struct _CalendarWindowClass CalendarWindowClass;
+typedef struct _CalendarWindowPrivate CalendarWindowPrivate;
+
+struct _CalendarWindow {
+ GtkWindow parent_instance;
+
+ CalendarWindowPrivate *priv;
+};
+
+struct _CalendarWindowClass {
+ GtkWindowClass parent_class;
+
+ void (* edit_locations) (CalendarWindow *calwin);
+};
+
+GType calendar_window_get_type (void) G_GNUC_CONST;
+GtkWidget *calendar_window_new (time_t *static_current_time,
+ const char *prefs_dir,
+ gboolean invert_order);
+
+void calendar_window_refresh (CalendarWindow *calwin);
+
+GtkWidget *calendar_window_get_locations_box (CalendarWindow *calwin);
+
+gboolean calendar_window_get_invert_order (CalendarWindow *calwin);
+void calendar_window_set_invert_order (CalendarWindow *calwin,
+ gboolean invert_order);
+gboolean calendar_window_get_show_weeks (CalendarWindow *calwin);
+void calendar_window_set_show_weeks (CalendarWindow *calwin,
+ gboolean show_weeks);
+ClockFormat calendar_window_get_time_format (CalendarWindow *calwin);
+void calendar_window_set_time_format (CalendarWindow *calwin,
+ ClockFormat time_format);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CALENDAR_WINDOW_H */
diff --git a/applets/clock/clock-face.c b/applets/clock/clock-face.c
new file mode 100644
index 00000000..53f0e4f4
--- /dev/null
+++ b/applets/clock/clock-face.c
@@ -0,0 +1,462 @@
+/**
+ * clock.c
+ *
+ * A GTK+ widget that implements a clock face
+ *
+ * (c) 2007, Peter Teichman
+ * (c) 2005-2006, Davyd Madeley
+ *
+ * Authors:
+ * Davyd Madeley <[email protected]>
+ * Peter Teichman <[email protected]>
+ */
+
+#include <gtk/gtk.h>
+#include <math.h>
+#include <time.h>
+
+#include <librsvg/rsvg.h>
+
+#include "clock-face.h"
+#include "clock-location.h"
+
+static GHashTable *pixbuf_cache = NULL;
+
+#define CLOCK_FACE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), INTL_TYPE_CLOCK_FACE, ClockFacePrivate))
+
+G_DEFINE_TYPE (ClockFace, clock_face, GTK_TYPE_WIDGET)
+
+static void clock_face_finalize (GObject *);
+static gboolean clock_face_expose (GtkWidget *clock, GdkEventExpose *event);
+static void clock_face_size_request (GtkWidget *clock,
+ GtkRequisition *requisition);
+static void clock_face_size_allocate (GtkWidget *clock,
+ GtkAllocation *allocation);
+
+static void update_time_and_face (ClockFace *this,
+ gboolean force_face_loading);
+static void clock_face_load_face (ClockFace *this,
+ gint width, gint height);
+
+typedef struct _ClockFacePrivate ClockFacePrivate;
+
+typedef enum {
+ CLOCK_FACE_MORNING,
+ CLOCK_FACE_DAY,
+ CLOCK_FACE_EVENING,
+ CLOCK_FACE_NIGHT,
+ CLOCK_FACE_INVALID
+} ClockFaceTimeOfDay;
+
+struct _ClockFacePrivate
+{
+ struct tm time; /* the time on the clock face */
+ int minute_offset; /* the offset of the minutes hand */
+
+ ClockFaceSize size;
+ ClockFaceTimeOfDay timeofday;
+ ClockLocation *location;
+ GdkPixbuf *face_pixbuf;
+ GtkWidget *size_widget;
+};
+
+static void
+clock_face_class_init (ClockFaceClass *class)
+{
+ GObjectClass *obj_class;
+ GtkWidgetClass *widget_class;
+
+ obj_class = G_OBJECT_CLASS (class);
+ widget_class = GTK_WIDGET_CLASS (class);
+
+ /* GtkWidget signals */
+ widget_class->expose_event = clock_face_expose;
+ widget_class->size_request = clock_face_size_request;
+ widget_class->size_allocate = clock_face_size_allocate;
+
+ /* GObject signals */
+ obj_class->finalize = clock_face_finalize;
+
+ g_type_class_add_private (obj_class, sizeof (ClockFacePrivate));
+}
+
+static void
+clock_face_init (ClockFace *this)
+{
+ ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (this);
+
+ priv->size = CLOCK_FACE_SMALL;
+ priv->timeofday = CLOCK_FACE_INVALID;
+ priv->location = NULL;
+ priv->size_widget = NULL;
+
+ gtk_widget_set_has_window (GTK_WIDGET (this), FALSE);
+}
+
+static void
+draw (GtkWidget *this, cairo_t *cr)
+{
+ ClockFacePrivate *priv;
+ GtkAllocation allocation;
+ double x, y;
+ double radius;
+ int hours, minutes, seconds;
+
+ /* Hand lengths as a multiple of the clock radius */
+ double hour_length, min_length, sec_length;
+
+ priv = CLOCK_FACE_GET_PRIVATE (this);
+
+ if (priv->size == CLOCK_FACE_LARGE) {
+ hour_length = 0.45;
+ min_length = 0.6;
+ sec_length = 0.65;
+ } else {
+ hour_length = 0.5;
+ min_length = 0.7;
+ sec_length = 0.8; /* not drawn currently */
+ }
+
+ gtk_widget_get_allocation (this, &allocation);
+
+ x = allocation.x + allocation.width / 2;
+ y = allocation.y + allocation.height / 2;
+ radius = MIN (allocation.width / 2,
+ allocation.height / 2) - 5;
+
+ cairo_save (cr);
+ cairo_translate (cr, allocation.x, allocation.y);
+
+ /* clock back */
+ if (priv->face_pixbuf) {
+ GdkWindow *window = gtk_widget_get_window (this);
+ gdk_draw_pixbuf (GDK_DRAWABLE (window),
+ NULL,
+ priv->face_pixbuf,
+ 0, 0,
+ allocation.x,
+ allocation.y,
+ allocation.width,
+ allocation.height,
+ GDK_RGB_DITHER_NONE, 0, 0);
+ }
+
+ cairo_restore (cr);
+
+ /* clock hands */
+ hours = priv->time.tm_hour;
+ minutes = priv->time.tm_min + priv->minute_offset;
+ seconds = priv->time.tm_sec;
+
+ cairo_set_line_width (cr, 1);
+
+ /* hour hand:
+ * the hour hand is rotated 30 degrees (pi/6 r) per hour +
+ * 1/2 a degree (pi/360 r) per minute
+ */
+ cairo_save (cr);
+ cairo_move_to (cr, x, y);
+ cairo_line_to (cr, x + radius * hour_length * sin (M_PI / 6 * hours +
+ M_PI / 360 * minutes),
+ y + radius * hour_length * -cos (M_PI / 6 * hours +
+ M_PI / 360 * minutes));
+ cairo_stroke (cr);
+ cairo_restore (cr);
+ /* minute hand:
+ * the minute hand is rotated 6 degrees (pi/30 r) per minute
+ */
+ cairo_move_to (cr, x, y);
+ cairo_line_to (cr, x + radius * min_length * sin (M_PI / 30 * minutes),
+ y + radius * min_length * -cos (M_PI / 30 * minutes));
+ cairo_stroke (cr);
+
+ /* seconds hand:
+ * operates identically to the minute hand
+ */
+ if (priv->size == CLOCK_FACE_LARGE) {
+ cairo_save (cr);
+ cairo_set_source_rgb (cr, 0.937, 0.161, 0.161); /* tango red */
+ cairo_move_to (cr, x, y);
+ cairo_line_to (cr, x + radius * sec_length * sin (M_PI / 30 * seconds),
+ y + radius * sec_length * -cos (M_PI / 30 * seconds));
+ cairo_stroke (cr);
+ cairo_restore (cr);
+ }
+}
+
+static gboolean
+clock_face_expose (GtkWidget *this, GdkEventExpose *event)
+{
+ cairo_t *cr;
+
+ /* get a cairo_t */
+ cr = gdk_cairo_create (gtk_widget_get_window (this));
+
+ cairo_rectangle (cr,
+ event->area.x, event->area.y,
+ event->area.width, event->area.height);
+ cairo_clip (cr);
+
+ draw (this, cr);
+
+ cairo_destroy (cr);
+
+ return FALSE;
+}
+
+static void
+clock_face_redraw_canvas (ClockFace *this)
+{
+ gtk_widget_queue_draw (GTK_WIDGET (this));
+}
+
+static void
+clock_face_size_request (GtkWidget *this,
+ GtkRequisition *requisition)
+{
+ ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (this);
+
+ if (priv->size_widget != NULL) {
+ GtkRequisition req;
+
+ /* Tie our size to the height of the size_widget */
+ gtk_widget_size_request (GTK_WIDGET (priv->size_widget), &req);
+
+ /* Pad out our height by a little bit - this improves
+ the balance */
+ requisition->width = req.height + req.height / 8;
+ requisition->height = req.height + req.height / 8;
+ } else if (priv->face_pixbuf != NULL) {
+ int w, h;
+
+ /* Use the size of the current pixbuf */
+ w = gdk_pixbuf_get_width (GDK_PIXBUF (priv->face_pixbuf));
+ h = gdk_pixbuf_get_height (GDK_PIXBUF (priv->face_pixbuf));
+
+ requisition->width = w;
+ requisition->height = h;
+ } else {
+ /* we don't know anything, so use known dimensions for the svg
+ * files */
+ if (priv->size == CLOCK_FACE_LARGE) {
+ requisition->width = 50;
+ requisition->height = 50;
+ } else {
+ requisition->width = 36;
+ requisition->height = 36;
+ }
+ }
+}
+
+static void
+clock_face_size_allocate (GtkWidget *this,
+ GtkAllocation *allocation)
+{
+ GtkAllocation this_allocation;
+ GtkAllocation old_allocation;
+
+ gtk_widget_get_allocation (this, &this_allocation);
+
+ old_allocation.width = this_allocation.width;
+ old_allocation.height = this_allocation.height;
+
+ if (GTK_WIDGET_CLASS (clock_face_parent_class)->size_allocate)
+ GTK_WIDGET_CLASS (clock_face_parent_class)->size_allocate (this, allocation);
+
+ if (old_allocation.width == allocation->width &&
+ old_allocation.height == allocation->height)
+ return;
+
+ /* Reload the face for the new size */
+ update_time_and_face (CLOCK_FACE (this), TRUE);
+}
+
+static void
+update_time_and_face (ClockFace *this,
+ gboolean force_face_loading)
+{
+ ClockFacePrivate *priv;
+ ClockFaceTimeOfDay timeofday;
+
+ priv = CLOCK_FACE_GET_PRIVATE (this);
+
+ /* update the time */
+ if (priv->location) {
+ clock_location_localtime (priv->location, &priv->time);
+ } else {
+ time_t timet;
+ time (&timet);
+ localtime_r (&timet, &priv->time);
+ }
+
+ /* FIXME this should be a mateconf setting
+ * Or we could use some code from clock-sun.c?
+ * currently we hardcode
+ * morning 7-9
+ * day 9-17
+ * evening 17-22
+ * night 22-7
+ */
+ if (priv->time.tm_hour < 7)
+ timeofday = CLOCK_FACE_NIGHT;
+ else if (priv->time.tm_hour < 9)
+ timeofday = CLOCK_FACE_MORNING;
+ else if (priv->time.tm_hour < 17)
+ timeofday = CLOCK_FACE_DAY;
+ else if (priv->time.tm_hour < 22)
+ timeofday = CLOCK_FACE_EVENING;
+ else
+ timeofday = CLOCK_FACE_NIGHT;
+
+ if (priv->timeofday != timeofday || force_face_loading) {
+ GtkAllocation allocation;
+ gint width, height;
+
+ priv->timeofday = timeofday;
+
+ gtk_widget_get_allocation (GTK_WIDGET (this), &allocation);
+
+ width = allocation.width;
+ height = allocation.height;
+
+ /* Only load the pixbuf if we have some space allocated.
+ * Note that 1x1 is not really some space... */
+ if (width > 1 && height > 1)
+ clock_face_load_face (this, width, height);
+ }
+}
+
+gboolean
+clock_face_refresh (ClockFace *this)
+{
+ update_time_and_face (this, FALSE);
+ clock_face_redraw_canvas (this);
+
+ return TRUE; /* keep running this event */
+}
+
+GtkWidget *
+clock_face_new (ClockFaceSize size)
+{
+ GObject *obj = g_object_new (INTL_TYPE_CLOCK_FACE, NULL);
+ ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (obj);
+
+ priv->size = size;
+
+ return GTK_WIDGET (obj);
+}
+
+GtkWidget *
+clock_face_new_with_location (ClockFaceSize size,
+ ClockLocation *loc,
+ GtkWidget *size_widget)
+{
+ GObject *obj = g_object_new (INTL_TYPE_CLOCK_FACE, NULL);
+ ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (obj);
+
+ priv->size = size;
+ priv->location = g_object_ref (loc);
+ priv->size_widget = g_object_ref (size_widget);
+
+ return GTK_WIDGET (obj);
+}
+
+static void
+clock_face_finalize (GObject *obj)
+{
+ ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (obj);
+
+ if (priv->location) {
+ g_object_unref (priv->location);
+ priv->location = NULL;
+ }
+
+ if (priv->face_pixbuf) {
+ g_object_unref (priv->face_pixbuf);
+ priv->face_pixbuf = NULL;
+ }
+
+ if (priv->size_widget) {
+ g_object_unref (priv->size_widget);
+ priv->size_widget = NULL;
+ }
+
+ G_OBJECT_CLASS (clock_face_parent_class)->finalize (obj);
+
+ if (pixbuf_cache && g_hash_table_size (pixbuf_cache) == 0) {
+ g_hash_table_destroy (pixbuf_cache);
+ pixbuf_cache = NULL;
+ }
+}
+
+/* The pixbuf is being disposed, so remove it from the cache */
+static void
+remove_pixbuf_from_cache (const char *key,
+ GObject *pixbuf)
+{
+ g_hash_table_remove (pixbuf_cache, key);
+}
+
+static void
+clock_face_load_face (ClockFace *this, gint width, gint height)
+{
+ ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (this);
+ const gchar *size_string[2] = { "small", "large" };
+ const gchar *daytime_string[4] = { "morning", "day", "evening", "night" };
+ gchar *cache_name;
+ gchar *name;
+
+ if (!pixbuf_cache)
+ pixbuf_cache = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, NULL);
+
+ if (priv->face_pixbuf != NULL) {
+ /* This might empty the cache, but it's useless to destroy
+ * it since this object is still alive and might add another
+ * pixbuf in the cache later (eg, a few lines below) */
+ g_object_unref (priv->face_pixbuf);
+ priv->face_pixbuf = NULL;
+ }
+
+ /* Look for the pixbuf in the process-wide cache first */
+ cache_name = g_strdup_printf ("%d-%d-%d-%d",
+ priv->size, priv->timeofday,
+ width, height);
+
+ priv->face_pixbuf = g_hash_table_lookup (pixbuf_cache, cache_name);
+ if (priv->face_pixbuf) {
+ g_object_ref (priv->face_pixbuf);
+ return;
+ }
+
+ /* The pixbuf is not cached, let's load it */
+ name = g_strconcat (ICONDIR, "/clock-face-", size_string[priv->size],
+ "-", daytime_string[priv->timeofday], ".svg",
+ NULL);
+ priv->face_pixbuf = rsvg_pixbuf_from_file_at_size (name,
+ width, height,
+ NULL);
+ g_free (name);
+
+ if (!priv->face_pixbuf) {
+ name = g_strconcat (ICONDIR, "/clock-face-",
+ size_string[priv->size], ".svg", NULL);
+ priv->face_pixbuf = rsvg_pixbuf_from_file_at_size (name,
+ width,
+ height,
+ NULL);
+ g_free (name);
+ }
+
+ /* Save the found pixbuf in the cache */
+ if (priv->face_pixbuf) {
+ g_hash_table_replace (pixbuf_cache,
+ cache_name, priv->face_pixbuf);
+ /* This will handle automatic removal from the cache when
+ * the pixbuf isn't needed anymore */
+ g_object_weak_ref (G_OBJECT (priv->face_pixbuf),
+ (GWeakNotify) remove_pixbuf_from_cache,
+ cache_name);
+ } else
+ g_free (cache_name);
+}
diff --git a/applets/clock/clock-face.h b/applets/clock/clock-face.h
new file mode 100644
index 00000000..3c665c63
--- /dev/null
+++ b/applets/clock/clock-face.h
@@ -0,0 +1,64 @@
+/**
+ * clock.h
+ *
+ * A GTK+ widget that implements a clock face
+ *
+ * (c) 2007, Peter Teichman
+ * (c) 2005-2006, Davyd Madeley
+ *
+ * Authors:
+ * Davyd Madeley <[email protected]>
+ * Peter Teichman <[email protected]>
+ */
+
+#ifndef __INTL_CLOCK_FACE_H__
+#define __INTL_CLOCK_FACE_H__
+
+#include <gtk/gtk.h>
+#include "clock-location.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define INTL_TYPE_CLOCK_FACE (clock_face_get_type ())
+#define CLOCK_FACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INTL_TYPE_CLOCK_FACE, ClockFace))
+#define CLOCK_FACE_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), INTL_CLOCK_FACE, ClockFaceClass))
+#define INTL_IS_CLOCK_FACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INTL_TYPE_CLOCK_FACE))
+#define INTL_IS_CLOCK_FACE_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), INTL_TYPE_CLOCK_FACE))
+#define CLOCK_FACE_GET_CLASS (G_TYPE_INSTANCE_GET_CLASS ((obj), INTL_TYPE_CLOCK_FACE, ClockFaceClass))
+
+typedef struct _ClockFace ClockFace;
+typedef struct _ClockFaceClass ClockFaceClass;
+
+struct _ClockFace
+{
+ GtkWidget parent;
+
+ /* < private > */
+};
+
+struct _ClockFaceClass
+{
+ GtkWidgetClass parent_class;
+};
+
+typedef enum {
+ CLOCK_FACE_SMALL,
+ CLOCK_FACE_LARGE
+} ClockFaceSize;
+
+GType clock_face_get_type (void);
+
+GtkWidget *clock_face_new (ClockFaceSize size);
+GtkWidget *clock_face_new_with_location (ClockFaceSize size,
+ ClockLocation *loc,
+ GtkWidget *size_widget);
+gboolean clock_face_refresh (ClockFace *this);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/applets/clock/clock-location-tile.c b/applets/clock/clock-location-tile.c
new file mode 100644
index 00000000..a6f6a4ce
--- /dev/null
+++ b/applets/clock/clock-location-tile.c
@@ -0,0 +1,728 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+
+#include "clock.h"
+#include "clock-face.h"
+#include "clock-location-tile.h"
+#include "clock-location.h"
+#include "clock-utils.h"
+#include "clock-marshallers.h"
+#include "set-timezone.h"
+
+G_DEFINE_TYPE (ClockLocationTile, clock_location_tile, GTK_TYPE_ALIGNMENT)
+
+enum {
+ TILE_PRESSED,
+ NEED_CLOCK_FORMAT,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+typedef struct {
+ ClockLocation *location;
+
+ struct tm last_refresh;
+ long last_offset;
+
+ ClockFaceSize size;
+
+ GtkWidget *box;
+ GtkWidget *clock_face;
+ GtkWidget *city_label;
+ GtkWidget *time_label;
+
+ GtkWidget *current_button;
+ GtkWidget *current_label;
+ GtkWidget *current_marker;
+ GtkWidget *current_spacer;
+ GtkSizeGroup *current_group;
+ GtkSizeGroup *button_group;
+
+ GtkWidget *weather_icon;
+
+ gulong location_weather_updated_id;
+} ClockLocationTilePrivate;
+
+static void clock_location_tile_finalize (GObject *);
+
+#define PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CLOCK_LOCATION_TILE_TYPE, ClockLocationTilePrivate))
+
+static void clock_location_tile_fill (ClockLocationTile *this);
+static void update_weather_icon (ClockLocation *loc, WeatherInfo *info, gpointer data);
+static gboolean weather_tooltip (GtkWidget *widget,
+ gint x, gint y,
+ gboolean keyboard_mode,
+ GtkTooltip *tooltip,
+ gpointer data);
+
+ClockLocationTile *
+clock_location_tile_new (ClockLocation *loc,
+ ClockFaceSize size)
+{
+ ClockLocationTile *this;
+ ClockLocationTilePrivate *priv;
+
+ this = g_object_new (CLOCK_LOCATION_TILE_TYPE, NULL);
+ priv = PRIVATE (this);
+
+ priv->location = g_object_ref (loc);
+ priv->size = size;
+
+ clock_location_tile_fill (this);
+
+ update_weather_icon (loc, clock_location_get_weather_info (loc), this);
+ gtk_widget_set_has_tooltip (priv->weather_icon, TRUE);
+
+ g_signal_connect (priv->weather_icon, "query-tooltip",
+ G_CALLBACK (weather_tooltip), this);
+ priv->location_weather_updated_id = g_signal_connect (G_OBJECT (loc), "weather-updated",
+ G_CALLBACK (update_weather_icon), this);
+
+ return this;
+}
+
+static void
+clock_location_tile_class_init (ClockLocationTileClass *this_class)
+{
+ GObjectClass *g_obj_class = G_OBJECT_CLASS (this_class);
+
+ g_obj_class->finalize = clock_location_tile_finalize;
+
+ g_type_class_add_private (this_class, sizeof (ClockLocationTilePrivate));
+
+ signals[TILE_PRESSED] = g_signal_new ("tile-pressed",
+ G_TYPE_FROM_CLASS (g_obj_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (ClockLocationTileClass, tile_pressed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ signals[NEED_CLOCK_FORMAT] = g_signal_new ("need-clock-format",
+ G_TYPE_FROM_CLASS (g_obj_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ClockLocationTileClass, need_clock_format),
+ NULL,
+ NULL,
+ _clock_marshal_INT__VOID,
+ G_TYPE_INT, 0);
+}
+
+static void
+clock_location_tile_init (ClockLocationTile *this)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (this);
+
+ priv->location = NULL;
+
+ memset (&(priv->last_refresh), 0, sizeof (struct tm));
+ priv->last_offset = 0;
+
+ priv->size = CLOCK_FACE_SMALL;
+
+ priv->clock_face = NULL;
+ priv->city_label = NULL;
+ priv->time_label = NULL;
+}
+
+static void
+clock_location_tile_finalize (GObject *g_obj)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (g_obj);
+
+ if (priv->location) {
+ g_signal_handler_disconnect (priv->location, priv->location_weather_updated_id);
+ priv->location_weather_updated_id = 0;
+
+ g_object_unref (priv->location);
+ priv->location = NULL;
+ }
+
+ if (priv->button_group) {
+ g_object_unref (priv->button_group);
+ priv->button_group = NULL;
+ }
+
+ if (priv->current_group) {
+ g_object_unref (priv->current_group);
+ priv->current_group = NULL;
+ }
+
+ G_OBJECT_CLASS (clock_location_tile_parent_class)->finalize (g_obj);
+}
+
+static gboolean
+press_on_tile (GtkWidget *widget,
+ GdkEventButton *event,
+ ClockLocationTile *tile)
+{
+ g_signal_emit (tile, signals[TILE_PRESSED], 0);
+
+ return TRUE;
+}
+
+static void
+make_current_cb (gpointer data, GError *error)
+{
+ GtkWidget *dialog;
+
+ if (error) {
+ dialog = gtk_message_dialog_new (NULL,
+ 0,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _("Failed to set the system timezone"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", error->message);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+ gtk_window_present (GTK_WINDOW (dialog));
+
+ g_error_free (error);
+ }
+}
+
+static void
+make_current (GtkWidget *widget, ClockLocationTile *tile)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (tile);
+ GtkWidget *toplevel;
+ guint xid;
+
+ xid = 0;
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (tile));
+
+ if (toplevel) {
+ GdkWindow *window = gtk_widget_get_window (toplevel);
+
+ if (window)
+ xid = GDK_WINDOW_XWINDOW (window);
+ }
+
+ clock_location_make_current (priv->location,
+ xid,
+ (GFunc)make_current_cb, tile, NULL);
+}
+
+static gboolean
+enter_or_leave_tile (GtkWidget *widget,
+ GdkEventCrossing *event,
+ ClockLocationTile *tile)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (tile);
+
+ if (event->mode != GDK_CROSSING_NORMAL) {
+ return TRUE;
+ }
+
+ if (clock_location_is_current (priv->location)) {
+ gtk_widget_hide (priv->current_button);
+ gtk_widget_hide (priv->current_spacer);
+ gtk_widget_show (priv->current_marker);
+
+ return TRUE;
+ }
+
+ if (event->type == GDK_ENTER_NOTIFY) {
+ gint can_set;
+
+ if (clock_location_is_current_timezone (priv->location))
+ can_set = 2;
+ else
+ can_set = can_set_system_timezone ();
+ if (can_set != 0) {
+ gtk_label_set_markup (GTK_LABEL (priv->current_label),
+ can_set == 1 ?
+ _("<small>Set...</small>") :
+ _("<small>Set</small>"));
+ gtk_widget_hide (priv->current_spacer);
+ gtk_widget_hide (priv->current_marker);
+ gtk_widget_show (priv->current_button);
+ }
+ else {
+ gtk_widget_hide (priv->current_marker);
+ gtk_widget_hide (priv->current_button);
+ gtk_widget_show (priv->current_spacer);
+ }
+ }
+ else {
+ if (event->detail != GDK_NOTIFY_INFERIOR) {
+ gtk_widget_hide (priv->current_button);
+ gtk_widget_hide (priv->current_marker);
+ gtk_widget_show (priv->current_spacer);
+ }
+ }
+
+ return TRUE;
+}
+
+static void
+clock_location_tile_fill (ClockLocationTile *this)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (this);
+ GtkWidget *align;
+ GtkWidget *strut;
+ GtkWidget *box;
+ GtkWidget *alignment;
+ GtkWidget *tile;
+ GtkWidget *head_section;
+
+ priv->box = gtk_event_box_new ();
+
+ gtk_widget_add_events (priv->box, GDK_BUTTON_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
+ g_signal_connect (priv->box, "button-press-event",
+ G_CALLBACK (press_on_tile), this);
+ g_signal_connect (priv->box, "enter-notify-event",
+ G_CALLBACK (enter_or_leave_tile), this);
+ g_signal_connect (priv->box, "leave-notify-event",
+ G_CALLBACK (enter_or_leave_tile), this);
+
+ alignment = gtk_alignment_new (0, 0, 1, 0);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 3, 3, 3, 0);
+
+ tile = gtk_hbox_new (FALSE, 6);
+ head_section = gtk_vbox_new (FALSE, 0);
+
+ priv->city_label = gtk_label_new (NULL);
+ gtk_misc_set_alignment (GTK_MISC (priv->city_label), 0, 0);
+
+ align = gtk_alignment_new (0, 0, 0, 0);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (align), 0, 0, 0, 3);
+ gtk_container_add (GTK_CONTAINER (align), priv->city_label);
+ gtk_box_pack_start (GTK_BOX (head_section), align, FALSE, FALSE, 0);
+
+ priv->time_label = gtk_label_new (NULL);
+ gtk_misc_set_alignment (GTK_MISC (priv->time_label), 0, 0);
+
+ priv->weather_icon = gtk_image_new ();
+ align = gtk_alignment_new (0, 0, 0, 0);
+ gtk_container_add (GTK_CONTAINER (align), priv->weather_icon);
+
+ box = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (head_section), box, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (box), align, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (box), priv->time_label, FALSE, FALSE, 0);
+
+ priv->current_button = gtk_button_new ();
+ /* The correct label is set on EnterNotify events */
+ priv->current_label = gtk_label_new ("");
+ gtk_widget_show (priv->current_label);
+ gtk_widget_set_no_show_all (priv->current_button, TRUE);
+ gtk_container_add (GTK_CONTAINER (priv->current_button), priv->current_label);
+ gtk_widget_set_tooltip_text (priv->current_button,
+ _("Set location as current location and use its timezone for this computer"));
+
+ priv->current_marker = gtk_image_new_from_icon_name ("go-home", GTK_ICON_SIZE_BUTTON);
+ gtk_misc_set_alignment (GTK_MISC (priv->current_marker), 1.0, 0.5);
+ gtk_widget_set_no_show_all (priv->current_marker, TRUE);
+
+ priv->current_spacer = gtk_event_box_new ();
+ gtk_widget_set_no_show_all (priv->current_spacer, TRUE);
+
+ strut = gtk_event_box_new ();
+ gtk_box_pack_start (GTK_BOX (box), strut, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (box), priv->current_button, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (box), priv->current_marker, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (box), priv->current_spacer, FALSE, FALSE, 0);
+ priv->button_group = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
+ gtk_size_group_set_ignore_hidden (priv->button_group, FALSE);
+ gtk_size_group_add_widget (priv->button_group, strut);
+ gtk_size_group_add_widget (priv->button_group, priv->current_button);
+
+ /*
+ * Avoid resizing the popup as the tiles display the current marker,
+ * set button or nothing. For that purpose, replace 'nothing' with
+ * an event box, and force the button, marker and spacer to have the
+ * same size via a size group. The visibility of the three is managed
+ * manually to ensure that only one of them is shown at any time.
+ * (The all have to be shown initially to get the sizes worked out,
+ * but they are never visible together).
+ */
+ priv->current_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);
+ gtk_size_group_set_ignore_hidden (priv->current_group, FALSE);
+ gtk_size_group_add_widget (priv->current_group, priv->current_button);
+ gtk_size_group_add_widget (priv->current_group, priv->current_marker);
+ gtk_size_group_add_widget (priv->current_group, priv->current_spacer);
+
+ gtk_widget_show (priv->current_button);
+ gtk_widget_show (priv->current_marker);
+ gtk_widget_show (priv->current_spacer);
+
+ g_signal_connect (priv->current_button, "clicked",
+ G_CALLBACK (make_current), this);
+
+ priv->clock_face = clock_face_new_with_location (
+ priv->size, priv->location, head_section);
+
+ gtk_box_pack_start (GTK_BOX (tile), priv->clock_face, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (tile), head_section, TRUE, TRUE, 0);
+
+ gtk_container_add (GTK_CONTAINER (alignment), tile);
+ gtk_container_add (GTK_CONTAINER (priv->box), alignment);
+ gtk_container_add (GTK_CONTAINER (this), priv->box);
+}
+
+static gboolean
+clock_needs_face_refresh (ClockLocationTile *this)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (this);
+ struct tm now;
+
+ clock_location_localtime (priv->location, &now);
+
+ if (now.tm_year > priv->last_refresh.tm_year
+ || now.tm_mon > priv->last_refresh.tm_mon
+ || now.tm_mday > priv->last_refresh.tm_mday
+ || now.tm_hour > priv->last_refresh.tm_hour
+ || now.tm_min > priv->last_refresh.tm_min) {
+ return TRUE;
+ }
+
+ if ((priv->size == CLOCK_FACE_LARGE)
+ && now.tm_sec > priv->last_refresh.tm_sec) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+clock_needs_label_refresh (ClockLocationTile *this)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (this);
+ struct tm now;
+ long offset;
+
+ clock_location_localtime (priv->location, &now);
+ offset = clock_location_get_offset (priv->location);
+
+ if (now.tm_year > priv->last_refresh.tm_year
+ || now.tm_mon > priv->last_refresh.tm_mon
+ || now.tm_mday > priv->last_refresh.tm_mday
+ || now.tm_hour > priv->last_refresh.tm_hour
+ || now.tm_min > priv->last_refresh.tm_min
+ || offset != priv->last_offset) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+copy_tm (struct tm *from, struct tm *to)
+{
+ to->tm_sec = from->tm_sec;
+ to->tm_min = from->tm_min;
+ to->tm_hour = from->tm_hour;
+ to->tm_mday = from->tm_mday;
+ to->tm_mon = from->tm_mon;
+ to->tm_year = from->tm_year;
+ to->tm_wday = from->tm_wday;
+ to->tm_yday = from->tm_yday;
+}
+
+static char *
+format_time (struct tm *now,
+ char *tzname,
+ ClockFormat clock_format,
+ long offset)
+{
+ char buf[256];
+ char *format;
+ time_t local_t;
+ struct tm local_now;
+ char *utf8;
+ char *tmp;
+ long hours, minutes;
+
+ time (&local_t);
+ localtime_r (&local_t, &local_now);
+
+ if (local_now.tm_wday != now->tm_wday) {
+ if (clock_format == CLOCK_FORMAT_12) {
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 12-hours format
+ * (eg, like in the US: 8:10 am), when the local
+ * weekday differs from the weekday at the location
+ * (the %A expands to the weekday). The %p expands to
+ * am/pm. */
+ format = _("%l:%M <small>%p (%A)</small>");
+ }
+ else {
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 24-hours format
+ * (eg, like in France: 20:10), when the local
+ * weekday differs from the weekday at the location
+ * (the %A expands to the weekday). */
+ format = _("%H:%M <small>(%A)</small>");
+ }
+ }
+ else {
+ if (clock_format == CLOCK_FORMAT_12) {
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 12-hours format
+ * (eg, like in the US: 8:10 am). The %p expands to
+ * am/pm. */
+ format = _("%l:%M <small>%p</small>");
+ }
+ else {
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 24-hours format
+ * (eg, like in France: 20:10). */
+ format = _("%H:%M");
+ }
+ }
+
+ if (strftime (buf, sizeof (buf), format, now) <= 0) {
+ strcpy (buf, "???");
+ }
+
+ hours = offset / 3600;
+ minutes = labs (offset % 3600) / 60;
+
+ if (hours != 0 && minutes != 0) {
+ tmp = g_strdup_printf ("%s <small>%s %+ld:%ld</small>", buf, tzname, hours, minutes);
+ }
+ else if (hours != 0) {
+ tmp = g_strdup_printf ("%s <small>%s %+ld</small>", buf, tzname, hours);
+ }
+ else {
+ tmp = g_strdup_printf ("%s <small>%s</small>", buf, tzname);
+ }
+
+ utf8 = g_locale_to_utf8 (tmp, -1, NULL, NULL, NULL);
+
+ g_free (tmp);
+
+ return utf8;
+}
+
+static char *
+convert_time_to_str (time_t now, ClockFormat clock_format)
+{
+ const gchar *format;
+ struct tm *tm;
+ gchar buf[128];
+
+ if (clock_format == CLOCK_FORMAT_12) {
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 12-hours format (eg, like
+ * in the US: 8:10 am). The %p expands to am/pm.
+ */
+ format = _("%l:%M %p");
+ }
+ else {
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 24-hours format (eg, like
+ * in France: 20:10).
+ */
+ format = _("%H:%M");
+ }
+
+ tm = localtime (&now);
+ strftime (buf, sizeof (buf) - 1, format, tm);
+
+ return g_locale_to_utf8 (buf, -1, NULL, NULL, NULL);
+}
+
+void
+clock_location_tile_refresh (ClockLocationTile *this, gboolean force_refresh)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (this);
+ gchar *tmp, *tzname;
+ struct tm now;
+ long offset;
+ int format;
+
+ g_return_if_fail (IS_CLOCK_LOCATION_TILE (this));
+
+ if (clock_location_is_current (priv->location)) {
+ gtk_widget_hide (priv->current_spacer);
+ gtk_widget_hide (priv->current_button);
+ gtk_widget_show (priv->current_marker);
+ }
+ else {
+ if (gtk_widget_get_visible (priv->current_marker)) {
+ gtk_widget_hide (priv->current_marker);
+ gtk_widget_hide (priv->current_button);
+ gtk_widget_show (priv->current_spacer);
+ }
+ }
+
+ if (clock_needs_face_refresh (this)) {
+ clock_face_refresh (CLOCK_FACE (priv->clock_face));
+ }
+
+ if (!force_refresh && !clock_needs_label_refresh (this)) {
+ return;
+ }
+
+ clock_location_localtime (priv->location, &now);
+ tzname = clock_location_get_tzname (priv->location);
+
+ copy_tm (&now, &(priv->last_refresh));
+ priv->last_offset = clock_location_get_offset (priv->location);
+
+ tmp = g_strdup_printf ("<big><b>%s</b></big>",
+ clock_location_get_display_name (priv->location));
+ gtk_label_set_markup (GTK_LABEL (priv->city_label), tmp);
+ g_free (tmp);
+
+ g_signal_emit (this, signals[NEED_CLOCK_FORMAT], 0, &format);
+
+ offset = - priv->last_offset;
+
+ tmp = format_time (&now, tzname, format, offset);
+
+ gtk_label_set_markup (GTK_LABEL (priv->time_label), tmp);
+
+ g_free (tmp);
+}
+
+void
+weather_info_setup_tooltip (WeatherInfo *info, ClockLocation *location, GtkTooltip *tooltip,
+ ClockFormat clock_format)
+{
+ GdkPixbuf *pixbuf = NULL;
+ GtkIconTheme *theme = NULL;
+ const gchar *conditions, *wind;
+ gchar *temp, *apparent;
+ gchar *line1, *line2, *line3, *line4, *tip;
+ const gchar *icon_name;
+ const gchar *sys_timezone;
+ time_t sunrise_time, sunset_time;
+ gchar *sunrise_str, *sunset_str;
+
+ icon_name = weather_info_get_icon_name (info);
+ theme = gtk_icon_theme_get_default ();
+ pixbuf = gtk_icon_theme_load_icon (theme, icon_name, 48,
+ GTK_ICON_LOOKUP_GENERIC_FALLBACK, NULL);
+ if (pixbuf)
+ gtk_tooltip_set_icon (tooltip, pixbuf);
+
+ conditions = weather_info_get_conditions (info);
+ if (strcmp (conditions, "-") != 0)
+ line1 = g_strdup_printf (_("%s, %s"),
+ conditions,
+ weather_info_get_sky (info));
+ else
+ line1 = g_strdup (weather_info_get_sky (info));
+
+ /* we need to g_strdup() since both functions return the same address
+ * of a static buffer */
+ temp = g_strdup (weather_info_get_temp (info));
+ apparent = g_strdup (weather_info_get_apparent (info));
+ if (strcmp (apparent, temp) != 0 &&
+ /* FMQ: it's broken to read from another module's translations; add some API to libmateweather. */
+ strcmp (apparent, dgettext ("mate-applets-2.0", "Unknown")) != 0)
+ /* Translators: The two strings are temperatures. */
+ line2 = g_strdup_printf (_("%s, feels like %s"), temp, apparent);
+ else
+ line2 = g_strdup (temp);
+ g_free (temp);
+ g_free (apparent);
+
+ wind = weather_info_get_wind (info);
+ if (strcmp (apparent, dgettext ("mate-applets-2.0", "Unknown")) != 0)
+ line3 = g_strdup_printf ("%s\n", wind);
+ else
+ line3 = g_strdup ("");
+
+ sys_timezone = getenv ("TZ");
+ setenv ("TZ", clock_location_get_timezone (location), 1);
+ tzset ();
+ if (weather_info_get_value_sunrise (info, &sunrise_time))
+ sunrise_str = convert_time_to_str (sunrise_time, clock_format);
+ else
+ sunrise_str = g_strdup ("???");
+ if (weather_info_get_value_sunset (info, &sunset_time))
+ sunset_str = convert_time_to_str (sunset_time, clock_format);
+ else
+ sunset_str = g_strdup ("???");
+ line4 = g_strdup_printf (_("Sunrise: %s / Sunset: %s"),
+ sunrise_str, sunset_str);
+ g_free (sunrise_str);
+ g_free (sunset_str);
+
+ if (sys_timezone)
+ setenv ("TZ", sys_timezone, 1);
+ else
+ unsetenv ("TZ");
+ tzset ();
+
+ tip = g_strdup_printf ("<b>%s</b>\n%s\n%s%s", line1, line2, line3, line4);
+ gtk_tooltip_set_markup (tooltip, tip);
+ g_free (line1);
+ g_free (line2);
+ g_free (line3);
+ g_free (line4);
+ g_free (tip);
+}
+
+static gboolean
+weather_tooltip (GtkWidget *widget,
+ gint x,
+ gint y,
+ gboolean keyboard_mode,
+ GtkTooltip *tooltip,
+ gpointer data)
+{
+ ClockLocationTile *tile = data;
+ ClockLocationTilePrivate *priv = PRIVATE (tile);
+ WeatherInfo *info;
+ int clock_format;
+
+ info = clock_location_get_weather_info (priv->location);
+
+ if (!info || !weather_info_is_valid (info))
+ return FALSE;
+
+ g_signal_emit (tile, signals[NEED_CLOCK_FORMAT], 0, &clock_format);
+
+ weather_info_setup_tooltip (info, priv->location, tooltip, clock_format);
+
+ return TRUE;
+}
+
+static void
+update_weather_icon (ClockLocation *loc, WeatherInfo *info, gpointer data)
+{
+ ClockLocationTile *tile = data;
+ ClockLocationTilePrivate *priv = PRIVATE (tile);
+ GdkPixbuf *pixbuf = NULL;
+ GtkIconTheme *theme = NULL;
+ const gchar *icon_name;
+
+ if (!info || !weather_info_is_valid (info))
+ return;
+
+ icon_name = weather_info_get_icon_name (info);
+ theme = gtk_icon_theme_get_default ();
+ pixbuf = gtk_icon_theme_load_icon (theme, icon_name, 16,
+ GTK_ICON_LOOKUP_GENERIC_FALLBACK, NULL);
+
+ if (pixbuf) {
+ gtk_image_set_from_pixbuf (GTK_IMAGE (priv->weather_icon), pixbuf);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (gtk_widget_get_parent (priv->weather_icon)), 0, 0, 0, 6);
+ }
+}
+
+ClockLocation *
+clock_location_tile_get_location (ClockLocationTile *this)
+{
+ ClockLocationTilePrivate *priv;
+
+ g_return_val_if_fail (IS_CLOCK_LOCATION_TILE (this), NULL);
+
+ priv = PRIVATE (this);
+
+ return g_object_ref (priv->location);
+}
diff --git a/applets/clock/clock-location-tile.h b/applets/clock/clock-location-tile.h
new file mode 100644
index 00000000..00ccb5a8
--- /dev/null
+++ b/applets/clock/clock-location-tile.h
@@ -0,0 +1,51 @@
+#ifndef __CLOCK_LOCATION_TILE_H__
+#define __CLOCK_LOCATION_TILE_H__
+
+#include <gtk/gtk.h>
+
+#include "clock.h"
+#include "clock-face.h"
+#include "clock-location.h"
+#include "clock-utils.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CLOCK_LOCATION_TILE_TYPE (clock_location_tile_get_type ())
+#define CLOCK_LOCATION_TILE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CLOCK_LOCATION_TILE_TYPE, ClockLocationTile))
+#define CLOCK_LOCATION_TILE_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), CLOCK_LOCATION_TILE_TYPE, ClockLocationTileClass))
+#define IS_CLOCK_LOCATION_TILE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CLOCK_LOCATION_TILE_TYPE))
+#define IS_CLOCK_LOCATION_TILE_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), CLOCK_LOCATION_TILE_TYPE))
+#define CLOCK_LOCATION_TILE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CLOCK_LOCATION_TILE_TYPE, ClockLocationTileClass))
+
+typedef struct
+{
+ GtkAlignment parent;
+} ClockLocationTile;
+
+typedef struct
+{
+ GtkAlignmentClass parent_class;
+
+ void (* tile_pressed) (ClockLocationTile *tile);
+ int (* need_clock_format) (ClockLocationTile *tile);
+} ClockLocationTileClass;
+
+GType clock_location_tile_get_type (void);
+
+ClockLocationTile *clock_location_tile_new (ClockLocation *loc,
+ ClockFaceSize size);
+
+ClockLocation *clock_location_tile_get_location (ClockLocationTile *this);
+
+void weather_info_setup_tooltip (WeatherInfo *info, ClockLocation *location, GtkTooltip *tip,
+ ClockFormat clock_format);
+
+void clock_location_tile_refresh (ClockLocationTile *this,
+ gboolean force_refresh);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __CLOCK_H__ */
diff --git a/applets/clock/clock-location.c b/applets/clock/clock-location.c
new file mode 100644
index 00000000..1b81c517
--- /dev/null
+++ b/applets/clock/clock-location.c
@@ -0,0 +1,894 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <dirent.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <unistd.h>
+#include <math.h>
+
+#include <glib.h>
+#include <gio/gio.h>
+
+#ifdef HAVE_NETWORK_MANAGER
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+#include <NetworkManager/NetworkManager.h>
+#endif
+
+#include "clock-location.h"
+#include "clock-marshallers.h"
+#include "set-timezone.h"
+#include "system-timezone.h"
+
+G_DEFINE_TYPE (ClockLocation, clock_location, G_TYPE_OBJECT)
+
+typedef struct {
+ gchar *name;
+ gchar *city;
+
+ SystemTimezone *systz;
+
+ gchar *timezone;
+
+ gchar *tzname;
+
+ gfloat latitude;
+ gfloat longitude;
+
+ gchar *weather_code;
+ WeatherInfo *weather_info;
+ guint weather_timeout;
+ guint weather_retry_time;
+
+ TempUnit temperature_unit;
+ SpeedUnit speed_unit;
+} ClockLocationPrivate;
+
+#define WEATHER_TIMEOUT_BASE 30
+#define WEATHER_TIMEOUT_MAX 1800
+#define WEATHER_EMPTY_CODE "-"
+
+enum {
+ WEATHER_UPDATED,
+ SET_CURRENT,
+ LAST_SIGNAL
+};
+
+static guint location_signals[LAST_SIGNAL] = { 0 };
+
+static void clock_location_finalize (GObject *);
+static void clock_location_set_tz (ClockLocation *this);
+static void clock_location_unset_tz (ClockLocation *this);
+static void setup_weather_updates (ClockLocation *loc);
+static void add_to_network_monitor (ClockLocation *loc);
+static void remove_from_network_monitor (ClockLocation *loc);
+
+static gchar *clock_location_get_valid_weather_code (const gchar *code);
+
+#define PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CLOCK_LOCATION_TYPE, ClockLocationPrivate))
+
+ClockLocation *
+clock_location_find_and_ref (GList *locations,
+ const gchar *name,
+ const gchar *city,
+ const gchar *timezone,
+ gfloat latitude,
+ gfloat longitude,
+ const gchar *code)
+{
+ GList *l;
+ ClockLocationPrivate *priv;
+
+ for (l = locations; l != NULL; l = l->next) {
+ priv = PRIVATE (l->data);
+
+ if (priv->latitude == latitude &&
+ priv->longitude == longitude &&
+ g_strcmp0 (priv->weather_code, code) == 0 &&
+ g_strcmp0 (priv->timezone, timezone) == 0 &&
+ g_strcmp0 (priv->city, city) == 0 &&
+ g_strcmp0 (priv->name, name) == 0)
+ break;
+ }
+
+ if (l != NULL)
+ return g_object_ref (CLOCK_LOCATION (l->data));
+ else
+ return NULL;
+}
+
+ClockLocation *
+clock_location_new (const gchar *name, const gchar *city,
+ const gchar *timezone,
+ gfloat latitude, gfloat longitude,
+ const gchar *code, WeatherPrefs *prefs)
+{
+ ClockLocation *this;
+ ClockLocationPrivate *priv;
+
+ this = g_object_new (CLOCK_LOCATION_TYPE, NULL);
+ priv = PRIVATE (this);
+
+ priv->name = g_strdup (name);
+ priv->city = g_strdup (city);
+ priv->timezone = g_strdup (timezone);
+
+ /* initialize priv->tzname */
+ clock_location_set_tz (this);
+ clock_location_unset_tz (this);
+
+ priv->latitude = latitude;
+ priv->longitude = longitude;
+
+ priv->weather_code = clock_location_get_valid_weather_code (code);
+
+ if (prefs) {
+ priv->temperature_unit = prefs->temperature_unit;
+ priv->speed_unit = prefs->speed_unit;
+ }
+
+ setup_weather_updates (this);
+
+ return this;
+}
+
+static ClockLocation *current_location = NULL;
+
+static void
+clock_location_class_init (ClockLocationClass *this_class)
+{
+ GObjectClass *g_obj_class = G_OBJECT_CLASS (this_class);
+
+ g_obj_class->finalize = clock_location_finalize;
+
+ location_signals[WEATHER_UPDATED] =
+ g_signal_new ("weather-updated",
+ G_OBJECT_CLASS_TYPE (g_obj_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (ClockLocationClass, weather_updated),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1, G_TYPE_POINTER);
+
+ location_signals[SET_CURRENT] =
+ g_signal_new ("set-current",
+ G_OBJECT_CLASS_TYPE (g_obj_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (ClockLocationClass, set_current),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ g_type_class_add_private (this_class, sizeof (ClockLocationPrivate));
+}
+
+static void
+clock_location_init (ClockLocation *this)
+{
+ ClockLocationPrivate *priv = PRIVATE (this);
+
+ priv->name = NULL;
+ priv->city = NULL;
+
+ priv->systz = system_timezone_new ();
+
+ priv->timezone = NULL;
+
+ priv->tzname = NULL;
+
+ priv->latitude = 0;
+ priv->longitude = 0;
+
+ priv->temperature_unit = TEMP_UNIT_CENTIGRADE;
+ priv->speed_unit = SPEED_UNIT_MS;
+}
+
+static void
+clock_location_finalize (GObject *g_obj)
+{
+ ClockLocationPrivate *priv = PRIVATE (g_obj);
+
+ remove_from_network_monitor (CLOCK_LOCATION (g_obj));
+
+ if (priv->name) {
+ g_free (priv->name);
+ priv->name = NULL;
+ }
+
+ if (priv->city) {
+ g_free (priv->city);
+ priv->city = NULL;
+ }
+
+ if (priv->systz) {
+ g_object_unref (priv->systz);
+ priv->systz = NULL;
+ }
+
+ if (priv->timezone) {
+ g_free (priv->timezone);
+ priv->timezone = NULL;
+ }
+
+ if (priv->tzname) {
+ g_free (priv->tzname);
+ priv->tzname = NULL;
+ }
+
+ if (priv->weather_code) {
+ g_free (priv->weather_code);
+ priv->weather_code = NULL;
+ }
+
+ if (priv->weather_info) {
+ weather_info_free (priv->weather_info);
+ priv->weather_info = NULL;
+ }
+
+ if (priv->weather_timeout) {
+ g_source_remove (priv->weather_timeout);
+ priv->weather_timeout = 0;
+ }
+
+ G_OBJECT_CLASS (clock_location_parent_class)->finalize (g_obj);
+}
+
+const gchar *
+clock_location_get_display_name (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ if (priv->name && priv->name[0])
+ return priv->name;
+ else
+ return priv->city;
+}
+
+const gchar *
+clock_location_get_name (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ return priv->name;
+}
+
+void
+clock_location_set_name (ClockLocation *loc, const gchar *name)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ if (priv->name) {
+ g_free (priv->name);
+ priv->name = NULL;
+ }
+
+ priv->name = g_strdup (name);
+}
+
+const gchar *
+clock_location_get_city (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ return priv->city;
+}
+
+void
+clock_location_set_city (ClockLocation *loc, const gchar *city)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ if (priv->city) {
+ g_free (priv->city);
+ priv->city = NULL;
+ }
+
+ priv->city = g_strdup (city);
+}
+
+gchar *
+clock_location_get_timezone (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ return priv->timezone;
+}
+
+void
+clock_location_set_timezone (ClockLocation *loc, const gchar *timezone)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ if (priv->timezone) {
+ g_free (priv->timezone);
+ priv->timezone = NULL;
+ }
+
+ priv->timezone = g_strdup (timezone);
+}
+
+gchar *
+clock_location_get_tzname (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ return priv->tzname;
+}
+
+void
+clock_location_get_coords (ClockLocation *loc, gfloat *latitude,
+ gfloat *longitude)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ *latitude = priv->latitude;
+ *longitude = priv->longitude;
+}
+
+void
+clock_location_set_coords (ClockLocation *loc, gfloat latitude,
+ gfloat longitude)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ priv->latitude = latitude;
+ priv->longitude = longitude;
+}
+
+static void
+clock_location_set_tzname (ClockLocation *this, const char *tzname)
+{
+ ClockLocationPrivate *priv = PRIVATE (this);
+
+ if (priv->tzname) {
+ if (strcmp (priv->tzname, tzname) == 0) {
+ return;
+ }
+
+ g_free (priv->tzname);
+ priv->tzname = NULL;
+ }
+
+ if (tzname) {
+ priv->tzname = g_strdup (tzname);
+ } else {
+ priv->tzname = NULL;
+ }
+}
+
+static void
+clock_location_set_tz (ClockLocation *this)
+{
+ ClockLocationPrivate *priv = PRIVATE (this);
+
+ time_t now_t;
+ struct tm now;
+
+ if (priv->timezone == NULL) {
+ return;
+ }
+
+ setenv ("TZ", priv->timezone, 1);
+ tzset();
+
+ now_t = time (NULL);
+ localtime_r (&now_t, &now);
+
+ if (now.tm_isdst > 0) {
+ clock_location_set_tzname (this, tzname[1]);
+ } else {
+ clock_location_set_tzname (this, tzname[0]);
+ }
+}
+
+static void
+clock_location_unset_tz (ClockLocation *this)
+{
+ ClockLocationPrivate *priv = PRIVATE (this);
+ const char *env_timezone;
+
+ if (priv->timezone == NULL) {
+ return;
+ }
+
+ env_timezone = system_timezone_get_env (priv->systz);
+
+ if (env_timezone) {
+ setenv ("TZ", env_timezone, 1);
+ } else {
+ unsetenv ("TZ");
+ }
+ tzset();
+}
+
+void
+clock_location_localtime (ClockLocation *loc, struct tm *tm)
+{
+ time_t now;
+
+ clock_location_set_tz (loc);
+
+ time (&now);
+ localtime_r (&now, tm);
+
+ clock_location_unset_tz (loc);
+}
+
+gboolean
+clock_location_is_current_timezone (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+ const char *zone;
+
+ zone = system_timezone_get (priv->systz);
+
+ if (zone)
+ return strcmp (zone, priv->timezone) == 0;
+ else
+ return clock_location_get_offset (loc) == 0;
+}
+
+gboolean
+clock_location_is_current (ClockLocation *loc)
+{
+ if (current_location == loc)
+ return TRUE;
+ else if (current_location != NULL)
+ return FALSE;
+
+ if (clock_location_is_current_timezone (loc)) {
+ /* Note that some code in clock.c depends on the fact that
+ * calling this function can set the current location if
+ * there's none */
+ current_location = loc;
+ g_object_add_weak_pointer (G_OBJECT (current_location),
+ (gpointer *)&current_location);
+ g_signal_emit (current_location, location_signals[SET_CURRENT],
+ 0, NULL);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+glong
+clock_location_get_offset (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+ glong sys_timezone, local_timezone;
+ glong offset;
+ time_t t;
+ struct tm *tm;
+
+ t = time (NULL);
+
+ unsetenv ("TZ");
+ tm = localtime (&t);
+ sys_timezone = timezone;
+
+ if (tm->tm_isdst > 0) {
+ sys_timezone -= 3600;
+ }
+
+ setenv ("TZ", priv->timezone, 1);
+ tm = localtime (&t);
+ local_timezone = timezone;
+
+ if (tm->tm_isdst > 0) {
+ local_timezone -= 3600;
+ }
+
+ offset = local_timezone - sys_timezone;
+
+ clock_location_unset_tz (loc);
+
+ return offset;
+}
+
+typedef struct {
+ ClockLocation *location;
+ GFunc callback;
+ gpointer data;
+ GDestroyNotify destroy;
+} MakeCurrentData;
+
+static void
+make_current_cb (gpointer data, GError *error)
+{
+ MakeCurrentData *mcdata = data;
+
+ if (error == NULL) {
+ if (current_location)
+ g_object_remove_weak_pointer (G_OBJECT (current_location),
+ (gpointer *)&current_location);
+ current_location = mcdata->location;
+ g_object_add_weak_pointer (G_OBJECT (current_location),
+ (gpointer *)&current_location);
+ g_signal_emit (current_location, location_signals[SET_CURRENT],
+ 0, NULL);
+ }
+
+ if (mcdata->callback)
+ mcdata->callback (mcdata->data, error);
+ else
+ g_error_free (error);
+}
+
+static void
+free_make_current_data (gpointer data)
+{
+ MakeCurrentData *mcdata = data;
+
+ if (mcdata->destroy)
+ mcdata->destroy (mcdata->data);
+
+ g_object_unref (mcdata->location);
+ g_free (mcdata);
+}
+
+void
+clock_location_make_current (ClockLocation *loc,
+ guint transient_parent_xid,
+ GFunc callback,
+ gpointer data,
+ GDestroyNotify destroy)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+ gchar *filename;
+ MakeCurrentData *mcdata;
+
+ if (loc == current_location) {
+ if (destroy)
+ destroy (data);
+ return;
+ }
+
+ if (clock_location_is_current_timezone (loc)) {
+ if (current_location)
+ g_object_remove_weak_pointer (G_OBJECT (current_location),
+ (gpointer *)&current_location);
+ current_location = loc;
+ g_object_add_weak_pointer (G_OBJECT (current_location),
+ (gpointer *)&current_location);
+ g_signal_emit (current_location, location_signals[SET_CURRENT],
+ 0, NULL);
+ if (callback)
+ callback (data, NULL);
+ if (destroy)
+ destroy (data);
+ return;
+ }
+
+ mcdata = g_new (MakeCurrentData, 1);
+
+ mcdata->location = g_object_ref (loc);
+ mcdata->callback = callback;
+ mcdata->data = data;
+ mcdata->destroy = destroy;
+
+ filename = g_build_filename (SYSTEM_ZONEINFODIR, priv->timezone, NULL);
+ set_system_timezone_async (filename,
+ (GFunc)make_current_cb,
+ mcdata,
+ free_make_current_data);
+ g_free (filename);
+}
+
+static gchar *
+clock_location_get_valid_weather_code (const gchar *code)
+{
+ if (!code || code[0] == '\0')
+ return g_strdup (WEATHER_EMPTY_CODE);
+ else
+ return g_strdup (code);
+}
+
+const gchar *
+clock_location_get_weather_code (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ return priv->weather_code;
+}
+
+void
+clock_location_set_weather_code (ClockLocation *loc, const gchar *code)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ g_free (priv->weather_code);
+ priv->weather_code = clock_location_get_valid_weather_code (code);
+
+ setup_weather_updates (loc);
+}
+
+WeatherInfo *
+clock_location_get_weather_info (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ return priv->weather_info;
+}
+
+static gboolean update_weather_info (gpointer data);
+
+static void
+set_weather_update_timeout (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+ guint timeout;
+
+ if (!weather_info_network_error (priv->weather_info)) {
+ /* The last update succeeded; set the next update to
+ * happen in half an hour, and reset the retry timer.
+ */
+ timeout = WEATHER_TIMEOUT_MAX;
+ priv->weather_retry_time = WEATHER_TIMEOUT_BASE;
+ } else {
+ /* The last update failed; set the next update
+ * according to the retry timer, and exponentially
+ * back off the retry timer.
+ */
+ timeout = priv->weather_retry_time;
+ priv->weather_retry_time *= 2;
+ if (priv->weather_retry_time > WEATHER_TIMEOUT_MAX)
+ priv->weather_retry_time = WEATHER_TIMEOUT_MAX;
+ }
+
+ if (priv->weather_timeout)
+ g_source_remove (priv->weather_timeout);
+ priv->weather_timeout =
+ g_timeout_add_seconds (timeout, update_weather_info, loc);
+}
+
+static void
+weather_info_updated (WeatherInfo *info, gpointer data)
+{
+ ClockLocation *loc = data;
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ set_weather_update_timeout (loc);
+ g_signal_emit (loc, location_signals[WEATHER_UPDATED],
+ 0, priv->weather_info);
+}
+
+static gboolean
+update_weather_info (gpointer data)
+{
+ ClockLocation *loc = data;
+ ClockLocationPrivate *priv = PRIVATE (loc);
+ WeatherPrefs prefs = {
+ FORECAST_STATE,
+ FALSE,
+ NULL,
+ TEMP_UNIT_CENTIGRADE,
+ SPEED_UNIT_MS,
+ PRESSURE_UNIT_MB,
+ DISTANCE_UNIT_KM
+ };
+
+ prefs.temperature_unit = priv->temperature_unit;
+ prefs.speed_unit = priv->speed_unit;
+
+ weather_info_abort (priv->weather_info);
+ weather_info_update (priv->weather_info,
+ &prefs, weather_info_updated, loc);
+
+ return TRUE;
+}
+
+static gchar *
+rad2dms (gfloat lat, gfloat lon)
+{
+ gchar h, h2;
+ gfloat d, deg, min, d2, deg2, min2;
+
+ h = lat > 0 ? 'N' : 'S';
+ d = fabs (lat);
+ deg = floor (d);
+ min = floor (60 * (d - deg));
+ h2 = lon > 0 ? 'E' : 'W';
+ d2 = fabs (lon);
+ deg2 = floor (d2);
+ min2 = floor (60 * (d2 - deg2));
+ return g_strdup_printf ("%02d-%02d%c %02d-%02d%c",
+ (int)deg, (int)min, h,
+ (int)deg2, (int)min2, h2);
+}
+
+static GList *locations = NULL;
+
+static void
+update_weather_infos (void)
+{
+ GList *l;
+
+ for (l = locations; l; l = l->next) {
+ ClockLocation *loc = l->data;
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ priv->weather_retry_time = WEATHER_TIMEOUT_BASE;
+ update_weather_info (loc);
+ }
+}
+
+#ifdef HAVE_NETWORK_MANAGER
+static void
+state_notify (DBusPendingCall *pending, gpointer data)
+{
+ DBusMessage *msg = dbus_pending_call_steal_reply (pending);
+
+ if (!msg)
+ return;
+
+ if (dbus_message_get_type (msg) == DBUS_MESSAGE_TYPE_METHOD_RETURN) {
+ dbus_uint32_t result;
+
+ if (dbus_message_get_args (msg, NULL,
+ DBUS_TYPE_UINT32, &result,
+ DBUS_TYPE_INVALID)) {
+ if (result == NM_STATE_CONNECTED) {
+ update_weather_infos ();
+ }
+ }
+ }
+
+ dbus_message_unref (msg);
+}
+
+static void
+check_network (DBusConnection *connection)
+{
+ DBusMessage *message;
+ DBusPendingCall *reply;
+
+ message = dbus_message_new_method_call (NM_DBUS_SERVICE,
+ NM_DBUS_PATH,
+ NM_DBUS_INTERFACE,
+ "state");
+ if (dbus_connection_send_with_reply (connection, message, &reply, -1)) {
+ dbus_pending_call_set_notify (reply, state_notify, NULL, NULL);
+ dbus_pending_call_unref (reply);
+ }
+
+ dbus_message_unref (message);
+}
+
+static DBusHandlerResult
+filter_func (DBusConnection *connection,
+ DBusMessage *message,
+ void *user_data)
+{
+ if (dbus_message_is_signal (message,
+ NM_DBUS_INTERFACE,
+ "StateChanged")) {
+ check_network (connection);
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
+static void
+setup_network_monitor (void)
+{
+ GError *error;
+ DBusError derror;
+ static DBusGConnection *bus = NULL;
+ DBusConnection *dbus;
+
+ if (bus == NULL) {
+ error = NULL;
+ bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+ if (bus == NULL) {
+ g_warning ("Couldn't connect to system bus: %s",
+ error->message);
+ g_error_free (error);
+
+ return;
+ }
+
+ dbus_error_init (&derror);
+ dbus = dbus_g_connection_get_connection (bus);
+ dbus_connection_add_filter (dbus, filter_func, NULL, NULL);
+ dbus_bus_add_match (dbus,
+ "type='signal',"
+ "interface='" NM_DBUS_INTERFACE "'",
+ &derror);
+ if (dbus_error_is_set (&derror)) {
+ g_warning ("Couldn't register signal handler: %s: %s",
+ derror.name, derror.message);
+ dbus_error_free (&derror);
+ }
+ }
+}
+#endif
+
+static void
+add_to_network_monitor (ClockLocation *loc)
+{
+#ifdef HAVE_NETWORK_MANAGER
+ setup_network_monitor ();
+#endif
+
+ if (!g_list_find (locations, loc))
+ locations = g_list_prepend (locations, loc);
+}
+
+static void
+remove_from_network_monitor (ClockLocation *loc)
+{
+ locations = g_list_remove (locations, loc);
+}
+
+static void
+setup_weather_updates (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+ WeatherLocation *wl;
+ WeatherPrefs prefs = {
+ FORECAST_STATE,
+ FALSE,
+ NULL,
+ TEMP_UNIT_CENTIGRADE,
+ SPEED_UNIT_MS,
+ PRESSURE_UNIT_MB,
+ DISTANCE_UNIT_KM
+ };
+
+ gchar *dms;
+
+ prefs.temperature_unit = priv->temperature_unit;
+ prefs.speed_unit = priv->speed_unit;
+
+ if (priv->weather_info) {
+ weather_info_free (priv->weather_info);
+ priv->weather_info = NULL;
+ }
+
+ if (priv->weather_timeout) {
+ g_source_remove (priv->weather_timeout);
+ priv->weather_timeout = 0;
+ }
+
+ if (!priv->weather_code ||
+ strcmp (priv->weather_code, WEATHER_EMPTY_CODE) == 0)
+ return;
+
+ dms = rad2dms (priv->latitude, priv->longitude);
+ wl = weather_location_new (priv->city, priv->weather_code,
+ NULL, NULL, dms, NULL, NULL);
+
+ priv->weather_info =
+ weather_info_new (wl, &prefs, weather_info_updated, loc);
+
+ set_weather_update_timeout (loc);
+
+ weather_location_free (wl);
+ g_free (dms);
+
+ add_to_network_monitor (loc);
+}
+
+void
+clock_location_set_weather_prefs (ClockLocation *loc,
+ WeatherPrefs *prefs)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ priv->temperature_unit = prefs->temperature_unit;
+ priv->speed_unit = prefs->speed_unit;
+
+ update_weather_info (loc);
+}
+
diff --git a/applets/clock/clock-location.h b/applets/clock/clock-location.h
new file mode 100644
index 00000000..ae2275aa
--- /dev/null
+++ b/applets/clock/clock-location.h
@@ -0,0 +1,87 @@
+#ifndef __CLOCK_LOCATION_H__
+#define __CLOCK_LOCATION_H__
+
+#include <time.h>
+#include <glib.h>
+#include <glib-object.h>
+#include <libmateweather/weather.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CLOCK_LOCATION_TYPE (clock_location_get_type ())
+#define CLOCK_LOCATION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CLOCK_LOCATION_TYPE, ClockLocation))
+#define CLOCK_LOCATION_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), CLOCK_LOCATION_TYPE, ClockLocationClass))
+#define IS_CLOCK_LOCATION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CLOCK_LOCATION_TYPE))
+#define IS_CLOCK_LOCATION_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), CLOCK_LOCATION_TYPE))
+#define CLOCK_LOCATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CLOCK_LOCATION_TYPE, ClockLocationClass))
+
+typedef struct
+{
+ GObject g_object;
+} ClockLocation;
+
+typedef struct
+{
+ GObjectClass g_object_class;
+
+ void (* weather_updated) (ClockLocation *location, WeatherInfo *info);
+
+ void (* set_current) (ClockLocation *location);
+} ClockLocationClass;
+
+GType clock_location_get_type (void);
+
+ClockLocation *clock_location_new (const gchar *name, const gchar *city,
+ const gchar *timezone,
+ gfloat latitude, gfloat longitude,
+ const gchar *code,
+ WeatherPrefs *prefs);
+
+ClockLocation *clock_location_find_and_ref (GList *locations,
+ const gchar *name,
+ const gchar *city,
+ const gchar *timezone,
+ gfloat latitude,
+ gfloat longitude,
+ const gchar *code);
+
+gchar *clock_location_get_tzname (ClockLocation *loc);
+
+const gchar *clock_location_get_display_name (ClockLocation *loc);
+
+const gchar *clock_location_get_name (ClockLocation *loc);
+void clock_location_set_name (ClockLocation *loc, const gchar *name);
+
+const gchar *clock_location_get_city (ClockLocation *loc);
+void clock_location_set_city (ClockLocation *loc, const gchar *city);
+
+gchar *clock_location_get_timezone (ClockLocation *loc);
+void clock_location_set_timezone (ClockLocation *loc, const gchar *timezone);
+
+void clock_location_get_coords (ClockLocation *loc, gfloat *latitude, gfloat *longitude);
+void clock_location_set_coords (ClockLocation *loc, gfloat latitude, gfloat longitude);
+
+void clock_location_localtime (ClockLocation *loc, struct tm *tm);
+
+gboolean clock_location_is_current (ClockLocation *loc);
+void clock_location_make_current (ClockLocation *loc,
+ guint transient_parent_xid,
+ GFunc callback,
+ gpointer data,
+ GDestroyNotify destroy);
+gboolean clock_location_is_current_timezone (ClockLocation *loc);
+
+const gchar *clock_location_get_weather_code (ClockLocation *loc);
+void clock_location_set_weather_code (ClockLocation *loc, const gchar *code);
+WeatherInfo *clock_location_get_weather_info (ClockLocation *loc);
+void clock_location_set_weather_prefs (ClockLocation *loc,
+ WeatherPrefs *weather_prefs);
+
+glong clock_location_get_offset (ClockLocation *loc);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __CLOCK_LOCATION_H__ */
diff --git a/applets/clock/clock-map.c b/applets/clock/clock-map.c
new file mode 100644
index 00000000..5a6e0379
--- /dev/null
+++ b/applets/clock/clock-map.c
@@ -0,0 +1,700 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cairo.h>
+#include <sys/time.h>
+#include <sys/timeb.h>
+#include <gtk/gtk.h>
+#include <math.h>
+
+#include "clock.h"
+#include "clock-map.h"
+#include "clock-sunpos.h"
+#include "clock-marshallers.h"
+
+G_DEFINE_TYPE (ClockMap, clock_map, GTK_TYPE_WIDGET)
+
+enum {
+ NEED_LOCATIONS,
+ LAST_SIGNAL
+};
+
+enum {
+ MARKER_NORMAL = 0,
+ MARKER_HILIGHT,
+ MARKER_CURRENT,
+ MARKER_NB
+};
+
+static char *marker_files[MARKER_NB] = {
+ ICONDIR "/clock-map-location-marker.png",
+ ICONDIR "/clock-map-location-hilight.png",
+ ICONDIR "/clock-map-location-current.png"
+};
+
+static guint signals[LAST_SIGNAL];
+
+typedef struct {
+ time_t last_refresh;
+
+ gint width;
+ gint height;
+
+ guint highlight_timeout_id;
+
+ GdkPixbuf *stock_map_pixbuf;
+ GdkPixbuf *location_marker_pixbuf[MARKER_NB];
+
+ GdkPixbuf *location_map_pixbuf;
+
+ /* The shadow itself */
+ GdkPixbuf *shadow_pixbuf;
+
+ /* The map with the shadow composited onto it */
+ GdkPixbuf *shadow_map_pixbuf;
+} ClockMapPrivate;
+
+static void clock_map_finalize (GObject *);
+static void clock_map_size_request (GtkWidget *this,
+ GtkRequisition *requisition);
+static void clock_map_size_allocate (GtkWidget *this,
+ GtkAllocation *allocation);
+static gboolean clock_map_expose (GtkWidget *this,
+ GdkEventExpose *expose);
+
+static void clock_map_place_locations (ClockMap *this);
+static void clock_map_render_shadow (ClockMap *this);
+static void clock_map_display (ClockMap *this);
+
+#define PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CLOCK_MAP_TYPE, ClockMapPrivate))
+
+ClockMap *
+clock_map_new (void)
+{
+ ClockMap *this;
+
+ this = g_object_new (CLOCK_MAP_TYPE, NULL);
+
+ return this;
+}
+
+static void
+clock_map_class_init (ClockMapClass *this_class)
+{
+ GObjectClass *g_obj_class = G_OBJECT_CLASS (this_class);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (g_obj_class);
+
+ g_obj_class->finalize = clock_map_finalize;
+
+ /* GtkWidget signals */
+ widget_class->size_request = clock_map_size_request;
+ widget_class->size_allocate = clock_map_size_allocate;
+ widget_class->expose_event = clock_map_expose;
+
+ g_type_class_add_private (this_class, sizeof (ClockMapPrivate));
+
+ /**
+ * ClockMap::need-locations
+ *
+ * The map widget emits this signal when it needs to know which
+ * locations to display.
+ *
+ * Returns: the handler should return a (GList *) of (ClockLocation *).
+ * The map widget will not modify this list, so the caller should keep
+ * it alive.
+ */
+ signals[NEED_LOCATIONS] = g_signal_new ("need-locations",
+ G_TYPE_FROM_CLASS (g_obj_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ClockMapClass, need_locations),
+ NULL,
+ NULL,
+ _clock_marshal_POINTER__VOID,
+ G_TYPE_POINTER, 0);
+}
+
+static void
+clock_map_init (ClockMap *this)
+{
+ int i;
+ ClockMapPrivate *priv = PRIVATE (this);
+
+ gtk_widget_set_has_window (GTK_WIDGET (this), FALSE);
+
+ priv->last_refresh = 0;
+ priv->width = 0;
+ priv->height = 0;
+ priv->highlight_timeout_id = 0;
+ priv->stock_map_pixbuf = NULL;
+
+ g_assert (sizeof (marker_files)/sizeof (char *) == MARKER_NB);
+
+ for (i = 0; i < MARKER_NB; i++) {
+ priv->location_marker_pixbuf[i] = gdk_pixbuf_new_from_file
+ (marker_files[i], NULL);
+ }
+}
+
+static void
+clock_map_finalize (GObject *g_obj)
+{
+ ClockMapPrivate *priv = PRIVATE (g_obj);
+ int i;
+
+ if (priv->highlight_timeout_id) {
+ g_source_remove (priv->highlight_timeout_id);
+ priv->highlight_timeout_id = 0;
+ }
+
+ if (priv->stock_map_pixbuf) {
+ g_object_unref (priv->stock_map_pixbuf);
+ priv->stock_map_pixbuf = NULL;
+ }
+
+ for (i = 0; i < MARKER_NB; i++) {
+ if (priv->location_marker_pixbuf[i]) {
+ g_object_unref (priv->location_marker_pixbuf[i]);
+ priv->location_marker_pixbuf[i] = NULL;
+ }
+ }
+
+ if (priv->location_map_pixbuf) {
+ g_object_unref (priv->location_map_pixbuf);
+ priv->location_map_pixbuf = NULL;
+ }
+
+ if (priv->shadow_pixbuf) {
+ g_object_unref (priv->shadow_pixbuf);
+ priv->shadow_pixbuf = NULL;
+ }
+
+ if (priv->shadow_map_pixbuf) {
+ g_object_unref (priv->shadow_map_pixbuf);
+ priv->shadow_map_pixbuf = NULL;
+ }
+
+ G_OBJECT_CLASS (clock_map_parent_class)->finalize (g_obj);
+}
+
+void
+clock_map_refresh (ClockMap *this)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+ GtkWidget *widget = GTK_WIDGET (this);
+ GtkAllocation allocation;
+
+ gtk_widget_get_allocation (widget, &allocation);
+
+ /* Only do something if we have some space allocated.
+ * Note that 1x1 is not really some space... */
+ if (allocation.width <= 1 || allocation.height <= 1)
+ return;
+
+ /* Allocation changed => we reload the map */
+ if (priv->width != allocation.width ||
+ priv->height != allocation.height) {
+ if (priv->stock_map_pixbuf) {
+ g_object_unref (priv->stock_map_pixbuf);
+ priv->stock_map_pixbuf = NULL;
+ }
+
+ priv->width = allocation.width;
+ priv->height = allocation.height;
+ }
+
+ if (!priv->stock_map_pixbuf) {
+ GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file_at_scale
+ (ICONDIR "/clock-map.png",
+ priv->width, priv->height, FALSE, NULL);
+
+ priv->stock_map_pixbuf = pixbuf;
+ }
+
+ clock_map_place_locations (this);
+
+ clock_map_display (this);
+}
+
+static gboolean
+clock_map_expose (GtkWidget *this, GdkEventExpose *event)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+ GdkWindow *window;
+ GtkStyle *style;
+ GtkAllocation allocation;
+ GdkRectangle region;
+ cairo_t *cr;
+
+ window = gtk_widget_get_window (this);
+ style = gtk_widget_get_style (this);
+ gtk_widget_get_allocation (this, &allocation);
+
+ if (!priv->shadow_map_pixbuf) {
+ g_warning ("Needed to refresh the map in expose event.");
+ clock_map_refresh (CLOCK_MAP (this));
+ }
+
+ cr = gdk_cairo_create (window);
+
+ region.x = allocation.x;
+ region.y = allocation.y;
+ region.width = gdk_pixbuf_get_width (priv->shadow_map_pixbuf);
+ region.height = gdk_pixbuf_get_height (priv->shadow_map_pixbuf);
+
+ gdk_rectangle_intersect (&region, &(event->area), &region);
+ gdk_draw_pixbuf (window,
+ style->black_gc,
+ priv->shadow_map_pixbuf,
+ region.x - allocation.x,
+ region.y - allocation.y,
+ region.x,
+ region.y,
+ region.width,
+ region.height,
+ GDK_RGB_DITHER_NORMAL,
+ 0, 0);
+
+ /* draw a simple outline */
+ cairo_rectangle (
+ cr,
+ allocation.x + 0.5, allocation.y + 0.5,
+ gdk_pixbuf_get_width (priv->shadow_map_pixbuf) - 1,
+ gdk_pixbuf_get_height (priv->shadow_map_pixbuf) - 1);
+
+ cairo_set_source_rgb (
+ cr,
+ style->mid [GTK_STATE_ACTIVE].red / 65535.0,
+ style->mid [GTK_STATE_ACTIVE].green / 65535.0,
+ style->mid [GTK_STATE_ACTIVE].blue / 65535.0);
+
+ cairo_set_line_width (cr, 1.0);
+ cairo_stroke (cr);
+
+ cairo_destroy (cr);
+
+ return FALSE;
+}
+
+static void
+clock_map_size_request (GtkWidget *this, GtkRequisition *requisition)
+{
+ requisition->width = 250;
+ requisition->height = 125;
+}
+
+static void
+clock_map_size_allocate (GtkWidget *this, GtkAllocation *allocation)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+
+ if (GTK_WIDGET_CLASS (clock_map_parent_class)->size_allocate)
+ GTK_WIDGET_CLASS (clock_map_parent_class)->size_allocate (this, allocation);
+
+ if (priv->width != allocation->width ||
+ priv->height != allocation->height)
+ clock_map_refresh (CLOCK_MAP (this));
+}
+
+static void
+clock_map_mark (ClockMap *this, gfloat latitude, gfloat longitude, gint mark)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+ GdkPixbuf *marker = priv->location_marker_pixbuf[mark];
+ GdkPixbuf *partial = NULL;
+
+ int x, y;
+ int width, height;
+ int marker_width, marker_height;
+ int dest_x, dest_y, dest_width, dest_height;
+
+ width = gdk_pixbuf_get_width (priv->location_map_pixbuf);
+ height = gdk_pixbuf_get_height (priv->location_map_pixbuf);
+
+ x = (width / 2.0 + (width / 2.0) * longitude / 180.0);
+ y = (height / 2.0 - (height / 2.0) * latitude / 90.0);
+
+ marker_width = gdk_pixbuf_get_width (marker);
+ marker_height = gdk_pixbuf_get_height (marker);
+
+ dest_x = x - marker_width / 2;
+ dest_y = y - marker_height / 2;
+ dest_width = marker_width;
+ dest_height = marker_height;
+
+ /* create a small partial pixbuf if the mark is too close to
+ the north or south pole */
+ if (dest_y < 0) {
+ partial = gdk_pixbuf_new_subpixbuf
+ (marker, 0, dest_y + marker_height,
+ marker_width, -dest_y);
+
+ dest_y = 0.0;
+ marker_height = gdk_pixbuf_get_height (partial);
+ } else if (dest_y + dest_height > height) {
+ partial = gdk_pixbuf_new_subpixbuf
+ (marker, 0, 0, marker_width, height - dest_y);
+ marker_height = gdk_pixbuf_get_height (partial);
+ }
+
+ if (partial) {
+ marker = partial;
+ }
+
+ /* handle the cases where the marker needs to be placed across
+ the 180 degree longitude line */
+ if (dest_x < 0) {
+ /* split into our two pixbufs for the left and right edges */
+ GdkPixbuf *lhs = NULL;
+ GdkPixbuf *rhs = NULL;
+
+ lhs = gdk_pixbuf_new_subpixbuf
+ (marker, -dest_x, 0, marker_width + dest_x, marker_height);
+
+ gdk_pixbuf_composite (lhs, priv->location_map_pixbuf,
+ 0, dest_y,
+ gdk_pixbuf_get_width (lhs),
+ gdk_pixbuf_get_height (lhs),
+ 0, dest_y,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF);
+
+ rhs = gdk_pixbuf_new_subpixbuf
+ (marker, 0, 0, -dest_x, marker_height);
+
+ gdk_pixbuf_composite (rhs, priv->location_map_pixbuf,
+ width - gdk_pixbuf_get_width (rhs) - 1,
+ dest_y,
+ gdk_pixbuf_get_width (rhs),
+ gdk_pixbuf_get_height (rhs),
+ width - gdk_pixbuf_get_width (rhs) - 1,
+ dest_y,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF);
+
+ g_object_unref (lhs);
+ g_object_unref (rhs);
+ } else if (dest_x + dest_width > width) {
+ /* split into our two pixbufs for the left and right edges */
+ GdkPixbuf *lhs = NULL;
+ GdkPixbuf *rhs = NULL;
+
+ lhs = gdk_pixbuf_new_subpixbuf
+ (marker, width - dest_x, 0, marker_width - width + dest_x, marker_height);
+
+ gdk_pixbuf_composite (lhs, priv->location_map_pixbuf,
+ 0, dest_y,
+ gdk_pixbuf_get_width (lhs),
+ gdk_pixbuf_get_height (lhs),
+ 0, dest_y,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF);
+
+ rhs = gdk_pixbuf_new_subpixbuf
+ (marker, 0, 0, width - dest_x, marker_height);
+
+ gdk_pixbuf_composite (rhs, priv->location_map_pixbuf,
+ width - gdk_pixbuf_get_width (rhs) - 1,
+ dest_y,
+ gdk_pixbuf_get_width (rhs),
+ gdk_pixbuf_get_height (rhs),
+ width - gdk_pixbuf_get_width (rhs) - 1,
+ dest_y,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF);
+
+ g_object_unref (lhs);
+ g_object_unref (rhs);
+ } else {
+ gdk_pixbuf_composite (marker, priv->location_map_pixbuf,
+ dest_x, dest_y,
+ gdk_pixbuf_get_width (marker),
+ gdk_pixbuf_get_height (marker),
+ dest_x, dest_y,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF);
+ }
+
+ if (partial != NULL) {
+ g_object_unref (partial);
+ }
+}
+
+/**
+ * Return value: %TRUE if @loc can be placed on the map, %FALSE otherwise.
+ **/
+static gboolean
+clock_map_place_location (ClockMap *this, ClockLocation *loc, gboolean hilight)
+{
+ gfloat latitude, longitude;
+ gint marker;
+
+ clock_location_get_coords (loc, &latitude, &longitude);
+ /* 0/0 means unset, basically */
+ if (latitude == 0 && longitude == 0)
+ return FALSE;
+
+ if (hilight)
+ marker = MARKER_HILIGHT;
+ else if (clock_location_is_current (loc))
+ marker = MARKER_CURRENT;
+ else
+ marker = MARKER_NORMAL;
+
+ clock_map_mark (this, latitude, longitude, marker);
+
+ return TRUE;
+}
+
+static void
+clock_map_place_locations (ClockMap *this)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+ GList *locs;
+ ClockLocation *loc;
+
+ if (priv->location_map_pixbuf) {
+ g_object_unref (priv->location_map_pixbuf);
+ priv->location_map_pixbuf = NULL;
+ }
+
+ priv->location_map_pixbuf = gdk_pixbuf_copy (priv->stock_map_pixbuf);
+
+ locs = NULL;
+ g_signal_emit (this, signals[NEED_LOCATIONS], 0, &locs);
+
+ while (locs) {
+ loc = CLOCK_LOCATION (locs->data);
+
+ clock_map_place_location (this, loc, FALSE);
+
+ locs = locs->next;
+ }
+
+#if 0
+ /* map_mark test suite for the edge cases */
+
+ /* points around longitude 180 */
+ clock_map_mark (this, 0.0, 180.0);
+ clock_map_mark (this, -15.0, -178.0);
+ clock_map_mark (this, -30.0, -176.0);
+ clock_map_mark (this, 15.0, 178.0);
+ clock_map_mark (this, 30.0, 176.0);
+
+ clock_map_mark (this, 90.0, 180.0);
+ clock_map_mark (this, -90.0, 180.0);
+
+ /* north pole & friends */
+ clock_map_mark (this, 90.0, 0.0);
+ clock_map_mark (this, 88.0, -15.0);
+ clock_map_mark (this, 92.0, 15.0);
+
+ /* south pole & friends */
+ clock_map_mark (this, -90.0, 0.0);
+ clock_map_mark (this, -88.0, -15.0);
+ clock_map_mark (this, -92.0, 15.0);
+#endif
+}
+
+static void
+clock_map_compute_vector (gdouble lat, gdouble lon, gdouble *vec)
+{
+ gdouble lat_rad, lon_rad;
+ lat_rad = lat * (M_PI/180.0);
+ lon_rad = lon * (M_PI/180.0);
+
+ vec[0] = sin(lon_rad) * cos(lat_rad);
+ vec[1] = sin(lat_rad);
+ vec[2] = cos(lon_rad) * cos(lat_rad);
+}
+
+static guchar
+clock_map_is_sunlit (gdouble pos_lat, gdouble pos_long,
+ gdouble sun_lat, gdouble sun_long)
+{
+ gdouble pos_vec[3];
+ gdouble sun_vec[3];
+ gdouble dot;
+
+ /* twilight */
+ gdouble epsilon = 0.01;
+
+ clock_map_compute_vector (pos_lat, pos_long, pos_vec);
+ clock_map_compute_vector (sun_lat, sun_long, sun_vec);
+
+ /* compute the dot product of the two */
+ dot = pos_vec[0]*sun_vec[0] + pos_vec[1]*sun_vec[1]
+ + pos_vec[2]*sun_vec[2];
+
+ if (dot > epsilon) {
+ return 0x00;
+ }
+
+ if (dot < -epsilon) {
+ return 0xFF;
+ }
+
+ return (guchar)(-128 * ((dot / epsilon) - 1));
+}
+
+static void
+clock_map_render_shadow_pixbuf (GdkPixbuf *pixbuf)
+{
+ int x, y;
+ int height, width;
+ int n_channels, rowstride;
+ guchar *pixels, *p;
+ gdouble sun_lat, sun_lon;
+ time_t now = time (NULL);
+
+ n_channels = gdk_pixbuf_get_n_channels (pixbuf);
+ rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+ pixels = gdk_pixbuf_get_pixels (pixbuf);
+
+ width = gdk_pixbuf_get_width (pixbuf);
+ height = gdk_pixbuf_get_height (pixbuf);
+
+ sun_position (now, &sun_lat, &sun_lon);
+
+ for (y = 0; y < height; y++) {
+ gdouble lat = (height / 2.0 - y) / (height / 2.0) * 90.0;
+
+ for (x = 0; x < width; x++) {
+ guchar shade;
+ gdouble lon =
+ (x - width / 2.0) / (width / 2.0) * 180.0;
+
+ shade = clock_map_is_sunlit (lat, lon,
+ sun_lat, sun_lon);
+
+ p = pixels + y * rowstride + x * n_channels;
+ p[3] = shade;
+ }
+ }
+}
+
+static void
+clock_map_render_shadow (ClockMap *this)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+
+ if (priv->shadow_pixbuf) {
+ g_object_unref (priv->shadow_pixbuf);
+ }
+
+ priv->shadow_pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8,
+ priv->width, priv->height);
+
+ /* Initialize to all shadow */
+ gdk_pixbuf_fill (priv->shadow_pixbuf, 0x6d9ccdff);
+
+ clock_map_render_shadow_pixbuf (priv->shadow_pixbuf);
+
+ if (priv->shadow_map_pixbuf) {
+ g_object_unref (priv->shadow_map_pixbuf);
+ }
+
+ priv->shadow_map_pixbuf = gdk_pixbuf_copy (priv->location_map_pixbuf);
+
+ gdk_pixbuf_composite (priv->shadow_pixbuf, priv->shadow_map_pixbuf,
+ 0, 0, priv->width, priv->height,
+ 0, 0, 1, 1, GDK_INTERP_NEAREST, 0x66);
+}
+
+static void
+clock_map_display (ClockMap *this)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+
+ clock_map_render_shadow (this);
+ gtk_widget_queue_draw (GTK_WIDGET (this));
+
+ time (&priv->last_refresh);
+}
+
+typedef struct {
+ ClockMap *map;
+ ClockLocation *location;
+ int count;
+} BlinkData;
+
+static gboolean
+highlight (gpointer user_data)
+{
+ BlinkData *data = user_data;
+
+ if (data->count == 6)
+ return FALSE;
+
+ if (data->count % 2 == 0) {
+ if (!clock_map_place_location (data->map,
+ data->location, TRUE))
+ return FALSE;
+ } else
+ clock_map_place_locations (data->map);
+ clock_map_display (data->map);
+
+ data->count++;
+
+ return TRUE;
+}
+
+static void
+highlight_destroy (gpointer user_data)
+{
+ BlinkData *data = user_data;
+ ClockMapPrivate *priv;
+
+ priv = PRIVATE (data->map);
+ priv->highlight_timeout_id = 0;
+
+ g_object_unref (data->location);
+ g_free (data);
+}
+
+void
+clock_map_blink_location (ClockMap *this, ClockLocation *loc)
+{
+ BlinkData *data;
+ ClockMapPrivate *priv;
+
+ priv = PRIVATE (this);
+
+ g_return_if_fail (IS_CLOCK_MAP (this));
+ g_return_if_fail (IS_CLOCK_LOCATION (loc));
+
+ data = g_new0 (BlinkData, 1);
+ data->map = this;
+ data->location = g_object_ref (loc);
+
+ if (priv->highlight_timeout_id) {
+ g_source_remove (priv->highlight_timeout_id);
+ clock_map_place_locations (this);
+ }
+
+ highlight (data);
+
+ priv->highlight_timeout_id = g_timeout_add_full (G_PRIORITY_DEFAULT_IDLE,
+ 300, highlight, data,
+ highlight_destroy);
+}
+
+static gboolean
+clock_map_needs_refresh (ClockMap *this)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+ time_t now_t;
+
+ time (&now_t);
+
+ /* refresh once per minute */
+ return (ABS (now_t - priv->last_refresh) >= 60);
+}
+
+void
+clock_map_update_time (ClockMap *this)
+{
+
+ g_return_if_fail (IS_CLOCK_MAP (this));
+
+ if (!clock_map_needs_refresh (this)) {
+ return;
+ }
+
+ clock_map_display (this);
+}
diff --git a/applets/clock/clock-map.h b/applets/clock/clock-map.h
new file mode 100644
index 00000000..2b662c87
--- /dev/null
+++ b/applets/clock/clock-map.h
@@ -0,0 +1,43 @@
+#ifndef __CLOCK_MAP_H__
+#define __CLOCK_MAP_H__
+
+#include "clock.h"
+#include "clock-location.h"
+
+#include <gtk/gtk.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CLOCK_MAP_TYPE (clock_map_get_type ())
+#define CLOCK_MAP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CLOCK_MAP_TYPE, ClockMap))
+#define CLOCK_MAP_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), CLOCK_MAP_TYPE, ClockMapClass))
+#define IS_CLOCK_MAP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CLOCK_MAP_TYPE))
+#define IS_CLOCK_MAP_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), CLOCK_MAP_TYPE))
+#define CLOCK_MAP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CLOCK_MAP_TYPE, ClockMapClass))
+
+typedef struct
+{
+ GtkWidget parent;
+} ClockMap;
+
+typedef struct
+{
+ GtkWidgetClass parent_class;
+
+ GList *(* need_locations) (ClockMap *map);
+} ClockMapClass;
+
+GType clock_map_get_type (void);
+
+ClockMap *clock_map_new (void);
+void clock_map_refresh (ClockMap *this);
+void clock_map_update_time (ClockMap *this);
+void clock_map_blink_location (ClockMap *this, ClockLocation *loc);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __CLOCK_MAP_H__ */
diff --git a/applets/clock/clock-marshallers.list b/applets/clock/clock-marshallers.list
new file mode 100644
index 00000000..8c4d3072
--- /dev/null
+++ b/applets/clock/clock-marshallers.list
@@ -0,0 +1,3 @@
+POINTER:VOID
+VOID:OBJECT,STRING
+INT:VOID
diff --git a/applets/clock/clock-menu.xml b/applets/clock/clock-menu.xml
new file mode 100644
index 00000000..abe0e071
--- /dev/null
+++ b/applets/clock/clock-menu.xml
@@ -0,0 +1,8 @@
+<menuitem name="Clock Copy Time Item" action="ClockCopyTime" />
+<menuitem name="Clock Copy Date Item" action="ClockCopyDate" />
+<separator/>
+<menuitem name="Clock Configure Item" action="ClockConfig" />
+<menuitem name="Clock Preferences Item" action="ClockPreferences" />
+<menuitem name="Clock Help Item" action="ClockHelp" />
+<menuitem name="Clock About Item" action="ClockAbout" />
+
diff --git a/applets/clock/clock-sunpos.c b/applets/clock/clock-sunpos.c
new file mode 100644
index 00000000..2103fd90
--- /dev/null
+++ b/applets/clock/clock-sunpos.c
@@ -0,0 +1,197 @@
+/*
+ * Copyright (C) 2007 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Jonathan Blandford <[email protected]>
+ * Matthias Clasen <[email protected]>
+ */
+
+#include <time.h>
+#include <gtk/gtk.h>
+#include <math.h>
+#include "clock-sunpos.h"
+
+/* Calculated with the methods and figures from "Practical Astronomy With Your
+ * Calculator, version 3" by Peter Duffet-Smith.
+ */
+/* Table 6. Details of the Sun's apparent matecorba at epoch 1990.0 */
+
+#define EPOCH 2447891.5 /* days */ /* epoch 1990 */
+#define UNIX_EPOCH 2440586.5 /* days */ /* epoch 1970 */
+#define EPSILON_G 279.403303 /* degrees */ /* ecliptic longitude at epoch 1990.0 */
+#define MU_G 282.768422 /* degrees */ /* ecliptic longitude at perigee */
+#define ECCENTRICITY 0.016713 /* eccentricity of matecorba */
+#define R_0 149598500 /* km */ /* semi-major axis */
+#define THETA_0 0.533128 /* degrees */ /* angular diameter at r = r_0 */
+#define MEAN_OBLIQUITY 23.440592 /* degrees */ /* mean obliquity of earth's axis at epoch 1990.0 */
+
+#define NORMALIZE(x) \
+ while (x>360) x-=360; while (x<0) x+= 360;
+
+#define DEG_TO_RADS(x) \
+ (x * G_PI/180.0)
+
+#define RADS_TO_DEG(x) \
+ (x * 180.0/G_PI)
+
+/* Calculate number of days since 4713BC.
+ */
+static gdouble
+unix_time_to_julian_date (gint unix_time)
+{
+ return UNIX_EPOCH + (double) unix_time / (60 * 60 * 24);
+}
+
+/* Finds an iterative solution for [ E - e sin (E) = M ] for values of e less
+ than 0.1. Page 90 */
+
+#define ERROR_ACCURACY 1e-6 /* radians */
+
+static gdouble
+solve_keplers_equation (gdouble e,
+ gdouble M)
+{
+ gdouble d, E;
+
+ /* start with an initial estimate */
+ E = M;
+
+ d = E - e * sin (E) - M;
+
+ while (ABS (d) > ERROR_ACCURACY)
+ {
+ E = E - (d / (1 - e * cos (E)));
+ d = E - e * sin (E) - M;
+ }
+
+ return E;
+}
+
+ /* convert the ecliptic longitude to right ascension and declination. Section 27. */
+static void
+ecliptic_to_equatorial (gdouble lambda,
+ gdouble beta,
+ gdouble *ra,
+ gdouble *dec)
+{
+ gdouble cos_mo;
+ gdouble sin_mo;
+
+ g_assert (ra != NULL);
+ g_assert (dec != NULL);
+
+ sin_mo = sin (DEG_TO_RADS (MEAN_OBLIQUITY));
+ cos_mo = cos (DEG_TO_RADS (MEAN_OBLIQUITY));
+
+ *ra = atan2 (sin (lambda) * cos_mo - tan (beta) * sin_mo, cos (lambda));
+ *dec = asin (sin (beta) * cos_mo + cos (beta) * sin_mo * sin (lambda));
+}
+
+/* calculate GST. Section 12 */
+static gdouble
+greenwich_sidereal_time (gdouble unix_time)
+{
+ gdouble u, JD, T, T0, UT;
+
+ u = fmod (unix_time, 24 * 60 * 60);
+ JD = unix_time_to_julian_date (unix_time - u);
+ T = (JD - 2451545) / 36525;
+ T0 = 6.697374558 + (2400.051336 * T) + (0.000025862 * T * T);
+ T0 = fmod (T0, 24);
+ UT = u / (60 * 60);
+ T0 = T0 + UT * 1.002737909;
+ T0 = fmod (T0, 24);
+
+ return T0;
+}
+
+/* Calculate the position of the sun at a given time. pages 89-91 */
+void
+sun_position (time_t unix_time, gdouble *lat, gdouble *lon)
+{
+ gdouble jd, D, N, M, E, x, v, lambda;
+ gdouble ra, dec;
+ jd = unix_time_to_julian_date (unix_time);
+
+ /* Calculate number of days since the epoch */
+ D = jd - EPOCH;
+
+ N = D*360/365.242191;
+
+ /* normalize to 0 - 360 degrees */
+ NORMALIZE (N);
+
+ /* Step 4: */
+ M = N + EPSILON_G - MU_G;
+ NORMALIZE (M);
+
+ /* Step 5: convert to radians */
+ M = DEG_TO_RADS (M);
+
+ /* Step 6: */
+ E = solve_keplers_equation (ECCENTRICITY, M);
+
+ /* Step 7: */
+ x = sqrt ((1 + ECCENTRICITY)/(1 - ECCENTRICITY)) * tan (E/2);
+
+ /* Step 8, 9 */
+ v = 2 * RADS_TO_DEG (atan (x));
+ NORMALIZE (v);
+
+ /* Step 10 */
+ lambda = v + MU_G;
+ NORMALIZE (lambda);
+
+ /* convert the ecliptic longitude to right ascension and declination */
+ ecliptic_to_equatorial (DEG_TO_RADS (lambda), 0.0, &ra, &dec);
+
+ ra = ra - (G_PI/12) * greenwich_sidereal_time (unix_time);
+ ra = RADS_TO_DEG (ra);
+ dec = RADS_TO_DEG (dec);
+ NORMALIZE (ra);
+ NORMALIZE (dec);
+
+ *lat = dec;
+ *lon = ra;
+}
+
+
+#if 0
+int
+main (int argc, char *argv[])
+{
+ gint i;
+ gint now;
+ GTimeVal timeval;
+ gdouble lat, lon;
+
+ gtk_init (&argc, &argv);
+
+ g_get_current_time (&timeval);
+ now = timeval.tv_sec;
+
+ for (i = 0; i < now; i += 15 * 60)
+ {
+ sun_position (i, &lat, &lon);
+ g_print ("%d: %f %f\n", lat, lon);
+ }
+
+ return 0;
+}
+
+#endif
diff --git a/applets/clock/clock-sunpos.h b/applets/clock/clock-sunpos.h
new file mode 100644
index 00000000..97124505
--- /dev/null
+++ b/applets/clock/clock-sunpos.h
@@ -0,0 +1,8 @@
+#ifndef __CLOCK_SUNPOS_H__
+#define __CLOCK_SUNPOS_H__
+
+#include <glib.h>
+
+void sun_position(time_t unix_time, gdouble *lat, gdouble *lon);
+
+#endif
diff --git a/applets/clock/clock-utils.c b/applets/clock/clock-utils.c
new file mode 100644
index 00000000..c9581e00
--- /dev/null
+++ b/applets/clock/clock-utils.c
@@ -0,0 +1,127 @@
+/*
+ * clock-utils.c
+ *
+ * Copyright (C) 2007 Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Vincent Untz <[email protected]>
+ *
+ * Most of the original code comes from clock.c
+ */
+
+#include "config.h"
+
+#ifdef HAVE_LANGINFO_H
+#include <langinfo.h>
+#endif
+
+#include <glib/gi18n.h>
+
+#include <gtk/gtk.h>
+
+#include "clock.h"
+
+#include "clock-utils.h"
+
+gboolean
+clock_locale_supports_am_pm (void)
+{
+#ifdef HAVE_NL_LANGINFO
+ const char *am;
+
+ am = nl_langinfo (AM_STR);
+ return (am[0] != '\0');
+#else
+ return TRUE;
+#endif
+}
+
+ClockFormat
+clock_locale_format (void)
+{
+ return clock_locale_supports_am_pm () ?
+ CLOCK_FORMAT_12 : CLOCK_FORMAT_24;
+}
+
+void
+clock_utils_display_help (GtkWidget *widget,
+ const char *doc_id,
+ const char *link_id)
+{
+ GError *error = NULL;
+ char *uri;
+
+ if (link_id)
+ uri = g_strdup_printf ("ghelp:%s?%s", doc_id, link_id);
+ else
+ uri = g_strdup_printf ("ghelp:%s", doc_id);
+
+ gtk_show_uri (gtk_widget_get_screen (widget), uri,
+ gtk_get_current_event_time (), &error);
+
+ g_free (uri);
+
+ if (error &&
+ g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_error_free (error);
+ else if (error) {
+ GtkWidget *parent;
+ GtkWidget *dialog;
+ char *primary;
+
+ if (GTK_IS_WINDOW (widget))
+ parent = widget;
+ else
+ parent = NULL;
+
+ primary = g_markup_printf_escaped (
+ _("Could not display help document '%s'"),
+ doc_id);
+ dialog = gtk_message_dialog_new (
+ parent ? GTK_WINDOW (parent) : NULL,
+ GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "%s", primary);
+
+ gtk_message_dialog_format_secondary_text (
+ GTK_MESSAGE_DIALOG (dialog),
+ "%s", error->message);
+
+ g_error_free (error);
+ g_free (primary);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy),
+ NULL);
+
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), CLOCK_ICON);
+ gtk_window_set_screen (GTK_WINDOW (dialog),
+ gtk_widget_get_screen (widget));
+
+ if (parent == NULL) {
+ /* we have no parent window */
+ gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dialog),
+ FALSE);
+ gtk_window_set_title (GTK_WINDOW (dialog),
+ _("Error displaying help document"));
+ }
+
+ gtk_widget_show (dialog);
+ }
+}
diff --git a/applets/clock/clock-utils.h b/applets/clock/clock-utils.h
new file mode 100644
index 00000000..a185d9e2
--- /dev/null
+++ b/applets/clock/clock-utils.h
@@ -0,0 +1,57 @@
+/*
+ * clock-utils.h
+ *
+ * Copyright (C) 2007 Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Vincent Untz <[email protected]>
+ *
+ * Most of the original code comes from clock.c
+ */
+
+#ifndef __CLOCK_UTILS_H__
+#define __CLOCK_UTILS_H__
+
+#include <gtk/gtk.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Needs to match the indices in the combo of the prefs dialog */
+typedef enum {
+ CLOCK_FORMAT_INVALID = 0,
+ CLOCK_FORMAT_12,
+ CLOCK_FORMAT_24,
+ CLOCK_FORMAT_UNIX,
+ CLOCK_FORMAT_INTERNET,
+ CLOCK_FORMAT_CUSTOM
+} ClockFormat;
+
+gboolean clock_locale_supports_am_pm (void);
+ClockFormat clock_locale_format (void);
+
+void clock_utils_display_help (GtkWidget *widget,
+ const char *doc_id,
+ const char *link_id);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CLOCK_UTILS_H__ */
diff --git a/applets/clock/clock.c b/applets/clock/clock.c
new file mode 100644
index 00000000..b4846009
--- /dev/null
+++ b/applets/clock/clock.c
@@ -0,0 +1,3745 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+/*
+ * clock.c: the MATE clock applet
+ *
+ * Copyright (C) 1997-2003 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Miguel de Icaza
+ * Frederico Mena
+ * Stuart Parmenter
+ * Alexander Larsson
+ * George Lebl
+ * Gediminas Paulauskas
+ * Mark McLoughlin
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <string.h>
+#include <time.h>
+#include <sys/time.h>
+#include <math.h>
+#include <locale.h>
+
+#include <mate-panel-applet.h>
+#include <mate-panel-applet-mateconf.h>
+
+#include <glib/gi18n.h>
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <gdk/gdkx.h>
+#include <mateconf/mateconf-client.h>
+
+#include <libmateweather/mateweather-prefs.h>
+#include <libmateweather/mateweather-xml.h>
+#include <libmateweather/location-entry.h>
+#include <libmateweather/timezone-menu.h>
+
+#ifdef HAVE_LIBECAL
+#include <libedataserverui/e-passwords.h>
+#endif
+
+#include "clock.h"
+
+#include "calendar-window.h"
+#include "clock-location.h"
+#include "clock-location-tile.h"
+#include "clock-map.h"
+#include "clock-utils.h"
+#include "set-timezone.h"
+#include "system-timezone.h"
+
+#define INTERNETSECOND (864)
+#define INTERNETBEAT (86400)
+
+#define NEVER_SENSITIVE "never_sensitive"
+
+#define N_MATECONF_PREFS 11 /* Keep this in sync with the number of keys below! */
+#define KEY_FORMAT "format"
+#define KEY_SHOW_SECONDS "show_seconds"
+#define KEY_SHOW_DATE "show_date"
+#define KEY_SHOW_WEATHER "show_weather"
+#define KEY_SHOW_TEMPERATURE "show_temperature"
+#define KEY_CUSTOM_FORMAT "custom_format"
+#define KEY_SHOW_WEEK "show_week_numbers"
+#define KEY_CITIES "cities"
+#define KEY_TEMPERATURE_UNIT "temperature_unit"
+#define KEY_SPEED_UNIT "speed_unit"
+
+static MateConfEnumStringPair format_type_enum_map [] = {
+ { CLOCK_FORMAT_12, "12-hour" },
+ { CLOCK_FORMAT_24, "24-hour" },
+ { CLOCK_FORMAT_UNIX, "unix" },
+ { CLOCK_FORMAT_INTERNET, "internet" },
+ { CLOCK_FORMAT_CUSTOM, "custom" },
+ { 0, NULL }
+};
+
+enum {
+ COL_CITY_NAME = 0,
+ COL_CITY_TZ,
+ COL_CITY_LOC,
+ COL_CITY_LAST
+};
+
+typedef struct _ClockData ClockData;
+
+struct _ClockData {
+ /* widgets */
+ GtkWidget *applet;
+
+ GtkWidget *panel_button; /* main toggle button for the whole clock */
+
+ GtkWidget *main_obox; /* orientable box inside panel_button */
+ GtkWidget *weather_obox; /* orientable box for the weather widgets */
+
+ GtkWidget *clockw; /* main label for the date/time display */
+
+ GtkWidget *panel_weather_icon;
+ GtkWidget *panel_temperature_label;
+
+ GtkWidget *props;
+ GtkWidget *calendar_popup;
+
+ GtkWidget *clock_vbox;
+ GtkSizeGroup *clock_group;
+
+ GtkBuilder *builder;
+
+ /* Preferences dialog */
+ GtkWidget *prefs_window;
+ GtkTreeView *prefs_locations;
+
+ GtkWidget *prefs_location_add_button;
+ GtkWidget *prefs_location_edit_button;
+ GtkWidget *prefs_location_remove_button;
+
+ MateWeatherLocationEntry *location_entry;
+ MateWeatherTimezoneMenu *zone_combo;
+
+ GtkWidget *time_settings_button;
+ GtkWidget *calendar;
+ GtkWidget *hours_spin;
+ GtkWidget *minutes_spin;
+ GtkWidget *seconds_spin;
+ GtkWidget *set_time_button;
+
+ GtkListStore *cities_store;
+ GtkWidget *cities_section;
+ GtkWidget *map_section;
+ GtkWidget *map_widget;
+
+ /* Window to set the time */
+ GtkWidget *set_time_window;
+ GtkWidget *current_time_label;
+
+ /* preferences */
+ ClockFormat format;
+ char *custom_format;
+ gboolean showseconds;
+ gboolean showdate;
+ gboolean showweek;
+ gboolean show_weather;
+ gboolean show_temperature;
+
+ gboolean use_temperature_default;
+ gboolean use_speed_default;
+ TempUnit temperature_unit;
+ SpeedUnit speed_unit;
+
+ /* Locations */
+ GList *locations;
+ GList *location_tiles;
+
+ /* runtime data */
+ time_t current_time;
+ char *timeformat;
+ guint timeout;
+ MatePanelAppletOrient orient;
+ int size;
+ GtkAllocation old_allocation;
+
+ SystemTimezone *systz;
+
+ int fixed_width;
+ int fixed_height;
+
+ GtkWidget *showseconds_check;
+ GtkWidget *showdate_check;
+ GtkWidget *custom_hbox;
+ GtkWidget *custom_label;
+ GtkWidget *custom_entry;
+ gboolean custom_format_shown;
+
+ gboolean can_handle_format_12;
+
+ guint listeners [N_MATECONF_PREFS];
+};
+
+/* Used to count the number of clock instances. It's there to know when we
+ * should free resources that are shared. */
+static int clock_numbers = 0;
+
+static void update_clock (ClockData * cd);
+static void update_tooltip (ClockData * cd);
+static void update_panel_weather (ClockData *cd);
+static int clock_timeout_callback (gpointer data);
+static float get_itime (time_t current_time);
+
+static void set_atk_name_description (GtkWidget *widget,
+ const char *name,
+ const char *desc);
+static void verb_display_properties_dialog (GtkAction *action,
+ ClockData *cd);
+
+static void display_properties_dialog (ClockData *cd,
+ gboolean start_in_locations_page);
+static void display_help_dialog (GtkAction *action,
+ ClockData *cd);
+static void display_about_dialog (GtkAction *action,
+ ClockData *cd);
+static void position_calendar_popup (ClockData *cd);
+static void update_orient (ClockData *cd);
+static void applet_change_orient (MatePanelApplet *applet,
+ MatePanelAppletOrient orient,
+ ClockData *cd);
+
+static void edit_hide (GtkWidget *unused, ClockData *cd);
+static gboolean edit_delete (GtkWidget *unused, GdkEvent *event, ClockData *cd);
+static void save_cities_store (ClockData *cd);
+
+/* ClockBox, an instantiable GtkBox */
+
+typedef GtkBox ClockBox;
+typedef GtkBoxClass ClockBoxClass;
+
+static GType clock_box_get_type (void);
+
+G_DEFINE_TYPE (ClockBox, clock_box, GTK_TYPE_BOX)
+
+static void
+clock_box_init (ClockBox *box)
+{
+}
+
+static void
+clock_box_class_init (ClockBoxClass *klass)
+{
+}
+
+/* Clock */
+
+static inline GtkWidget *
+_clock_get_widget (ClockData *cd,
+ const char *name)
+{
+ return GTK_WIDGET (gtk_builder_get_object (cd->builder, name));
+}
+
+static void
+unfix_size (ClockData *cd)
+{
+ cd->fixed_width = -1;
+ cd->fixed_height = -1;
+ gtk_widget_queue_resize (cd->panel_button);
+}
+
+static int
+calculate_minimum_width (GtkWidget *widget,
+ const gchar *text)
+{
+ PangoContext *context;
+ PangoLayout *layout;
+ int width, height;
+ int focus_width = 0;
+ int focus_pad = 0;
+
+ context = gtk_widget_get_pango_context (widget);
+
+ layout = pango_layout_new (context);
+ pango_layout_set_alignment (layout, PANGO_ALIGN_LEFT);
+ pango_layout_set_text (layout, text, -1);
+ pango_layout_get_pixel_size (layout, &width, &height);
+ g_object_unref (G_OBJECT (layout));
+ layout = NULL;
+
+ gtk_widget_style_get (widget,
+ "focus-line-width", &focus_width,
+ "focus-padding", &focus_pad,
+ NULL);
+
+ width += 2 * (focus_width + focus_pad + gtk_widget_get_style (widget)->xthickness);
+
+ return width;
+}
+
+static void
+clock_set_timeout (ClockData *cd,
+ time_t now)
+{
+ int timeouttime;
+
+ if (cd->format == CLOCK_FORMAT_INTERNET) {
+ int itime_ms;
+
+ itime_ms = ((unsigned int) (get_itime (now) * 1000));
+
+ if (!cd->showseconds)
+ timeouttime = (999 - itime_ms % 1000) * 86.4 + 1;
+ else {
+ struct timeval tv;
+ gettimeofday (&tv, NULL);
+ itime_ms += (tv.tv_usec * 86.4) / 1000;
+ timeouttime = ((999 - itime_ms % 1000) * 86.4) / 100 + 1;
+ }
+ } else {
+ struct timeval tv;
+
+ gettimeofday (&tv, NULL);
+ timeouttime = (G_USEC_PER_SEC - tv.tv_usec)/1000+1;
+
+ /* timeout of one minute if we don't care about the seconds */
+ if (cd->format != CLOCK_FORMAT_UNIX &&
+ !cd->showseconds &&
+ (!cd->set_time_window || !gtk_widget_get_visible (cd->set_time_window)))
+ timeouttime += 1000 * (59 - now % 60);
+ }
+
+ cd->timeout = g_timeout_add (timeouttime,
+ clock_timeout_callback,
+ cd);
+}
+
+static int
+clock_timeout_callback (gpointer data)
+{
+ ClockData *cd = data;
+ time_t new_time;
+
+ time (&new_time);
+
+ if (!cd->showseconds &&
+ (!cd->set_time_window || !gtk_widget_get_visible (cd->set_time_window)) &&
+ cd->format != CLOCK_FORMAT_UNIX &&
+ cd->format != CLOCK_FORMAT_CUSTOM) {
+ if (cd->format == CLOCK_FORMAT_INTERNET &&
+ (unsigned int)get_itime (new_time) !=
+ (unsigned int)get_itime (cd->current_time)) {
+ update_clock (cd);
+ } else if ((cd->format == CLOCK_FORMAT_12 ||
+ cd->format == CLOCK_FORMAT_24) &&
+ new_time / 60 != cd->current_time / 60) {
+ update_clock (cd);
+ }
+ } else {
+ update_clock (cd);
+ }
+
+ clock_set_timeout (cd, new_time);
+
+ return FALSE;
+}
+
+static float
+get_itime (time_t current_time)
+{
+ struct tm *tm;
+ float itime;
+ time_t bmt;
+
+ /* BMT (Biel Mean Time) is GMT+1 */
+ bmt = current_time + 3600;
+ tm = gmtime (&bmt);
+ itime = (tm->tm_hour*3600.0 + tm->tm_min*60.0 + tm->tm_sec)/86.4;
+
+ return itime;
+}
+
+/* adapted from panel-toplevel.c */
+static int
+calculate_minimum_height (GtkWidget *widget,
+ MatePanelAppletOrient orientation)
+{
+ GtkStyle *style;
+ PangoContext *context;
+ PangoFontMetrics *metrics;
+ int focus_width = 0;
+ int focus_pad = 0;
+ int ascent;
+ int descent;
+ int thickness;
+
+ style = gtk_widget_get_style (widget);
+ context = gtk_widget_get_pango_context (widget);
+ metrics = pango_context_get_metrics (context,
+ style->font_desc,
+ pango_context_get_language (context));
+
+ ascent = pango_font_metrics_get_ascent (metrics);
+ descent = pango_font_metrics_get_descent (metrics);
+
+ pango_font_metrics_unref (metrics);
+
+ gtk_widget_style_get (widget,
+ "focus-line-width", &focus_width,
+ "focus-padding", &focus_pad,
+ NULL);
+
+ if (orientation == MATE_PANEL_APPLET_ORIENT_UP
+ || orientation == MATE_PANEL_APPLET_ORIENT_DOWN) {
+ thickness = style->ythickness;
+ } else {
+ thickness = style->xthickness;
+ }
+
+ return PANGO_PIXELS (ascent + descent) + 2 * (focus_width + focus_pad + thickness);
+}
+
+static gboolean
+use_two_line_format (ClockData *cd)
+{
+ if (cd->size >= 2 * calculate_minimum_height (cd->panel_button, cd->orient))
+ return TRUE;
+
+ return FALSE;
+}
+
+static char *
+get_updated_timeformat (ClockData *cd)
+{
+ /* Show date in another line if panel is vertical, or
+ * horizontal but large enough to hold two lines of text
+ */
+ char *result;
+ const char *time_format;
+ const char *date_format;
+ char *clock_format;
+
+ if (cd->format == CLOCK_FORMAT_12)
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 12-hours format (eg, like
+ * in the US: 8:10 am). The %p expands to am/pm. */
+ time_format = cd->showseconds ? _("%l:%M:%S %p") : _("%l:%M %p");
+ else
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 24-hours format (eg, like
+ * in France: 20:10). */
+ time_format = cd->showseconds ? _("%H:%M:%S") : _("%H:%M");
+
+ if (!cd->showdate)
+ clock_format = g_strdup (time_format);
+
+ else {
+ /* Translators: This is a strftime format string.
+ * It is used to display the date. Replace %e with %d if, when
+ * the day of the month as a decimal number is a single digit,
+ * it should begin with a 0 in your locale (e.g. "May 01"
+ * instead of "May 1"). */
+ date_format = _("%a %b %e");
+
+ if (use_two_line_format (cd))
+ /* translators: reverse the order of these arguments
+ * if the time should come before the
+ * date on a clock in your locale.
+ */
+ clock_format = g_strdup_printf (_("%1$s\n%2$s"),
+ date_format,
+ time_format);
+ else
+ /* translators: reverse the order of these arguments
+ * if the time should come before the
+ * date on a clock in your locale.
+ */
+ clock_format = g_strdup_printf (_("%1$s, %2$s"),
+ date_format,
+ time_format);
+ }
+
+ result = g_locale_from_utf8 (clock_format, -1, NULL, NULL, NULL);
+ g_free (clock_format);
+
+ /* let's be paranoid */
+ if (!result)
+ result = g_strdup ("???");
+
+ return result;
+}
+
+static void
+update_timeformat (ClockData *cd)
+{
+ g_free (cd->timeformat);
+ cd->timeformat = get_updated_timeformat (cd);
+}
+
+/* sets accessible name and description for the widget */
+static void
+set_atk_name_description (GtkWidget *widget,
+ const char *name,
+ const char *desc)
+{
+ AtkObject *obj;
+ obj = gtk_widget_get_accessible (widget);
+
+ /* return if gail is not loaded */
+ if (!GTK_IS_ACCESSIBLE (obj))
+ return;
+
+ if (desc != NULL)
+ atk_object_set_description (obj, desc);
+ if (name != NULL)
+ atk_object_set_name (obj, name);
+}
+
+static void
+update_location_tiles (ClockData *cd)
+{
+ GList *l;
+
+ for (l = cd->location_tiles; l; l = l->next) {
+ ClockLocationTile *tile;
+
+ tile = CLOCK_LOCATION_TILE (l->data);
+ clock_location_tile_refresh (tile, FALSE);
+ }
+}
+
+static char *
+format_time (ClockData *cd)
+{
+ struct tm *tm;
+ char hour[256];
+ char *utf8;
+
+ utf8 = NULL;
+
+ tm = localtime (&cd->current_time);
+
+ if (cd->format == CLOCK_FORMAT_UNIX) {
+ if (use_two_line_format (cd)) {
+ utf8 = g_strdup_printf ("%lu\n%05lu",
+ (unsigned long)(cd->current_time / 100000L),
+ (unsigned long)(cd->current_time % 100000L));
+ } else {
+ utf8 = g_strdup_printf ("%lu",
+ (unsigned long)cd->current_time);
+ }
+ } else if (cd->format == CLOCK_FORMAT_INTERNET) {
+ float itime = get_itime (cd->current_time);
+ if (cd->showseconds)
+ utf8 = g_strdup_printf ("@%3.2f", itime);
+ else
+ utf8 = g_strdup_printf ("@%3d", (unsigned int) itime);
+ } else if (cd->format == CLOCK_FORMAT_CUSTOM) {
+ char *timeformat = g_locale_from_utf8 (cd->custom_format, -1,
+ NULL, NULL, NULL);
+ if (!timeformat)
+ strcpy (hour, "???");
+ else if (strftime (hour, sizeof (hour), timeformat, tm) <= 0)
+ strcpy (hour, "???");
+ g_free (timeformat);
+
+ utf8 = g_locale_to_utf8 (hour, -1, NULL, NULL, NULL);
+ } else {
+ if (strftime (hour, sizeof (hour), cd->timeformat, tm) <= 0)
+ strcpy (hour, "???");
+
+ utf8 = g_locale_to_utf8 (hour, -1, NULL, NULL, NULL);
+ }
+
+ if (!utf8)
+ utf8 = g_strdup (hour);
+
+ return utf8;
+}
+
+static gchar *
+format_time_24 (ClockData *cd)
+{
+ struct tm *tm;
+ gchar buf[128];
+
+ tm = localtime (&cd->current_time);
+ strftime (buf, sizeof (buf) - 1, "%k:%M:%S", tm);
+ return g_locale_to_utf8 (buf, -1, NULL, NULL, NULL);
+}
+
+static void
+update_clock (ClockData * cd)
+{
+ gboolean use_markup;
+ char *utf8;
+
+ use_markup = FALSE;
+
+ time (&cd->current_time);
+ utf8 = format_time (cd);
+
+ use_markup = FALSE;
+ if (pango_parse_markup (utf8, -1, 0, NULL, NULL, NULL, NULL))
+ use_markup = TRUE;
+
+ if (use_markup)
+ gtk_label_set_markup (GTK_LABEL (cd->clockw), utf8);
+ else
+ gtk_label_set_text (GTK_LABEL (cd->clockw), utf8);
+
+ g_free (utf8);
+
+ update_orient (cd);
+ gtk_widget_queue_resize (cd->panel_button);
+
+ update_tooltip (cd);
+ update_location_tiles (cd);
+
+ if (cd->map_widget && cd->calendar_popup && gtk_widget_get_visible (cd->calendar_popup))
+ clock_map_update_time (CLOCK_MAP (cd->map_widget));
+
+ if (cd->current_time_label &&
+ gtk_widget_get_visible (cd->current_time_label)) {
+ utf8 = format_time_24 (cd);
+ gtk_label_set_text (GTK_LABEL (cd->current_time_label), utf8);
+ g_free (utf8);
+ }
+}
+
+static void
+update_tooltip (ClockData * cd)
+{
+ if (!cd->showdate) {
+ struct tm *tm;
+ char date[256];
+ char *utf8, *loc;
+ char *zone;
+ time_t now_t;
+ struct tm now;
+ char *tip;
+
+ tm = localtime (&cd->current_time);
+
+ utf8 = NULL;
+
+ /* Show date in tooltip. */
+ /* Translators: This is a strftime format string.
+ * It is used to display a date. Please leave "%%s" as it is:
+ * it will be used to insert the timezone name later. */
+ loc = g_locale_from_utf8 (_("%A %B %d (%%s)"), -1, NULL, NULL, NULL);
+ if (!loc)
+ strcpy (date, "???");
+ else if (strftime (date, sizeof (date), loc, tm) <= 0)
+ strcpy (date, "???");
+ g_free (loc);
+
+ utf8 = g_locale_to_utf8 (date, -1, NULL, NULL, NULL);
+
+ /* Add the timezone name */
+
+ tzset ();
+ time (&now_t);
+ localtime_r (&now_t, &now);
+
+ if (now.tm_isdst > 0) {
+ zone = tzname[1];
+ } else {
+ zone = tzname[0];
+ }
+
+ tip = g_strdup_printf (utf8, zone);
+
+ gtk_widget_set_tooltip_text (cd->panel_button, tip);
+ g_free (utf8);
+ g_free (tip);
+ } else {
+#ifdef HAVE_LIBECAL
+ if (cd->calendar_popup)
+ gtk_widget_set_tooltip_text (cd->panel_button,
+ _("Click to hide your appointments and tasks"));
+ else
+ gtk_widget_set_tooltip_text (cd->panel_button,
+ _("Click to view your appointments and tasks"));
+#else
+ if (cd->calendar_popup)
+ gtk_widget_set_tooltip_text (cd->panel_button,
+ _("Click to hide month calendar"));
+ else
+ gtk_widget_set_tooltip_text (cd->panel_button,
+ _("Click to view month calendar"));
+#endif
+ }
+}
+
+static void
+refresh_clock (ClockData *cd)
+{
+ unfix_size (cd);
+ update_clock (cd);
+}
+
+static void
+refresh_clock_timeout(ClockData *cd)
+{
+ unfix_size (cd);
+
+ update_timeformat (cd);
+
+ if (cd->timeout)
+ g_source_remove (cd->timeout);
+
+ update_clock (cd);
+
+ clock_set_timeout (cd, cd->current_time);
+}
+
+/**
+ * This is like refresh_clock_timeout(), except that we only care about whether
+ * the time actually changed. We don't care about the format.
+ */
+static void
+refresh_click_timeout_time_only (ClockData *cd)
+{
+ if (cd->timeout)
+ g_source_remove (cd->timeout);
+ clock_timeout_callback (cd);
+}
+
+static void
+free_locations (ClockData *cd)
+{
+ GList *l;
+
+ for (l = cd->locations; l; l = l->next)
+ g_object_unref (l->data);
+
+ g_list_free (cd->locations);
+ cd->locations = NULL;
+}
+
+static void
+destroy_clock (GtkWidget * widget, ClockData *cd)
+{
+ MateConfClient *client;
+ int i;
+
+ client = mateconf_client_get_default ();
+
+ for (i = 0; i < N_MATECONF_PREFS; i++)
+ mateconf_client_notify_remove (
+ client, cd->listeners [i]);
+
+ g_object_unref (G_OBJECT (client));
+
+ if (cd->timeout)
+ g_source_remove (cd->timeout);
+ cd->timeout = 0;
+
+ if (cd->props)
+ gtk_widget_destroy (cd->props);
+ cd->props = NULL;
+
+ if (cd->calendar_popup)
+ gtk_widget_destroy (cd->calendar_popup);
+ cd->calendar_popup = NULL;
+
+ g_free (cd->timeformat);
+ g_free (cd->custom_format);
+
+ free_locations (cd);
+
+ g_list_free (cd->location_tiles);
+ cd->location_tiles = NULL;
+
+ if (cd->systz) {
+ g_object_unref (cd->systz);
+ cd->systz = NULL;
+ }
+
+ if (cd->cities_store) {
+ g_object_unref (cd->cities_store);
+ cd->cities_store = NULL;
+ }
+
+ if (cd->builder) {
+ g_object_unref (cd->builder);
+ cd->builder = NULL;
+ }
+
+ g_free (cd);
+
+#ifdef HAVE_LIBECAL
+ if (clock_numbers > 0) {
+ e_passwords_shutdown ();
+ clock_numbers--;
+ }
+#endif
+}
+
+static gboolean
+close_on_escape (GtkWidget *widget,
+ GdkEventKey *event,
+ GtkToggleButton *toggle_button)
+{
+ if (event->keyval == GDK_Escape) {
+ gtk_toggle_button_set_active (toggle_button, FALSE);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+delete_event (GtkWidget *widget,
+ GdkEvent *event,
+ GtkToggleButton *toggle_button)
+{
+ gtk_toggle_button_set_active (toggle_button, FALSE);
+ return TRUE;
+}
+
+static void
+edit_locations_cb (CalendarWindow *calwin, gpointer data)
+{
+ ClockData *cd;
+
+ cd = data;
+
+ display_properties_dialog (cd, TRUE);
+}
+
+static GtkWidget *
+create_calendar (ClockData *cd)
+{
+ GtkWidget *window;
+ char *prefs_dir;
+
+ prefs_dir = mate_panel_applet_get_preferences_key (MATE_PANEL_APPLET (cd->applet));
+ window = calendar_window_new (&cd->current_time,
+ prefs_dir,
+ cd->orient == MATE_PANEL_APPLET_ORIENT_UP);
+ g_free (prefs_dir);
+
+ calendar_window_set_show_weeks (CALENDAR_WINDOW (window),
+ cd->showweek);
+ calendar_window_set_time_format (CALENDAR_WINDOW (window),
+ cd->format);
+
+ gtk_window_set_screen (GTK_WINDOW (window),
+ gtk_widget_get_screen (cd->applet));
+
+ g_signal_connect (window, "edit-locations",
+ G_CALLBACK (edit_locations_cb), cd);
+
+ g_signal_connect (window, "delete_event",
+ G_CALLBACK (delete_event), cd->panel_button);
+ g_signal_connect (window, "key_press_event",
+ G_CALLBACK (close_on_escape), cd->panel_button);
+
+ return window;
+}
+
+static void
+position_calendar_popup (ClockData *cd)
+{
+ GtkRequisition req;
+ GtkAllocation allocation;
+ GdkScreen *screen;
+ GdkRectangle monitor;
+ GdkGravity gravity = GDK_GRAVITY_NORTH_WEST;
+ int button_w, button_h;
+ int x, y;
+ int w, h;
+ int i, n;
+ gboolean found_monitor = FALSE;
+
+ /* Get root origin of the toggle button, and position above that. */
+ gdk_window_get_origin (gtk_widget_get_window (cd->panel_button),
+ &x, &y);
+
+ gtk_window_get_size (GTK_WINDOW (cd->calendar_popup), &w, &h);
+ gtk_widget_size_request (cd->calendar_popup, &req);
+ w = req.width;
+ h = req.height;
+
+ gtk_widget_get_allocation (cd->panel_button, &allocation);
+ button_w = allocation.width;
+ button_h = allocation.height;
+
+ screen = gtk_window_get_screen (GTK_WINDOW (cd->calendar_popup));
+
+ n = gdk_screen_get_n_monitors (screen);
+ for (i = 0; i < n; i++) {
+ gdk_screen_get_monitor_geometry (screen, i, &monitor);
+ if (x >= monitor.x && x <= monitor.x + monitor.width &&
+ y >= monitor.y && y <= monitor.y + monitor.height) {
+ found_monitor = TRUE;
+ break;
+ }
+ }
+
+ if (!found_monitor) {
+ /* eek, we should be on one of those xinerama
+ monitors */
+ monitor.x = 0;
+ monitor.y = 0;
+ monitor.width = gdk_screen_get_width (screen);
+ monitor.height = gdk_screen_get_height (screen);
+ }
+
+ /* Based on panel orientation, position the popup.
+ * Ignore window gravity since the window is undecorated.
+ * The orientations are all named backward from what
+ * I expected.
+ */
+ switch (cd->orient) {
+ case MATE_PANEL_APPLET_ORIENT_RIGHT:
+ x += button_w;
+ if ((y + h) > monitor.y + monitor.height)
+ y -= (y + h) - (monitor.y + monitor.height);
+
+ if ((y + h) > (monitor.height / 2))
+ gravity = GDK_GRAVITY_SOUTH_WEST;
+ else
+ gravity = GDK_GRAVITY_NORTH_WEST;
+
+ break;
+ case MATE_PANEL_APPLET_ORIENT_LEFT:
+ x -= w;
+ if ((y + h) > monitor.y + monitor.height)
+ y -= (y + h) - (monitor.y + monitor.height);
+
+ if ((y + h) > (monitor.height / 2))
+ gravity = GDK_GRAVITY_SOUTH_EAST;
+ else
+ gravity = GDK_GRAVITY_NORTH_EAST;
+
+ break;
+ case MATE_PANEL_APPLET_ORIENT_DOWN:
+ y += button_h;
+ if ((x + w) > monitor.x + monitor.width)
+ x -= (x + w) - (monitor.x + monitor.width);
+
+ gravity = GDK_GRAVITY_NORTH_WEST;
+
+ break;
+ case MATE_PANEL_APPLET_ORIENT_UP:
+ y -= h;
+ if ((x + w) > monitor.x + monitor.width)
+ x -= (x + w) - (monitor.x + monitor.width);
+
+ gravity = GDK_GRAVITY_SOUTH_WEST;
+
+ break;
+ }
+
+ gtk_window_move (GTK_WINDOW (cd->calendar_popup), x, y);
+ gtk_window_set_gravity (GTK_WINDOW (cd->calendar_popup), gravity);
+}
+
+static void
+add_to_group (GtkWidget *child, gpointer data)
+{
+ GtkSizeGroup *group = data;
+
+ gtk_size_group_add_widget (group, child);
+}
+
+static void
+create_clock_window (ClockData *cd)
+{
+ GtkWidget *locations_box;
+
+ locations_box = calendar_window_get_locations_box (CALENDAR_WINDOW (cd->calendar_popup));
+ gtk_widget_show (locations_box);
+
+ cd->clock_vbox = gtk_vbox_new (FALSE, 6);
+ gtk_container_add (GTK_CONTAINER (locations_box), cd->clock_vbox);
+
+ cd->clock_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ gtk_size_group_set_ignore_hidden (cd->clock_group, FALSE);
+
+ gtk_container_foreach (GTK_CONTAINER (locations_box),
+ (GtkCallback) add_to_group,
+ cd->clock_group);
+}
+
+static gint
+sort_locations_by_name (gconstpointer a, gconstpointer b)
+{
+ ClockLocation *loc_a = (ClockLocation *) a;
+ ClockLocation *loc_b = (ClockLocation *) b;
+
+ const char *name_a = clock_location_get_display_name (loc_a);
+ const char *name_b = clock_location_get_display_name (loc_b);
+
+ return strcmp (name_a, name_b);
+}
+
+static void
+create_cities_store (ClockData *cd)
+{
+ GtkTreeIter iter;
+ GList *cities = cd->locations;
+ GList *list = NULL;
+
+ if (cd->cities_store) {
+ g_object_unref (G_OBJECT (cd->cities_store));
+ cd->cities_store = NULL;
+ }
+
+ /* City name, Timezone name, Coordinates in lat/long */
+ cd->cities_store = g_object_ref (gtk_list_store_new (COL_CITY_LAST,
+ G_TYPE_STRING, /* COL_CITY_NAME */
+ G_TYPE_STRING, /* COL_CITY_TZ */
+ CLOCK_LOCATION_TYPE)); /* COL_CITY_LOC */
+
+ list = g_list_copy (cities);
+ list = g_list_sort (list, sort_locations_by_name);
+
+ while (list) {
+ ClockLocation *loc = CLOCK_LOCATION (list->data);
+
+ gtk_list_store_append (cd->cities_store, &iter);
+ gtk_list_store_set (cd->cities_store, &iter,
+ COL_CITY_NAME, clock_location_get_display_name (loc),
+ /* FIXME: translate the timezone */
+ COL_CITY_TZ, clock_location_get_timezone (loc),
+ COL_CITY_LOC, loc,
+ -1);
+
+ list = list->next;
+ }
+
+
+ if (cd->prefs_window) {
+ GtkWidget *widget = _clock_get_widget (cd, "cities_list");
+ gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
+ GTK_TREE_MODEL (cd->cities_store));
+ }
+}
+
+static gint
+sort_locations_by_time (gconstpointer a, gconstpointer b)
+{
+ ClockLocation *loc_a = (ClockLocation *) a;
+ ClockLocation *loc_b = (ClockLocation *) b;
+
+ struct tm tm_a;
+ struct tm tm_b;
+ gint ret;
+
+ clock_location_localtime (loc_a, &tm_a);
+ clock_location_localtime (loc_b, &tm_b);
+
+ ret = (tm_a.tm_year == tm_b.tm_year) ? 0 : 1;
+ if (ret) {
+ return (tm_a.tm_year < tm_b.tm_year) ? -1 : 1;
+ }
+
+ ret = (tm_a.tm_mon == tm_b.tm_mon) ? 0 : 1;
+ if (ret) {
+ return (tm_a.tm_mon < tm_b.tm_mon) ? -1 : 1;
+ }
+
+ ret = (tm_a.tm_mday == tm_b.tm_mday) ? 0 : 1;
+ if (ret) {
+ return (tm_a.tm_mday < tm_b.tm_mday) ? -1 : 1;
+ }
+
+ ret = (tm_a.tm_hour == tm_b.tm_hour) ? 0 : 1;
+ if (ret) {
+ return (tm_a.tm_hour < tm_b.tm_hour) ? -1 : 1;
+ }
+
+ ret = (tm_a.tm_min == tm_b.tm_min) ? 0 : 1;
+ if (ret) {
+ return (tm_a.tm_min < tm_b.tm_min) ? -1 : 1;
+ }
+
+ ret = (tm_a.tm_sec == tm_b.tm_sec) ? 0 : 1;
+ if (ret) {
+ return (tm_a.tm_sec < tm_b.tm_sec) ? -1 : 1;
+ }
+
+ return ret;
+}
+
+static void
+location_tile_pressed_cb (ClockLocationTile *tile, gpointer data)
+{
+ ClockData *cd = data;
+ ClockLocation *loc;
+
+ loc = clock_location_tile_get_location (tile);
+
+ clock_map_blink_location (CLOCK_MAP (cd->map_widget), loc);
+
+ g_object_unref (loc);
+}
+
+static ClockFormat
+location_tile_need_clock_format_cb(ClockLocationTile *tile, gpointer data)
+{
+ ClockData *cd = data;
+
+ return cd->format;
+}
+
+static void
+create_cities_section (ClockData *cd)
+{
+ GList *node;
+ ClockLocationTile *city;
+ GList *cities;
+
+ if (cd->cities_section) {
+ gtk_widget_destroy (cd->cities_section);
+ cd->cities_section = NULL;
+ }
+
+ g_list_free (cd->location_tiles);
+ cd->location_tiles = NULL;
+
+ cd->cities_section = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (cd->cities_section), 0);
+
+ cities = cd->locations;
+ if (g_list_length (cities) == 0) {
+ /* if the list is empty, don't bother showing the
+ cities section */
+ gtk_widget_hide (cd->cities_section);
+ return;
+ }
+
+ /* Copy the existing list, so we can sort it nondestructively */
+ node = g_list_copy (cities);
+ node = g_list_sort (node, sort_locations_by_time);
+ node = g_list_reverse (node);
+
+ while (node) {
+ ClockLocation *loc = node->data;
+
+ city = clock_location_tile_new (loc, CLOCK_FACE_SMALL);
+ g_signal_connect (city, "tile-pressed",
+ G_CALLBACK (location_tile_pressed_cb), cd);
+ g_signal_connect (city, "need-clock-format",
+ G_CALLBACK (location_tile_need_clock_format_cb), cd);
+
+ gtk_box_pack_start (GTK_BOX (cd->cities_section),
+ GTK_WIDGET (city),
+ FALSE, FALSE, 0);
+
+ cd->location_tiles = g_list_prepend (cd->location_tiles, city);
+
+ clock_location_tile_refresh (city, TRUE);
+
+ node = g_list_next (node);
+ }
+
+ g_list_free (node);
+
+ gtk_box_pack_end (GTK_BOX (cd->clock_vbox),
+ cd->cities_section, FALSE, FALSE, 0);
+
+ gtk_widget_show_all (cd->cities_section);
+}
+
+static GList *
+map_need_locations_cb (ClockMap *map, gpointer data)
+{
+ ClockData *cd = data;
+
+ return cd->locations;
+}
+
+static void
+create_map_section (ClockData *cd)
+{
+ ClockMap *map;
+
+ if (cd->map_widget) {
+ gtk_widget_destroy (GTK_WIDGET (cd->map_section));
+ cd->map_widget = NULL;
+ }
+
+ map = clock_map_new ();
+ g_signal_connect (map, "need-locations",
+ G_CALLBACK (map_need_locations_cb), cd);
+
+ cd->map_section = gtk_alignment_new (0, 0, 1, 1);
+ cd->map_widget = GTK_WIDGET (map);
+
+ gtk_container_add (GTK_CONTAINER (cd->map_section), cd->map_widget);
+
+ gtk_alignment_set_padding (GTK_ALIGNMENT (cd->map_section), 1, 1, 1, 1);
+
+ gtk_box_pack_start (GTK_BOX (cd->clock_vbox), cd->map_section, FALSE, FALSE, 0);
+ gtk_widget_show (cd->map_widget);
+ gtk_widget_show (cd->map_section);
+}
+
+static void
+update_calendar_popup (ClockData *cd)
+{
+ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cd->panel_button))) {
+ if (cd->calendar_popup) {
+ gtk_widget_destroy (cd->calendar_popup);
+ cd->calendar_popup = NULL;
+ cd->cities_section = NULL;
+ cd->map_section = NULL;
+ cd->map_widget = NULL;
+ cd->clock_vbox = NULL;
+
+ g_list_free (cd->location_tiles);
+ cd->location_tiles = NULL;
+ }
+ update_tooltip (cd);
+ return;
+ }
+
+ if (!cd->calendar_popup) {
+ cd->calendar_popup = create_calendar (cd);
+ g_object_add_weak_pointer (G_OBJECT (cd->calendar_popup),
+ (gpointer *) &cd->calendar_popup);
+ update_tooltip (cd);
+
+ create_clock_window (cd);
+ create_cities_store (cd);
+ create_cities_section (cd);
+ create_map_section (cd);
+ }
+
+ if (cd->calendar_popup && gtk_widget_get_realized (cd->panel_button)) {
+ calendar_window_refresh (CALENDAR_WINDOW (cd->calendar_popup));
+ position_calendar_popup (cd);
+ gtk_window_present (GTK_WINDOW (cd->calendar_popup));
+ }
+}
+
+static void
+toggle_calendar (GtkWidget *button,
+ ClockData *cd)
+{
+ /* if time is wrong, the user might try to fix it by clicking on the
+ * clock */
+ refresh_click_timeout_time_only (cd);
+ update_calendar_popup (cd);
+}
+
+static gboolean
+do_not_eat_button_press (GtkWidget *widget,
+ GdkEventButton *event)
+{
+ if (event->button != 1)
+ g_signal_stop_emission_by_name (widget, "button_press_event");
+
+ return FALSE;
+}
+
+/* Don't request smaller size then the last one we did, this avoids
+ jumping when proportional fonts are used. We must take care to
+ call "unfix_size" whenever options are changed or such where
+ we'd want to forget the fixed size */
+static void
+clock_size_request (GtkWidget *clock, GtkRequisition *req, gpointer data)
+{
+ ClockData *cd = data;
+
+ if (req->width > cd->fixed_width)
+ cd->fixed_width = req->width;
+ if (req->height > cd->fixed_height)
+ cd->fixed_height = req->height;
+ req->width = cd->fixed_width;
+ req->height = cd->fixed_height;
+}
+
+static void
+clock_update_text_gravity (GtkWidget *label)
+{
+ PangoLayout *layout;
+ PangoContext *context;
+
+ layout = gtk_label_get_layout (GTK_LABEL (label));
+ context = pango_layout_get_context (layout);
+ pango_context_set_base_gravity (context, PANGO_GRAVITY_AUTO);
+}
+
+static inline void
+force_no_focus_padding (GtkWidget *widget)
+{
+ static gboolean first_time = TRUE;
+
+ if (first_time) {
+ gtk_rc_parse_string ("\n"
+ " style \"clock-applet-button-style\"\n"
+ " {\n"
+ " GtkWidget::focus-line-width=0\n"
+ " GtkWidget::focus-padding=0\n"
+ " }\n"
+ "\n"
+ " widget \"*.clock-applet-button\" style \"clock-applet-button-style\"\n"
+ "\n");
+ first_time = FALSE;
+ }
+
+ gtk_widget_set_name (widget, "clock-applet-button");
+}
+
+static GtkWidget *
+create_main_clock_button (void)
+{
+ GtkWidget *button;
+
+ button = gtk_toggle_button_new ();
+ gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
+
+ force_no_focus_padding (button);
+
+ return button;
+}
+
+static GtkWidget *
+create_main_clock_label (ClockData *cd)
+{
+ GtkWidget *label;
+
+ label = gtk_label_new (NULL);
+ g_signal_connect (label, "size_request",
+ G_CALLBACK (clock_size_request),
+ cd);
+ g_signal_connect_swapped (label, "style_set",
+ G_CALLBACK (unfix_size),
+ cd);
+ gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER);
+ clock_update_text_gravity (label);
+ g_signal_connect (label, "screen-changed",
+ G_CALLBACK (clock_update_text_gravity),
+ NULL);
+
+ return label;
+}
+
+static gboolean
+weather_tooltip (GtkWidget *widget,
+ gint x,
+ gint y,
+ gboolean keyboard_mode,
+ GtkTooltip *tooltip,
+ ClockData *cd)
+{
+ GList *locations, *l;
+ WeatherInfo *info;
+
+ locations = cd->locations;
+
+ for (l = locations; l; l = l->next) {
+ ClockLocation *location = l->data;
+ if (clock_location_is_current (location)) {
+ info = clock_location_get_weather_info (location);
+ if (!info || !weather_info_is_valid (info))
+ continue;
+
+ weather_info_setup_tooltip (info, location, tooltip, cd->format);
+
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static void
+create_clock_widget (ClockData *cd)
+{
+#ifdef HAVE_LIBECAL
+ clock_numbers++;
+ e_passwords_init ();
+#endif
+
+ /* Main toggle button */
+ cd->panel_button = create_main_clock_button ();
+ g_signal_connect (cd->panel_button, "button_press_event",
+ G_CALLBACK (do_not_eat_button_press), NULL);
+ g_signal_connect (cd->panel_button, "toggled",
+ G_CALLBACK (toggle_calendar), cd);
+ g_signal_connect (G_OBJECT (cd->panel_button), "destroy",
+ G_CALLBACK (destroy_clock),
+ cd);
+ gtk_widget_show (cd->panel_button);
+
+ /* Main orientable box */
+ cd->main_obox = g_object_new (clock_box_get_type (), NULL);
+ gtk_box_set_spacing (GTK_BOX (cd->main_obox), 12); /* spacing between weather and time */
+ gtk_container_add (GTK_CONTAINER (cd->panel_button), cd->main_obox);
+ gtk_widget_show (cd->main_obox);
+
+ /* Weather orientable box */
+ cd->weather_obox = g_object_new (clock_box_get_type (), NULL);
+ gtk_box_set_spacing (GTK_BOX (cd->weather_obox), 2); /* spacing between weather icon and temperature */
+ gtk_box_pack_start (GTK_BOX (cd->main_obox), cd->weather_obox, FALSE, FALSE, 0);
+ gtk_widget_set_has_tooltip (cd->weather_obox, TRUE);
+ g_signal_connect (cd->weather_obox, "query-tooltip",
+ G_CALLBACK (weather_tooltip), cd);
+
+ /* Weather widgets */
+ cd->panel_weather_icon = gtk_image_new ();
+ gtk_box_pack_start (GTK_BOX (cd->weather_obox), cd->panel_weather_icon, FALSE, FALSE, 0);
+
+ cd->panel_temperature_label = gtk_label_new (NULL);
+ gtk_box_pack_start (GTK_BOX (cd->weather_obox), cd->panel_temperature_label, FALSE, FALSE, 0);
+
+ /* Main label for time display */
+ cd->clockw = create_main_clock_label (cd);
+ gtk_box_pack_start (GTK_BOX (cd->main_obox), cd->clockw, FALSE, FALSE, 0);
+ gtk_widget_show (cd->clockw);
+
+ /* Done! */
+
+ set_atk_name_description (GTK_WIDGET (cd->applet), NULL,
+ _("Computer Clock"));
+
+ gtk_container_add (GTK_CONTAINER (cd->applet), cd->panel_button);
+ gtk_container_set_border_width (GTK_CONTAINER (cd->applet), 0);
+
+ cd->props = NULL;
+ cd->orient = -1;
+ cd->size = mate_panel_applet_get_size (MATE_PANEL_APPLET (cd->applet));
+
+ update_panel_weather (cd);
+
+ /* Refresh the clock so that it paints its first state */
+ refresh_clock_timeout (cd);
+ applet_change_orient (MATE_PANEL_APPLET (cd->applet),
+ mate_panel_applet_get_orient (MATE_PANEL_APPLET (cd->applet)),
+ cd);
+}
+
+static void
+update_orient (ClockData *cd)
+{
+ const gchar *text;
+ int min_width;
+ GtkAllocation allocation;
+ gdouble new_angle;
+ gdouble angle;
+
+ text = gtk_label_get_text (GTK_LABEL (cd->clockw));
+ min_width = calculate_minimum_width (cd->panel_button, text);
+ gtk_widget_get_allocation (cd->panel_button, &allocation);
+
+ if (cd->orient == MATE_PANEL_APPLET_ORIENT_LEFT &&
+ min_width > allocation.width)
+ new_angle = 270;
+ else if (cd->orient == MATE_PANEL_APPLET_ORIENT_RIGHT &&
+ min_width > allocation.width)
+ new_angle = 90;
+ else
+ new_angle = 0;
+
+ angle = gtk_label_get_angle (GTK_LABEL (cd->clockw));
+ if (angle != new_angle) {
+ unfix_size (cd);
+ gtk_label_set_angle (GTK_LABEL (cd->clockw), new_angle);
+ gtk_label_set_angle (GTK_LABEL (cd->panel_temperature_label), new_angle);
+ }
+}
+
+/* this is when the panel orientation changes */
+static void
+applet_change_orient (MatePanelApplet *applet,
+ MatePanelAppletOrient orient,
+ ClockData *cd)
+{
+ GtkOrientation o;
+
+ if (orient == cd->orient)
+ return;
+
+ cd->orient = orient;
+
+ switch (cd->orient) {
+ case MATE_PANEL_APPLET_ORIENT_RIGHT:
+ o = GTK_ORIENTATION_VERTICAL;
+ break;
+ case MATE_PANEL_APPLET_ORIENT_LEFT:
+ o = GTK_ORIENTATION_VERTICAL;
+ break;
+ case MATE_PANEL_APPLET_ORIENT_DOWN:
+ o = GTK_ORIENTATION_HORIZONTAL;
+ break;
+ case MATE_PANEL_APPLET_ORIENT_UP:
+ o = GTK_ORIENTATION_HORIZONTAL;
+ break;
+ default:
+ g_assert_not_reached ();
+ return;
+ }
+
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (cd->main_obox), o);
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (cd->weather_obox), o);
+
+ unfix_size (cd);
+ update_clock (cd);
+ update_calendar_popup (cd);
+}
+
+/* this is when the panel size changes */
+static void
+panel_button_change_pixel_size (GtkWidget *widget,
+ GtkAllocation *allocation,
+ ClockData *cd)
+{
+ int new_size;
+
+ if (cd->old_allocation.width == allocation->width &&
+ cd->old_allocation.height == allocation->height)
+ return;
+
+ cd->old_allocation.width = allocation->width;
+ cd->old_allocation.height = allocation->height;
+
+ if (cd->orient == MATE_PANEL_APPLET_ORIENT_LEFT ||
+ cd->orient == MATE_PANEL_APPLET_ORIENT_RIGHT)
+ new_size = allocation->width;
+ else
+ new_size = allocation->height;
+
+ cd->size = new_size;
+
+ unfix_size (cd);
+ update_timeformat (cd);
+ update_clock (cd);
+}
+
+static void
+copy_time (GtkAction *action,
+ ClockData *cd)
+{
+ char string[256];
+ char *utf8;
+
+ if (cd->format == CLOCK_FORMAT_UNIX) {
+ g_snprintf (string, sizeof(string), "%lu",
+ (unsigned long)cd->current_time);
+ } else if (cd->format == CLOCK_FORMAT_INTERNET) {
+ float itime = get_itime (cd->current_time);
+ if (cd->showseconds)
+ g_snprintf (string, sizeof (string), "@%3.2f", itime);
+ else
+ g_snprintf (string, sizeof (string), "@%3d",
+ (unsigned int) itime);
+ } else {
+ struct tm *tm;
+ char *format;
+
+ if (cd->format == CLOCK_FORMAT_CUSTOM) {
+ format = g_locale_from_utf8 (cd->custom_format, -1,
+ NULL, NULL, NULL);
+ } else if (cd->format == CLOCK_FORMAT_12) {
+ if (cd->showseconds)
+ /* Translators: This is a strftime format
+ * string.
+ * It is used to display the time in 12-hours
+ * format with a leading 0 if needed (eg, like
+ * in the US: 08:10 am). The %p expands to
+ * am/pm. */
+ format = g_locale_from_utf8 (_("%I:%M:%S %p"), -1, NULL, NULL, NULL);
+ else
+ /* Translators: This is a strftime format
+ * string.
+ * It is used to display the time in 12-hours
+ * format with a leading 0 if needed (eg, like
+ * in the US: 08:10 am). The %p expands to
+ * am/pm. */
+ format = g_locale_from_utf8 (_("%I:%M %p"), -1, NULL, NULL, NULL);
+ } else {
+ if (cd->showseconds)
+ /* Translators: This is a strftime format
+ * string.
+ * It is used to display the time in 24-hours
+ * format (eg, like in France: 20:10). */
+ format = g_locale_from_utf8 (_("%H:%M:%S"), -1, NULL, NULL, NULL);
+ else
+ /* Translators: This is a strftime format
+ * string.
+ * It is used to display the time in 24-hours
+ * format (eg, like in France: 20:10). */
+ format = g_locale_from_utf8 (_("%H:%M"), -1, NULL, NULL, NULL);
+ }
+
+ tm = localtime (&cd->current_time);
+
+ if (!format)
+ strcpy (string, "???");
+ else if (strftime (string, sizeof (string), format, tm) <= 0)
+ strcpy (string, "???");
+ g_free (format);
+ }
+
+ utf8 = g_locale_to_utf8 (string, -1, NULL, NULL, NULL);
+ gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_PRIMARY),
+ utf8, -1);
+ gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD),
+ utf8, -1);
+ g_free (utf8);
+}
+
+static void
+copy_date (GtkAction *action,
+ ClockData *cd)
+{
+ struct tm *tm;
+ char string[256];
+ char *utf8, *loc;
+
+ tm = localtime (&cd->current_time);
+
+ /* Translators: This is a strftime format string.
+ * It is used to display a date in the full format (so that people can
+ * copy and paste it elsewhere). */
+ loc = g_locale_from_utf8 (_("%A, %B %d %Y"), -1, NULL, NULL, NULL);
+ if (!loc)
+ strcpy (string, "???");
+ else if (strftime (string, sizeof (string), loc, tm) <= 0)
+ strcpy (string, "???");
+ g_free (loc);
+
+ utf8 = g_locale_to_utf8 (string, -1, NULL, NULL, NULL);
+ gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_PRIMARY),
+ utf8, -1);
+ gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD),
+ utf8, -1);
+ g_free (utf8);
+}
+
+static void
+update_set_time_button (ClockData *cd)
+{
+ gint can_set;
+
+ /* this returns more than just a boolean; check the documentation of
+ * the dbus method for more information */
+ can_set = can_set_system_time ();
+
+ if (cd->time_settings_button)
+ gtk_widget_set_sensitive (cd->time_settings_button, can_set);
+
+ if (cd->set_time_button) {
+ gtk_widget_set_sensitive (cd->set_time_button, can_set != 0);
+ gtk_button_set_label (GTK_BUTTON (cd->set_time_button),
+ can_set == 1 ?
+ _("Set System Time...") :
+ _("Set System Time"));
+ }
+}
+
+static void
+set_time_callback (ClockData *cd, GError *error)
+{
+ GtkWidget *window;
+ GtkWidget *dialog;
+
+ if (error) {
+ dialog = gtk_message_dialog_new (NULL,
+ 0,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _("Failed to set the system time"));
+
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", error->message);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+ gtk_window_present (GTK_WINDOW (dialog));
+
+ g_error_free (error);
+ }
+ else
+ update_set_time_button (cd);
+
+ window = _clock_get_widget (cd, "set-time-window");
+ gtk_widget_hide (window);
+}
+
+static void
+set_time (GtkWidget *widget, ClockData *cd)
+{
+ struct tm t;
+ time_t tim;
+ guint year, month, day;
+
+ time (&tim);
+ /* sets t.isdst -- we could set it to -1 to have mktime() guess the
+ * right value , but we don't know if this works with all libc */
+ localtime_r (&tim, &t);
+
+ t.tm_sec = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (cd->seconds_spin));
+ t.tm_min = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (cd->minutes_spin));
+ t.tm_hour = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (cd->hours_spin));
+ gtk_calendar_get_date (GTK_CALENDAR (cd->calendar), &year, &month, &day);
+ t.tm_year = year - 1900;
+ t.tm_mon = month;
+ t.tm_mday = day;
+
+ tim = mktime (&t);
+
+ set_system_time_async (tim, (GFunc)set_time_callback, cd, NULL);
+}
+
+static void
+cancel_time_settings (GtkWidget *button, ClockData *cd)
+{
+ gtk_widget_hide (cd->set_time_window);
+
+ refresh_click_timeout_time_only (cd);
+}
+
+static gboolean
+delete_time_settings (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+ cancel_time_settings (widget, data);
+
+ return TRUE;
+}
+
+static void
+fill_time_settings_window (ClockData *cd)
+{
+ time_t now_t;
+ struct tm now;
+
+ /* Fill the time settings */
+ tzset ();
+ time (&now_t);
+ localtime_r (&now_t, &now);
+
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (cd->seconds_spin), now.tm_sec);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (cd->minutes_spin), now.tm_min);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (cd->hours_spin), now.tm_hour);
+
+ gtk_calendar_select_month (GTK_CALENDAR (cd->calendar), now.tm_mon,
+ now.tm_year + 1900);
+ gtk_calendar_select_day (GTK_CALENDAR (cd->calendar), now.tm_mday);
+}
+
+static void
+wrap_cb (GtkSpinButton *spin, ClockData *cd)
+{
+ gdouble value;
+ gdouble min, max;
+ GtkSpinType direction;
+
+ value = gtk_spin_button_get_value (spin);
+ gtk_spin_button_get_range (spin, &min, &max);
+
+ if (value == min)
+ direction = GTK_SPIN_STEP_FORWARD;
+ else
+ direction = GTK_SPIN_STEP_BACKWARD;
+
+ if (spin == (GtkSpinButton *) cd->seconds_spin)
+ gtk_spin_button_spin (GTK_SPIN_BUTTON (cd->minutes_spin), direction, 1.0);
+ else if (spin == (GtkSpinButton *) cd->minutes_spin)
+ gtk_spin_button_spin (GTK_SPIN_BUTTON (cd->hours_spin), direction, 1.0);
+ else {
+ guint year, month, day;
+ GDate *date;
+
+ gtk_calendar_get_date (GTK_CALENDAR (cd->calendar), &year, &month, &day);
+
+ date = g_date_new_dmy (day, month + 1, year);
+
+ if (direction == GTK_SPIN_STEP_FORWARD)
+ g_date_add_days (date, 1);
+ else
+ g_date_subtract_days (date, 1);
+
+ year = g_date_get_year (date);
+ month = g_date_get_month (date) - 1;
+ day = g_date_get_day (date);
+
+ gtk_calendar_select_month (GTK_CALENDAR (cd->calendar), month, year);
+ gtk_calendar_select_day (GTK_CALENDAR (cd->calendar), day);
+
+ g_date_free (date);
+ }
+}
+
+static gboolean
+output_cb (GtkSpinButton *spin,
+ gpointer data)
+{
+ GtkAdjustment *adj;
+ gchar *text;
+ int value;
+
+ adj = gtk_spin_button_get_adjustment (spin);
+ value = (int) gtk_adjustment_get_value (adj);
+ text = g_strdup_printf ("%02d", value);
+ gtk_entry_set_text (GTK_ENTRY (spin), text);
+ g_free (text);
+
+ return TRUE;
+}
+
+static void
+ensure_time_settings_window_is_created (ClockData *cd)
+{
+ GtkWidget *cancel_button;
+
+ if (cd->set_time_window)
+ return;
+
+ cd->set_time_window = _clock_get_widget (cd, "set-time-window");
+ g_signal_connect (cd->set_time_window, "delete_event",
+ G_CALLBACK (delete_time_settings), cd);
+
+ cd->calendar = _clock_get_widget (cd, "calendar");
+ cd->hours_spin = _clock_get_widget (cd, "hours_spin");
+ cd->minutes_spin = _clock_get_widget (cd, "minutes_spin");
+ cd->seconds_spin = _clock_get_widget (cd, "seconds_spin");
+
+ gtk_entry_set_width_chars (GTK_ENTRY (cd->hours_spin), 2);
+ gtk_entry_set_width_chars (GTK_ENTRY (cd->minutes_spin), 2);
+ gtk_entry_set_width_chars (GTK_ENTRY (cd->seconds_spin), 2);
+ gtk_entry_set_alignment (GTK_ENTRY (cd->hours_spin), 1.0);
+ gtk_entry_set_alignment (GTK_ENTRY (cd->minutes_spin), 1.0);
+ gtk_entry_set_alignment (GTK_ENTRY (cd->seconds_spin), 1.0);
+ g_signal_connect (cd->seconds_spin, "wrapped", G_CALLBACK (wrap_cb), cd);
+ g_signal_connect (cd->minutes_spin, "wrapped", G_CALLBACK (wrap_cb), cd);
+ g_signal_connect (cd->hours_spin, "wrapped", G_CALLBACK (wrap_cb), cd);
+
+ g_signal_connect (cd->minutes_spin, "output", G_CALLBACK (output_cb), cd);
+ g_signal_connect (cd->seconds_spin, "output", G_CALLBACK (output_cb), cd);
+
+ cd->set_time_button = _clock_get_widget (cd, "set-time-button");
+ g_signal_connect (cd->set_time_button, "clicked", G_CALLBACK (set_time), cd);
+
+ cancel_button = _clock_get_widget (cd, "cancel-set-time-button");
+ g_signal_connect (cancel_button, "clicked", G_CALLBACK (cancel_time_settings), cd);
+
+ cd->current_time_label = _clock_get_widget (cd, "current_time_label");
+}
+
+static void
+run_time_settings (GtkWidget *unused, ClockData *cd)
+{
+ ensure_time_settings_window_is_created (cd);
+ fill_time_settings_window (cd);
+
+ update_set_time_button (cd);
+
+ gtk_window_present (GTK_WINDOW (cd->set_time_window));
+
+ refresh_click_timeout_time_only (cd);
+}
+
+static void
+config_date (GtkAction *action,
+ ClockData *cd)
+{
+ run_time_settings (NULL, cd);
+}
+
+/* current timestamp */
+static const GtkActionEntry clock_menu_actions [] = {
+ { "ClockPreferences", GTK_STOCK_PROPERTIES, N_("_Preferences"),
+ NULL, NULL,
+ G_CALLBACK (verb_display_properties_dialog) },
+ { "ClockHelp", GTK_STOCK_HELP, N_("_Help"),
+ NULL, NULL,
+ G_CALLBACK (display_help_dialog) },
+ { "ClockAbout", GTK_STOCK_ABOUT, N_("_About"),
+ NULL, NULL,
+ G_CALLBACK (display_about_dialog) },
+ { "ClockCopyTime", GTK_STOCK_COPY, N_("Copy _Time"),
+ NULL, NULL,
+ G_CALLBACK (copy_time) },
+ { "ClockCopyDate", GTK_STOCK_COPY, N_("Copy _Date"),
+ NULL, NULL,
+ G_CALLBACK (copy_date) },
+ { "ClockConfig", GTK_STOCK_PREFERENCES, N_("Ad_just Date & Time"),
+ NULL, NULL,
+ G_CALLBACK (config_date) }
+};
+
+static void
+format_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *clock)
+{
+ const char *value;
+ int new_format;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_STRING)
+ return;
+
+ value = mateconf_value_get_string (entry->value);
+ if (!mateconf_string_to_enum (format_type_enum_map, value, &new_format))
+ return;
+
+ if (!clock->can_handle_format_12 && new_format == CLOCK_FORMAT_12)
+ new_format = CLOCK_FORMAT_24;
+
+ if (new_format == clock->format)
+ return;
+
+ clock->format = new_format;
+ refresh_clock_timeout (clock);
+
+ if (clock->calendar_popup != NULL) {
+ calendar_window_set_time_format (CALENDAR_WINDOW (clock->calendar_popup), clock->format);
+ position_calendar_popup (clock);
+ }
+
+}
+
+static void
+show_seconds_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *clock)
+{
+ gboolean value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ value = mateconf_value_get_bool (entry->value);
+
+ clock->showseconds = (value != 0);
+ refresh_clock_timeout (clock);
+}
+
+static void
+show_date_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *clock)
+{
+ gboolean value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ value = mateconf_value_get_bool (entry->value);
+
+ clock->showdate = (value != 0);
+ update_timeformat (clock);
+ refresh_clock (clock);
+}
+
+static void
+update_panel_weather (ClockData *cd)
+{
+ if (cd->show_weather)
+ gtk_widget_show (cd->panel_weather_icon);
+ else
+ gtk_widget_hide (cd->panel_weather_icon);
+
+ if (cd->show_temperature)
+ gtk_widget_show (cd->panel_temperature_label);
+ else
+ gtk_widget_hide (cd->panel_temperature_label);
+
+ if ((cd->show_weather || cd->show_temperature) &&
+ g_list_length (cd->locations) > 0)
+ gtk_widget_show (cd->weather_obox);
+ else
+ gtk_widget_hide (cd->weather_obox);
+
+ gtk_widget_queue_resize (cd->applet);
+}
+
+static void
+update_weather_bool_value_and_toggle_from_mateconf (ClockData *cd, MateConfEntry *entry,
+ gboolean *value_loc, const char *widget_name)
+{
+ GtkWidget *widget;
+ gboolean value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ value = mateconf_value_get_bool (entry->value);
+
+ *value_loc = (value != 0);
+
+ widget = _clock_get_widget (cd, widget_name);
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget),
+ *value_loc);
+
+ update_panel_weather (cd);
+}
+
+static void
+show_weather_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *cd)
+{
+ update_weather_bool_value_and_toggle_from_mateconf (cd, entry, &cd->show_weather, "weather_check");
+}
+
+static void
+show_temperature_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *cd)
+{
+ update_weather_bool_value_and_toggle_from_mateconf (cd, entry, &cd->show_temperature, "temperature_check");
+}
+
+static void
+location_weather_updated_cb (ClockLocation *location,
+ WeatherInfo *info,
+ gpointer data)
+{
+ ClockData *cd = data;
+ const gchar *icon_name;
+ const gchar *temp;
+ GtkIconTheme *theme;
+ GdkPixbuf *pixbuf;
+
+ if (!info || !weather_info_is_valid (info))
+ return;
+
+ if (!clock_location_is_current (location))
+ return;
+
+ icon_name = weather_info_get_icon_name (info);
+ /* FIXME: mmh, screen please? Also, don't hardcode to 16 */
+ theme = gtk_icon_theme_get_default ();
+ pixbuf = gtk_icon_theme_load_icon (theme, icon_name, 16,
+ GTK_ICON_LOOKUP_GENERIC_FALLBACK, NULL);
+
+ temp = weather_info_get_temp_summary (info);
+
+ gtk_image_set_from_pixbuf (GTK_IMAGE (cd->panel_weather_icon), pixbuf);
+ gtk_label_set_text (GTK_LABEL (cd->panel_temperature_label), temp);
+}
+
+static void
+location_set_current_cb (ClockLocation *loc,
+ gpointer data)
+{
+ ClockData *cd = data;
+ WeatherInfo *info;
+
+ info = clock_location_get_weather_info (loc);
+ location_weather_updated_cb (loc, info, cd);
+
+ if (cd->map_widget)
+ clock_map_refresh (CLOCK_MAP (cd->map_widget));
+ update_location_tiles (cd);
+ save_cities_store (cd);
+}
+
+static void
+locations_changed (ClockData *cd)
+{
+ GList *l;
+ ClockLocation *loc;
+ glong id;
+
+ if (!cd->locations) {
+ if (cd->weather_obox)
+ gtk_widget_hide (cd->weather_obox);
+ if (cd->panel_weather_icon)
+ gtk_image_set_from_pixbuf (GTK_IMAGE (cd->panel_weather_icon),
+ NULL);
+ if (cd->panel_temperature_label)
+ gtk_label_set_text (GTK_LABEL (cd->panel_temperature_label),
+ "");
+ } else {
+ if (cd->weather_obox)
+ gtk_widget_show (cd->weather_obox);
+ }
+
+ for (l = cd->locations; l; l = l->next) {
+ loc = l->data;
+
+ id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (loc), "weather-updated"));
+ if (id == 0) {
+ id = g_signal_connect (loc, "weather-updated",
+ G_CALLBACK (location_weather_updated_cb), cd);
+ g_object_set_data (G_OBJECT (loc), "weather-updated", GINT_TO_POINTER (id));
+ g_signal_connect (loc, "set-current",
+ G_CALLBACK (location_set_current_cb), cd);
+ }
+ }
+
+ if (cd->map_widget)
+ clock_map_refresh (CLOCK_MAP (cd->map_widget));
+
+ if (cd->clock_vbox)
+ create_cities_section (cd);
+}
+
+
+static void
+set_locations (ClockData *cd, GList *locations)
+{
+ free_locations (cd);
+ cd->locations = locations;
+ locations_changed (cd);
+}
+
+typedef struct {
+ GList *cities;
+ ClockData *cd;
+} LocationParserData;
+
+/* Parser for our serialized locations in mateconf */
+static void
+location_start_element (GMarkupParseContext *context,
+ const gchar *element_name,
+ const gchar **attribute_names,
+ const gchar **attribute_values,
+ gpointer user_data,
+ GError **error)
+{
+ ClockLocation *loc;
+ LocationParserData *data = user_data;
+ ClockData *cd = data->cd;
+ WeatherPrefs prefs;
+ const gchar *att_name;
+
+ gchar *name = NULL;
+ gchar *city = NULL;
+ gchar *timezone = NULL;
+ gfloat latitude = 0.0;
+ gfloat longitude = 0.0;
+ gchar *code = NULL;
+ gboolean current = FALSE;
+
+ int index = 0;
+
+ prefs.temperature_unit = cd->temperature_unit;
+ prefs.speed_unit = cd->speed_unit;
+
+ if (strcmp (element_name, "location") != 0) {
+ return;
+ }
+
+ setlocale (LC_NUMERIC, "POSIX");
+
+ for (att_name = attribute_names[index]; att_name != NULL;
+ att_name = attribute_names[++index]) {
+ if (strcmp (att_name, "name") == 0) {
+ name = (gchar *)attribute_values[index];
+ } else if (strcmp (att_name, "city") == 0) {
+ city = (gchar *)attribute_values[index];
+ } else if (strcmp (att_name, "timezone") == 0) {
+ timezone = (gchar *)attribute_values[index];
+ } else if (strcmp (att_name, "latitude") == 0) {
+ sscanf (attribute_values[index], "%f", &latitude);
+ } else if (strcmp (att_name, "longitude") == 0) {
+ sscanf (attribute_values[index], "%f", &longitude);
+ } else if (strcmp (att_name, "code") == 0) {
+ code = (gchar *)attribute_values[index];
+ }
+ else if (strcmp (att_name, "current") == 0) {
+ if (strcmp (attribute_values[index], "true") == 0) {
+ current = TRUE;
+ }
+ }
+ }
+
+ setlocale (LC_NUMERIC, "");
+
+ if ((!name && !city) || !timezone) {
+ return;
+ }
+
+ /* migration from the old configuration, when name == city */
+ if (!city)
+ city = name;
+
+ loc = clock_location_find_and_ref (cd->locations, name, city,
+ timezone, latitude, longitude, code);
+ if (!loc)
+ loc = clock_location_new (name, city, timezone,
+ latitude, longitude, code, &prefs);
+
+ if (current && clock_location_is_current_timezone (loc))
+ clock_location_make_current (loc, GDK_WINDOW_XWINDOW (gtk_widget_get_window (cd->applet)),
+ NULL, NULL, NULL);
+
+ data->cities = g_list_append (data->cities, loc);
+}
+
+static GMarkupParser location_parser = {
+ location_start_element, NULL, NULL, NULL, NULL
+};
+
+static void
+cities_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *cd)
+{
+ LocationParserData data;
+
+ GSList *cur = NULL;
+
+ GMarkupParseContext *context;
+
+ data.cities = NULL;
+ data.cd = cd;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_LIST)
+ return;
+
+ context = g_markup_parse_context_new (&location_parser, 0, &data, NULL);
+
+ cur = mateconf_value_get_list (entry->value);
+
+ while (cur) {
+ const char *str = mateconf_value_get_string (cur->data);
+ g_markup_parse_context_parse (context, str, strlen (str), NULL);
+
+ cur = cur->next;
+ }
+
+ g_markup_parse_context_free (context);
+
+ set_locations (cd, data.cities);
+ create_cities_store (cd);
+}
+
+static void
+update_temperature_combo (ClockData *cd)
+{
+ GtkWidget *widget;
+ int active_index;
+
+ widget = _clock_get_widget (cd, "temperature_combo");
+
+ if (cd->use_temperature_default)
+ active_index = 0;
+ else
+ active_index = cd->temperature_unit - 1;
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (widget), active_index);
+}
+
+static void
+update_weather_locations (ClockData *cd)
+{
+ GList *locations, *l;
+ WeatherPrefs prefs = {
+ FORECAST_STATE,
+ FALSE,
+ NULL,
+ TEMP_UNIT_CENTIGRADE,
+ SPEED_UNIT_MS,
+ PRESSURE_UNIT_MB,
+ DISTANCE_UNIT_KM
+ };
+
+ prefs.temperature_unit = cd->temperature_unit;
+ prefs.speed_unit = cd->speed_unit;
+
+ locations = cd->locations;
+
+ for (l = locations; l; l = l->next) {
+ clock_location_set_weather_prefs (l->data, &prefs);
+ }
+}
+
+static void
+clock_migrate_to_26 (ClockData *clock)
+{
+ gboolean unixtime;
+ gboolean internettime;
+ int hourformat;
+
+ internettime = mate_panel_applet_mateconf_get_bool (MATE_PANEL_APPLET (clock->applet),
+ "internet_time",
+ NULL);
+ unixtime = mate_panel_applet_mateconf_get_bool (MATE_PANEL_APPLET (clock->applet),
+ "unix_time",
+ NULL);
+ hourformat = mate_panel_applet_mateconf_get_int (MATE_PANEL_APPLET (clock->applet),
+ "hour_format",
+ NULL);
+
+ if (unixtime)
+ clock->format = CLOCK_FORMAT_UNIX;
+ else if (internettime)
+ clock->format = CLOCK_FORMAT_INTERNET;
+ else if (hourformat == 12)
+ clock->format = CLOCK_FORMAT_12;
+ else if (hourformat == 24)
+ clock->format = CLOCK_FORMAT_24;
+
+ /* It's still possible that we have none of the old keys, in which case
+ * we're not migrating from 2.6, but the config is simply wrong. So
+ * don't set the format key in this case. */
+ if (clock->format != CLOCK_FORMAT_INVALID)
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (clock->applet),
+ KEY_FORMAT,
+ mateconf_enum_to_string (format_type_enum_map,
+ clock->format),
+ NULL);
+}
+
+static void
+clock_timezone_changed (SystemTimezone *systz,
+ const char *new_tz,
+ ClockData *cd)
+{
+ /* This will refresh the current location */
+ save_cities_store (cd);
+
+ refresh_click_timeout_time_only (cd);
+}
+
+static void
+parse_and_set_temperature_string (const char *str, ClockData *cd)
+{
+ gint value = 0;
+ gboolean use_default = FALSE;
+
+ value = mateweather_prefs_parse_temperature (str, &use_default);
+
+ cd->use_temperature_default = use_default;
+ cd->temperature_unit = value;
+}
+
+static void
+parse_and_set_speed_string (const char *str, ClockData *cd)
+{
+ gint value = 0;
+ gboolean use_default = FALSE;
+
+ value = mateweather_prefs_parse_speed (str, &use_default);
+
+ cd->use_speed_default = use_default;
+ cd->speed_unit = value;
+}
+
+static void
+temperature_unit_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *cd)
+{
+ const gchar *value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_STRING)
+ return;
+
+ value = mateconf_value_get_string (entry->value);
+ parse_and_set_temperature_string (value, cd);
+ update_temperature_combo (cd);
+ update_weather_locations (cd);
+}
+
+static void
+update_speed_combo (ClockData *cd)
+{
+ GtkWidget *widget;
+ int active_index;
+
+ widget = _clock_get_widget (cd, "wind_speed_combo");
+
+ if (cd->use_speed_default)
+ active_index = 0;
+ else
+ active_index = cd->speed_unit - 1;
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (widget), active_index);
+}
+
+static void
+speed_unit_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *cd)
+{
+ const gchar *value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_STRING)
+ return;
+
+ value = mateconf_value_get_string (entry->value);
+ parse_and_set_speed_string (value, cd);
+ update_speed_combo (cd);
+ update_weather_locations (cd);
+}
+
+static void
+custom_format_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *clock)
+{
+ const char *value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_STRING)
+ return;
+
+ value = mateconf_value_get_string (entry->value);
+
+ g_free (clock->custom_format);
+ clock->custom_format = g_strdup (value);
+
+ if (clock->format == CLOCK_FORMAT_CUSTOM)
+ refresh_clock (clock);
+}
+
+static void
+show_week_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *clock)
+{
+ gboolean value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ value = mateconf_value_get_bool (entry->value);
+
+ if (clock->showweek == (value != 0))
+ return;
+
+ clock->showweek = (value != 0);
+
+ if (clock->calendar_popup != NULL) {
+ calendar_window_set_show_weeks (CALENDAR_WINDOW (clock->calendar_popup), clock->showweek);
+ position_calendar_popup (clock);
+ }
+}
+
+static guint
+setup_mateconf_preference (ClockData *cd, MateConfClient *client, const char *key_name, MateConfClientNotifyFunc callback)
+{
+ char *key;
+ guint id;
+
+ key = mate_panel_applet_mateconf_get_full_key (MATE_PANEL_APPLET (cd->applet),
+ key_name);
+ id = mateconf_client_notify_add (client, key,
+ callback,
+ cd, NULL, NULL);
+ g_free (key);
+
+ return id;
+}
+
+static void
+setup_mateconf (ClockData *cd)
+{
+ struct {
+ const char *key_name;
+ MateConfClientNotifyFunc callback;
+ } prefs[] = {
+ { KEY_FORMAT, (MateConfClientNotifyFunc) format_changed },
+ { KEY_SHOW_SECONDS, (MateConfClientNotifyFunc) show_seconds_changed },
+ { KEY_SHOW_DATE, (MateConfClientNotifyFunc) show_date_changed },
+ { KEY_SHOW_WEATHER, (MateConfClientNotifyFunc) show_weather_changed },
+ { KEY_SHOW_TEMPERATURE, (MateConfClientNotifyFunc) show_temperature_changed },
+ { KEY_CUSTOM_FORMAT, (MateConfClientNotifyFunc) custom_format_changed },
+ { KEY_SHOW_WEEK, (MateConfClientNotifyFunc) show_week_changed },
+ { KEY_CITIES, (MateConfClientNotifyFunc) cities_changed },
+ { KEY_TEMPERATURE_UNIT, (MateConfClientNotifyFunc) temperature_unit_changed },
+ { KEY_SPEED_UNIT, (MateConfClientNotifyFunc) speed_unit_changed },
+ };
+
+ MateConfClient *client;
+ int i;
+
+ client = mateconf_client_get_default ();
+
+ for (i = 0; i < G_N_ELEMENTS (prefs); i++)
+ cd->listeners[i] = setup_mateconf_preference (cd, client, prefs[i].key_name, prefs[i].callback);
+
+ g_object_unref (G_OBJECT (client));
+}
+
+static GList *
+parse_mateconf_cities (ClockData *cd, GSList *values)
+{
+ GSList *cur = values;
+ LocationParserData data;
+ GMarkupParseContext *context;
+
+ data.cities = NULL;
+ data.cd = cd;
+
+ context =
+ g_markup_parse_context_new (&location_parser, 0, &data, NULL);
+
+ while (cur) {
+ const char *str = (char *)cur->data;
+ g_markup_parse_context_parse (context, str, strlen(str), NULL);
+
+ cur = cur->next;
+ }
+
+ g_markup_parse_context_free (context);
+
+ return data.cities;
+}
+
+static void
+load_mateconf_settings (ClockData *cd)
+{
+ MatePanelApplet *applet;
+ int format;
+ char *format_str;
+ char *value;
+ GError *error;
+ GSList *values = NULL;
+ GList *cities = NULL;
+
+ applet = MATE_PANEL_APPLET (cd->applet);
+
+ cd->format = CLOCK_FORMAT_INVALID;
+
+ format_str = mate_panel_applet_mateconf_get_string (applet, KEY_FORMAT, NULL);
+ if (format_str &&
+ mateconf_string_to_enum (format_type_enum_map, format_str, &format))
+ cd->format = format;
+ else
+ clock_migrate_to_26 (cd);
+
+ g_free (format_str);
+
+ if (cd->format == CLOCK_FORMAT_INVALID)
+ cd->format = clock_locale_format ();
+
+ cd->custom_format = mate_panel_applet_mateconf_get_string (applet, KEY_CUSTOM_FORMAT, NULL);
+ cd->showseconds = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_SECONDS, NULL);
+
+ error = NULL;
+ cd->showdate = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_DATE, &error);
+ if (error) {
+ g_error_free (error);
+ /* if on a small screen don't show date by default */
+ if (gdk_screen_width () <= 800)
+ cd->showdate = FALSE;
+ else
+ cd->showdate = TRUE;
+ }
+
+ cd->show_weather = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_WEATHER, NULL);
+ cd->show_temperature = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_TEMPERATURE, NULL);
+ cd->showweek = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_WEEK, NULL);
+ cd->timeformat = NULL;
+
+ cd->can_handle_format_12 = (clock_locale_format () == CLOCK_FORMAT_12);
+ if (!cd->can_handle_format_12 && cd->format == CLOCK_FORMAT_12)
+ cd->format = CLOCK_FORMAT_24;
+
+ value = mate_panel_applet_mateconf_get_string (applet, KEY_TEMPERATURE_UNIT, NULL);
+ parse_and_set_temperature_string (value, cd);
+ g_free (value);
+
+ value = mate_panel_applet_mateconf_get_string (applet, KEY_SPEED_UNIT, NULL);
+ parse_and_set_speed_string (value, cd);
+ g_free (value);
+
+ values = mate_panel_applet_mateconf_get_list (MATE_PANEL_APPLET (cd->applet), KEY_CITIES,
+ MATECONF_VALUE_STRING, NULL);
+
+ if (g_slist_length (values) == 0) {
+ cities = NULL;
+ } else {
+ cities = parse_mateconf_cities (cd, values);
+ }
+
+ set_locations (cd, cities);
+}
+
+static gboolean
+fill_clock_applet (MatePanelApplet *applet)
+{
+ ClockData *cd;
+ GtkActionGroup *action_group;
+ GtkAction *action;
+ gchar *ui_path;
+ char *filename;
+ GError *error;
+
+ mate_panel_applet_add_preferences (applet, CLOCK_SCHEMA_DIR, NULL);
+ mate_panel_applet_set_flags (applet, MATE_PANEL_APPLET_EXPAND_MINOR);
+
+ cd = g_new0 (ClockData, 1);
+ cd->fixed_width = -1;
+ cd->fixed_height = -1;
+
+ cd->applet = GTK_WIDGET (applet);
+
+ setup_mateconf (cd);
+ load_mateconf_settings (cd);
+
+ cd->builder = gtk_builder_new ();
+ gtk_builder_set_translation_domain (cd->builder, GETTEXT_PACKAGE);
+ filename = g_build_filename (BUILDERDIR, "clock.ui", NULL);
+
+ error = NULL;
+ gtk_builder_add_from_file (cd->builder, filename, &error);
+ if (error) {
+ g_warning ("Error loading \"%s\": %s",
+ filename, error->message);
+ g_error_free (error);
+ }
+
+ g_free (filename);
+
+ create_clock_widget (cd);
+
+#ifndef CLOCK_INPROCESS
+ gtk_window_set_default_icon_name (CLOCK_ICON);
+#endif
+ gtk_widget_show (cd->applet);
+
+ /* FIXME: Update this comment. */
+ /* we have to bind change_orient before we do applet_widget_add
+ since we need to get an initial change_orient signal to set our
+ initial oriantation, and we get that during the _add call */
+ g_signal_connect (G_OBJECT (cd->applet),
+ "change_orient",
+ G_CALLBACK (applet_change_orient),
+ cd);
+
+ g_signal_connect (G_OBJECT (cd->panel_button),
+ "size_allocate",
+ G_CALLBACK (panel_button_change_pixel_size),
+ cd);
+
+ mate_panel_applet_set_background_widget (MATE_PANEL_APPLET (cd->applet),
+ GTK_WIDGET (cd->applet));
+
+ action_group = gtk_action_group_new ("ClockApplet Menu Actions");
+ gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
+ gtk_action_group_add_actions (action_group,
+ clock_menu_actions,
+ G_N_ELEMENTS (clock_menu_actions),
+ cd);
+ ui_path = g_build_filename (CLOCK_MENU_UI_DIR, "clock-menu.xml", NULL);
+ mate_panel_applet_setup_menu_from_file (MATE_PANEL_APPLET (cd->applet),
+ ui_path, action_group);
+ g_free (ui_path);
+
+ if (mate_panel_applet_get_locked_down (MATE_PANEL_APPLET (cd->applet))) {
+ action = gtk_action_group_get_action (action_group, "ClockPreferences");
+ gtk_action_set_visible (action, FALSE);
+
+ action = gtk_action_group_get_action (action_group, "ClockConfig");
+ gtk_action_set_visible (action, FALSE);
+ }
+
+ cd->systz = system_timezone_new ();
+ g_signal_connect (cd->systz, "changed",
+ G_CALLBACK (clock_timezone_changed), cd);
+
+ action = gtk_action_group_get_action (action_group, "ClockConfig");
+ gtk_action_set_visible (action, can_set_system_time ());
+ g_object_unref (action_group);
+
+ return TRUE;
+}
+
+/* FIXME old clock applet */
+#if 0
+static void
+setup_writability_sensitivity (ClockData *clock, GtkWidget *w, GtkWidget *label, const char *key)
+{
+ /* FMQ: was used from old preferences dialog; fix this up */
+ char *fullkey;
+ MateConfClient *client;
+
+ client = mateconf_client_get_default ();
+
+ fullkey = mate_panel_applet_mateconf_get_full_key
+ (MATE_PANEL_APPLET (clock->applet), key);
+
+ if ( ! mateconf_client_key_is_writable (client, fullkey, NULL)) {
+ g_object_set_data (G_OBJECT (w), NEVER_SENSITIVE,
+ GINT_TO_POINTER (1));
+ gtk_widget_set_sensitive (w, FALSE);
+ if (label != NULL) {
+ g_object_set_data (G_OBJECT (label), NEVER_SENSITIVE,
+ GINT_TO_POINTER (1));
+ gtk_widget_set_sensitive (label, FALSE);
+ }
+ }
+
+ g_free (fullkey);
+
+ g_object_unref (G_OBJECT (client));
+}
+
+static void
+update_properties_for_format (ClockData *cd,
+ GtkComboBox *combo,
+ ClockFormat format)
+{
+
+ /* show the custom format things the first time we actually
+ * have a custom format set in MateConf, but after that don't
+ * unshow it if the format changes
+ */
+ if (!cd->custom_format_shown &&
+ (cd->format == CLOCK_FORMAT_CUSTOM ||
+ (cd->custom_format && cd->custom_format [0]))) {
+ gtk_widget_show (cd->custom_hbox);
+ gtk_widget_show (cd->custom_label);
+ gtk_widget_show (cd->custom_entry);
+
+ gtk_combo_box_append_text (combo, _("Custom format"));
+
+ cd->custom_format_shown = TRUE;
+ }
+
+ /* Some combinations of options do not make sense */
+ switch (format) {
+ case CLOCK_FORMAT_12:
+ case CLOCK_FORMAT_24:
+ gtk_widget_set_sensitive (cd->showseconds_check, TRUE);
+ gtk_widget_set_sensitive (cd->showdate_check, TRUE);
+ gtk_widget_set_sensitive (cd->custom_entry, FALSE);
+ gtk_widget_set_sensitive (cd->custom_label, FALSE);
+ break;
+ case CLOCK_FORMAT_UNIX:
+ gtk_widget_set_sensitive (cd->showseconds_check, FALSE);
+ gtk_widget_set_sensitive (cd->showdate_check, FALSE);
+ gtk_widget_set_sensitive (cd->custom_entry, FALSE);
+ gtk_widget_set_sensitive (cd->custom_label, FALSE);
+ break;
+ case CLOCK_FORMAT_INTERNET:
+ gtk_widget_set_sensitive (cd->showseconds_check, TRUE);
+ gtk_widget_set_sensitive (cd->showdate_check, FALSE);
+ gtk_widget_set_sensitive (cd->custom_entry, FALSE);
+ gtk_widget_set_sensitive (cd->custom_label, FALSE);
+ break;
+ case CLOCK_FORMAT_CUSTOM:
+ gtk_widget_set_sensitive (cd->showseconds_check, FALSE);
+ gtk_widget_set_sensitive (cd->showdate_check, FALSE);
+ gtk_widget_set_sensitive (cd->custom_entry, TRUE);
+ gtk_widget_set_sensitive (cd->custom_label, TRUE);
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+}
+
+static void
+set_format_cb (GtkComboBox *combo,
+ ClockData *cd)
+{
+ /* FMQ: was used from old preferences dialog; fix this up */
+ ClockFormat format;
+
+ /* valid values begin from 1 */
+ if (cd->can_handle_format_12)
+ format = gtk_combo_box_get_active (combo) + 1;
+ else
+ format = gtk_combo_box_get_active (combo) + 2;
+
+ update_properties_for_format (cd, combo, format);
+
+ if (cd->format != format)
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet),
+ KEY_FORMAT,
+ mateconf_enum_to_string (format_type_enum_map, format),
+ NULL);
+}
+#endif
+
+static void
+set_show_seconds_cb (GtkWidget *w,
+ ClockData *clock)
+{
+ mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet),
+ KEY_SHOW_SECONDS,
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)),
+ NULL);
+}
+
+static void
+set_show_date_cb (GtkWidget *w,
+ ClockData *clock)
+{
+ mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet),
+ KEY_SHOW_DATE,
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)),
+ NULL);
+}
+
+static void
+set_show_weather_cb (GtkWidget *w,
+ ClockData *clock)
+{
+ mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet),
+ KEY_SHOW_WEATHER,
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)),
+ NULL);
+}
+
+static void
+set_show_temperature_cb (GtkWidget *w,
+ ClockData *clock)
+{
+ mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet),
+ KEY_SHOW_TEMPERATURE,
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)),
+ NULL);
+}
+
+#if 0
+static void
+set_show_zones_cb (GtkWidget *w,
+ ClockData *clock)
+{
+ mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet),
+ KEY_SHOW_ZONES,
+ GTK_TOGGLE_BUTTON (w)->active,
+ NULL);
+}
+#endif
+
+/* FIXME old clock applet */
+#if 0
+static void
+set_custom_format_cb (GtkEntry *entry,
+ ClockData *cd)
+{
+ /* FMQ: was used from old preferences dialog; fix this up */
+ const char *custom_format;
+
+ custom_format = gtk_entry_get_text (entry);
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet),
+ KEY_CUSTOM_FORMAT, custom_format, NULL);
+}
+#endif
+
+static void
+prefs_locations_changed (GtkTreeSelection *selection, ClockData *cd)
+{
+ gint n;
+
+ n = gtk_tree_selection_count_selected_rows (selection);
+ gtk_widget_set_sensitive (cd->prefs_location_edit_button, n > 0);
+ gtk_widget_set_sensitive (cd->prefs_location_remove_button, n > 0);
+}
+
+static gchar *
+loc_to_string (ClockLocation *loc)
+{
+ const gchar *name, *city;
+ gfloat latitude, longitude;
+ gchar *ret;
+
+ name = clock_location_get_name (loc);
+ city = clock_location_get_city (loc);
+ clock_location_get_coords (loc, &latitude, &longitude);
+
+ setlocale (LC_NUMERIC, "POSIX");
+
+ ret = g_markup_printf_escaped
+ ("<location name=\"%s\" city=\"%s\" timezone=\"%s\" latitude=\"%f\" longitude=\"%f\" code=\"%s\" current=\"%s\"/>",
+ name ? name : "",
+ city ? city : "",
+ clock_location_get_timezone (loc),
+ latitude, longitude,
+ clock_location_get_weather_code (loc),
+ clock_location_is_current (loc) ? "true" : "false");
+
+ setlocale (LC_NUMERIC, "");
+
+ return ret;
+}
+
+static void
+save_cities_store (ClockData *cd)
+{
+ ClockLocation *loc;
+ GList *node = cd->locations;
+
+ GSList *root = NULL;
+ GSList *list = NULL;
+
+ while (node) {
+ loc = CLOCK_LOCATION (node->data);
+ list = g_slist_prepend (list, loc_to_string (loc));
+ node = node->next;
+ }
+
+ list = g_slist_reverse (list);
+ mate_panel_applet_mateconf_set_list (MATE_PANEL_APPLET (cd->applet),
+ KEY_CITIES, MATECONF_VALUE_STRING, list, NULL);
+
+ root = list;
+
+ while (list) {
+ g_free (list->data);
+ list = g_slist_next (list);
+ }
+
+ g_slist_free (root);
+}
+
+static void
+run_prefs_edit_save (GtkButton *button, ClockData *cd)
+{
+ GtkWidget *edit_window = _clock_get_widget (cd, "edit-location-window");
+
+ ClockLocation *loc = g_object_get_data (G_OBJECT (edit_window), "clock-location");
+
+ GtkWidget *lat_entry = _clock_get_widget (cd, "edit-location-latitude-entry");
+ GtkWidget *lon_entry = _clock_get_widget (cd, "edit-location-longitude-entry");
+ GtkWidget *lat_combo = _clock_get_widget (cd, "edit-location-latitude-combo");
+ GtkWidget *lon_combo = _clock_get_widget (cd, "edit-location-longitude-combo");
+
+ const gchar *timezone, *weather_code;
+ gchar *city, *name;
+
+ MateWeatherLocation *gloc;
+ gfloat lat = 0;
+ gfloat lon = 0;
+
+ timezone = mateweather_timezone_menu_get_tzid (cd->zone_combo);
+ if (!timezone) {
+ edit_hide (NULL, cd);
+ return;
+ }
+
+ city = NULL;
+ weather_code = NULL;
+ name = NULL;
+
+ gloc = mateweather_location_entry_get_location (cd->location_entry);
+ if (gloc) {
+ city = mateweather_location_get_city_name (gloc);
+ weather_code = mateweather_location_get_code (gloc);
+ }
+
+ if (mateweather_location_entry_has_custom_text (cd->location_entry)) {
+ name = gtk_editable_get_chars (GTK_EDITABLE (cd->location_entry), 0, -1);
+ }
+
+ sscanf (gtk_entry_get_text (GTK_ENTRY (lat_entry)), "%f", &lat);
+ sscanf (gtk_entry_get_text (GTK_ENTRY (lon_entry)), "%f", &lon);
+
+ if (gtk_combo_box_get_active (GTK_COMBO_BOX (lat_combo)) != 0) {
+ lat = -lat;
+ }
+
+ if (gtk_combo_box_get_active (GTK_COMBO_BOX (lon_combo)) != 0) {
+ lon = -lon;
+ }
+
+ if (loc) {
+ clock_location_set_timezone (loc, timezone);
+ clock_location_set_name (loc, name);
+ clock_location_set_city (loc, city);
+ clock_location_set_coords (loc, lat, lon);
+ clock_location_set_weather_code (loc, weather_code);
+ } else {
+ WeatherPrefs prefs;
+
+ prefs.temperature_unit = cd->temperature_unit;
+ prefs.speed_unit = cd->speed_unit;
+
+ loc = clock_location_new (name, city, timezone, lat, lon, weather_code, &prefs);
+ /* has the side-effect of setting the current location if
+ * there's none and this one can be considered as a current one
+ */
+ clock_location_is_current (loc);
+
+ cd->locations = g_list_append (cd->locations, loc);
+ }
+ g_free (name);
+ g_free (city);
+
+ /* This will update everything related to locations to take into
+ * account the new location (via the mateconf notification) */
+ save_cities_store (cd);
+
+ edit_hide (edit_window, cd);
+}
+
+static void
+update_coords_helper (gfloat value, GtkWidget *entry, GtkWidget *combo)
+{
+ gchar *tmp;
+
+ tmp = g_strdup_printf ("%f", fabsf (value));
+ gtk_entry_set_text (GTK_ENTRY (entry), tmp);
+ g_free (tmp);
+
+ if (value > 0) {
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
+ } else {
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 1);
+ }
+}
+
+static void
+update_coords (ClockData *cd, gboolean valid, gfloat lat, gfloat lon)
+{
+ GtkWidget *lat_entry = _clock_get_widget (cd, "edit-location-latitude-entry");
+ GtkWidget *lon_entry = _clock_get_widget (cd, "edit-location-longitude-entry");
+ GtkWidget *lat_combo = _clock_get_widget (cd, "edit-location-latitude-combo");
+ GtkWidget *lon_combo = _clock_get_widget (cd, "edit-location-longitude-combo");
+
+ if (!valid) {
+ gtk_entry_set_text (GTK_ENTRY (lat_entry), "");
+ gtk_entry_set_text (GTK_ENTRY (lon_entry), "");
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lat_combo), -1);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lon_combo), -1);
+
+ return;
+ }
+
+ update_coords_helper (lat, lat_entry, lat_combo);
+ update_coords_helper (lon, lon_entry, lon_combo);
+}
+
+static void
+fill_timezone_combo_from_location (ClockData *cd, ClockLocation *loc)
+{
+ if (loc != NULL) {
+ mateweather_timezone_menu_set_tzid (cd->zone_combo,
+ clock_location_get_timezone (loc));
+ } else {
+ mateweather_timezone_menu_set_tzid (cd->zone_combo, NULL);
+ }
+}
+
+static void
+location_update_ok_sensitivity (ClockData *cd)
+{
+ GtkWidget *ok_button;
+ const gchar *timezone;
+ gchar *name;
+
+ ok_button = _clock_get_widget (cd, "edit-location-ok-button");
+
+ timezone = mateweather_timezone_menu_get_tzid (cd->zone_combo);
+ name = gtk_editable_get_chars (GTK_EDITABLE (cd->location_entry), 0, -1);
+
+ if (timezone && name && name[0] != '\0') {
+ gtk_widget_set_sensitive (ok_button, TRUE);
+ } else {
+ gtk_widget_set_sensitive (ok_button, FALSE);
+ }
+
+ g_free (name);
+}
+
+static void
+location_changed (GObject *object, GParamSpec *param, ClockData *cd)
+{
+ MateWeatherLocationEntry *entry = MATEWEATHER_LOCATION_ENTRY (object);
+ MateWeatherLocation *gloc;
+ MateWeatherTimezone *zone;
+ gboolean latlon_valid;
+ double latitude = 0.0, longitude = 0.0;
+
+ gloc = mateweather_location_entry_get_location (entry);
+
+ latlon_valid = gloc && mateweather_location_has_coords (gloc);
+ if (latlon_valid)
+ mateweather_location_get_coords (gloc, &latitude, &longitude);
+ update_coords (cd, latlon_valid, latitude, longitude);
+
+ zone = gloc ? mateweather_location_get_timezone (gloc) : NULL;
+ if (zone)
+ mateweather_timezone_menu_set_tzid (cd->zone_combo, mateweather_timezone_get_tzid (zone));
+ else
+ mateweather_timezone_menu_set_tzid (cd->zone_combo, NULL);
+
+ if (gloc)
+ mateweather_location_unref (gloc);
+}
+
+static void
+location_name_changed (GObject *object, ClockData *cd)
+{
+ location_update_ok_sensitivity (cd);
+}
+
+static void
+location_timezone_changed (GObject *object, GParamSpec *param, ClockData *cd)
+{
+ location_update_ok_sensitivity (cd);
+}
+
+static void
+edit_clear (ClockData *cd)
+{
+ GtkWidget *lat_entry = _clock_get_widget (cd, "edit-location-latitude-entry");
+ GtkWidget *lon_entry = _clock_get_widget (cd, "edit-location-longitude-entry");
+ GtkWidget *lat_combo = _clock_get_widget (cd, "edit-location-latitude-combo");
+ GtkWidget *lon_combo = _clock_get_widget (cd, "edit-location-longitude-combo");
+
+ /* clear out the old data */
+ mateweather_location_entry_set_location (cd->location_entry, NULL);
+ mateweather_timezone_menu_set_tzid (cd->zone_combo, NULL);
+
+ gtk_entry_set_text (GTK_ENTRY (lat_entry), "");
+ gtk_entry_set_text (GTK_ENTRY (lon_entry), "");
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lat_combo), -1);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lon_combo), -1);
+}
+
+static void
+edit_hide (GtkWidget *unused, ClockData *cd)
+{
+ GtkWidget *edit_window = _clock_get_widget (cd, "edit-location-window");
+
+ gtk_widget_hide (edit_window);
+ edit_clear (cd);
+}
+
+static gboolean
+edit_delete (GtkWidget *unused, GdkEvent *event, ClockData *cd)
+{
+ edit_hide (unused, cd);
+
+ return TRUE;
+}
+
+static gboolean
+edit_hide_event (GtkWidget *widget, GdkEvent *event, ClockData *cd)
+{
+ edit_hide (widget, cd);
+
+ return TRUE;
+}
+
+static void
+prefs_hide (GtkWidget *widget, ClockData *cd)
+{
+ GtkWidget *tree;
+
+ edit_hide (widget, cd);
+
+ gtk_widget_hide (cd->prefs_window);
+
+ tree = _clock_get_widget (cd, "cities_list");
+
+ gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree)));
+
+ refresh_click_timeout_time_only (cd);
+}
+
+static gboolean
+prefs_hide_event (GtkWidget *widget, GdkEvent *event, ClockData *cd)
+{
+ prefs_hide (widget, cd);
+
+ return TRUE;
+}
+
+static void
+prefs_help (GtkWidget *widget, ClockData *cd)
+{
+ clock_utils_display_help (cd->prefs_window,
+ "clock", "clock-settings");
+}
+
+static void
+remove_tree_row (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
+{
+ ClockData *cd = data;
+ ClockLocation *loc = NULL;
+
+ gtk_tree_model_get (model, iter, COL_CITY_LOC, &loc, -1);
+ cd->locations = g_list_remove (cd->locations, loc);
+ g_object_unref (loc);
+
+ /* This will update everything related to locations to take into
+ * account the removed location (via the mateconf notification) */
+ save_cities_store (cd);
+}
+
+static void
+run_prefs_locations_remove (GtkButton *button, ClockData *cd)
+{
+ GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (cd->prefs_locations));
+
+ gtk_tree_selection_selected_foreach (sel, remove_tree_row, cd);
+}
+
+static void
+run_prefs_locations_add (GtkButton *button, ClockData *cd)
+{
+ GtkWidget *edit_window = _clock_get_widget (cd, "edit-location-window");
+
+ fill_timezone_combo_from_location (cd, NULL);
+
+ g_object_set_data (G_OBJECT (edit_window), "clock-location", NULL);
+ gtk_window_set_title (GTK_WINDOW (edit_window), _("Choose Location"));
+ gtk_window_set_transient_for (GTK_WINDOW (edit_window), GTK_WINDOW (cd->prefs_window));
+
+ if (g_object_get_data (G_OBJECT (edit_window), "delete-handler") == NULL) {
+ g_object_set_data (G_OBJECT (edit_window), "delete-handler",
+ GINT_TO_POINTER (g_signal_connect (edit_window, "delete_event", G_CALLBACK (edit_delete), cd)));
+ }
+
+ location_update_ok_sensitivity (cd);
+
+ gtk_widget_grab_focus (GTK_WIDGET (cd->location_entry));
+ gtk_editable_set_position (GTK_EDITABLE (cd->location_entry), -1);
+
+ gtk_window_present_with_time (GTK_WINDOW (edit_window), gtk_get_current_event_time ());
+}
+
+static void
+edit_tree_row (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
+{
+ ClockData *cd = data;
+ ClockLocation *loc;
+ const char *name;
+ gchar *tmp;
+ gfloat lat, lon;
+
+ /* fill the dialog with this location's data, show it */
+ GtkWidget *edit_window = _clock_get_widget (cd, "edit-location-window");
+
+ GtkWidget *lat_entry = _clock_get_widget (cd, "edit-location-latitude-entry");
+
+ GtkWidget *lon_entry = _clock_get_widget (cd, "edit-location-longitude-entry");
+
+ GtkWidget *lat_combo = _clock_get_widget (cd, "edit-location-latitude-combo");
+
+ GtkWidget *lon_combo = _clock_get_widget (cd, "edit-location-longitude-combo");
+
+ edit_clear (cd);
+
+ gtk_tree_model_get (model, iter, COL_CITY_LOC, &loc, -1);
+
+ mateweather_location_entry_set_city (cd->location_entry,
+ clock_location_get_city (loc),
+ clock_location_get_weather_code (loc));
+ name = clock_location_get_name (loc);
+ if (name && name[0]) {
+ gtk_entry_set_text (GTK_ENTRY (cd->location_entry), name);
+ }
+
+ clock_location_get_coords (loc, &lat, &lon);
+
+ fill_timezone_combo_from_location (cd, loc);
+
+ tmp = g_strdup_printf ("%f", fabsf(lat));
+ gtk_entry_set_text (GTK_ENTRY (lat_entry), tmp);
+ g_free (tmp);
+
+ if (lat > 0) {
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lat_combo), 0);
+ } else {
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lat_combo), 1);
+ }
+
+ tmp = g_strdup_printf ("%f", fabsf(lon));
+ gtk_entry_set_text (GTK_ENTRY (lon_entry), tmp);
+ g_free (tmp);
+
+ if (lon > 0) {
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lon_combo), 0);
+ } else {
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lon_combo), 1);
+ }
+
+ location_update_ok_sensitivity (cd);
+
+ g_object_set_data (G_OBJECT (edit_window), "clock-location", loc);
+
+ gtk_widget_grab_focus (GTK_WIDGET (cd->location_entry));
+ gtk_editable_set_position (GTK_EDITABLE (cd->location_entry), -1);
+
+ gtk_window_set_title (GTK_WINDOW (edit_window), _("Edit Location"));
+ gtk_window_present (GTK_WINDOW (edit_window));
+}
+
+static void
+run_prefs_locations_edit (GtkButton *unused, ClockData *cd)
+{
+ GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (cd->prefs_locations));
+
+ gtk_tree_selection_selected_foreach (sel, edit_tree_row, cd);
+}
+
+static void
+set_12hr_format_radio_cb (GtkWidget *widget, ClockData *cd)
+{
+ const gchar *val;
+ ClockFormat format;
+
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
+ format = CLOCK_FORMAT_12;
+ else
+ format = CLOCK_FORMAT_24;
+
+ val = mateconf_enum_to_string (format_type_enum_map, format);
+
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet),
+ KEY_FORMAT, val, NULL);
+}
+
+static void
+temperature_combo_changed (GtkComboBox *combo, ClockData *cd)
+{
+ int value;
+ int old_value;
+ const gchar *str;
+
+ value = gtk_combo_box_get_active (combo) + 1;
+
+ if (cd->use_temperature_default)
+ old_value = TEMP_UNIT_DEFAULT;
+ else
+ old_value = cd->temperature_unit;
+
+ if (value == old_value)
+ return;
+
+ str = mateweather_prefs_temp_enum_to_string (value);
+
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet),
+ KEY_TEMPERATURE_UNIT, str, NULL);
+}
+
+static void
+speed_combo_changed (GtkComboBox *combo, ClockData *cd)
+{
+ int value;
+ int old_value;
+ const gchar *str;
+
+ value = gtk_combo_box_get_active (combo) + 1;
+
+ if (cd->use_speed_default)
+ old_value = SPEED_UNIT_DEFAULT;
+ else
+ old_value = cd->speed_unit;
+
+ if (value == old_value)
+ return;
+
+ str = mateweather_prefs_speed_enum_to_string (value);
+
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet),
+ KEY_SPEED_UNIT, str, NULL);
+}
+
+static void
+fill_prefs_window (ClockData *cd)
+{
+ static const int temperatures[] = {
+ TEMP_UNIT_DEFAULT,
+ TEMP_UNIT_KELVIN,
+ TEMP_UNIT_CENTIGRADE,
+ TEMP_UNIT_FAHRENHEIT,
+ -1
+ };
+
+ static const int speeds[] = {
+ SPEED_UNIT_DEFAULT,
+ SPEED_UNIT_MS,
+ SPEED_UNIT_KPH,
+ SPEED_UNIT_MPH,
+ SPEED_UNIT_KNOTS,
+ SPEED_UNIT_BFT,
+ -1
+ };
+
+ GtkWidget *radio_12hr;
+ GtkWidget *radio_24hr;
+ GtkWidget *widget;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *col;
+ GtkListStore *store;
+ int i;
+
+ /* Set the 12 hour / 24 hour widget */
+ radio_12hr = _clock_get_widget (cd, "12hr_radio");
+ radio_24hr = _clock_get_widget (cd, "24hr_radio");
+
+ if (cd->format == CLOCK_FORMAT_12)
+ widget = radio_12hr;
+ else
+ widget = radio_24hr;
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
+
+ g_signal_connect (radio_12hr, "toggled",
+ G_CALLBACK (set_12hr_format_radio_cb), cd);
+
+ /* Set the "Show Date" checkbox */
+ widget = _clock_get_widget (cd, "date_check");
+ g_signal_connect (widget, "toggled",
+ G_CALLBACK (set_show_date_cb), cd);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->showdate);
+
+ /* Set the "Show Seconds" checkbox */
+ widget = _clock_get_widget (cd, "seconds_check");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->showseconds);
+ g_signal_connect (widget, "toggled",
+ G_CALLBACK (set_show_seconds_cb), cd);
+
+ /* Set the "Show weather" checkbox */
+ widget = _clock_get_widget (cd, "weather_check");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->show_weather);
+ g_signal_connect (widget, "toggled",
+ G_CALLBACK (set_show_weather_cb), cd);
+
+ /* Set the "Show temperature" checkbox */
+ widget = _clock_get_widget (cd, "temperature_check");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->show_temperature);
+ g_signal_connect (widget, "toggled",
+ G_CALLBACK (set_show_temperature_cb), cd);
+
+ /* Fill the Cities list */
+ widget = _clock_get_widget (cd, "cities_list");
+
+ renderer = gtk_cell_renderer_text_new ();
+ col = gtk_tree_view_column_new_with_attributes (_("City Name"), renderer, "text", COL_CITY_NAME, NULL);
+ gtk_tree_view_insert_column (GTK_TREE_VIEW (widget), col, -1);
+
+ renderer = gtk_cell_renderer_text_new ();
+ col = gtk_tree_view_column_new_with_attributes (_("City Time Zone"), renderer, "text", COL_CITY_TZ, NULL);
+ gtk_tree_view_insert_column (GTK_TREE_VIEW (widget), col, -1);
+
+ if (cd->cities_store == NULL)
+ create_cities_store (cd);
+
+ gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
+ GTK_TREE_MODEL (cd->cities_store));
+
+ /* Temperature combo */
+ widget = _clock_get_widget (cd, "temperature_combo");
+ store = gtk_list_store_new (1, G_TYPE_STRING);
+ gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 0, NULL);
+
+ for (i = 0; temperatures[i] != -1; i++)
+ gtk_combo_box_append_text (GTK_COMBO_BOX (widget),
+ mateweather_prefs_get_temp_display_name (temperatures[i]));
+
+ update_temperature_combo (cd);
+ g_signal_connect (widget, "changed",
+ G_CALLBACK (temperature_combo_changed), cd);
+
+ /* Wind speed combo */
+ widget = _clock_get_widget (cd, "wind_speed_combo");
+ store = gtk_list_store_new (1, G_TYPE_STRING);
+ gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 0, NULL);
+
+ for (i = 0; speeds[i] != -1; i++)
+ gtk_combo_box_append_text (GTK_COMBO_BOX (widget),
+ mateweather_prefs_get_speed_display_name (speeds[i]));
+
+ update_speed_combo (cd);
+ g_signal_connect (widget, "changed",
+ G_CALLBACK (speed_combo_changed), cd);
+}
+
+static void
+ensure_prefs_window_is_created (ClockData *cd)
+{
+ GtkWidget *edit_window;
+ GtkWidget *prefs_close_button;
+ GtkWidget *prefs_help_button;
+ GtkWidget *clock_options;
+ GtkWidget *edit_cancel_button;
+ GtkWidget *edit_ok_button;
+ GtkWidget *location_box;
+ GtkWidget *zone_box;
+ GtkWidget *location_name_label;
+ GtkWidget *timezone_label;
+ GtkTreeSelection *selection;
+ MateWeatherLocation *world;
+
+ if (cd->prefs_window)
+ return;
+
+ cd->prefs_window = _clock_get_widget (cd, "prefs-window");
+
+ gtk_window_set_icon_name (GTK_WINDOW (cd->prefs_window), CLOCK_ICON);
+
+ prefs_close_button = _clock_get_widget (cd, "prefs-close-button");
+ prefs_help_button = _clock_get_widget (cd, "prefs-help-button");
+ clock_options = _clock_get_widget (cd, "clock-options");
+ cd->prefs_locations = GTK_TREE_VIEW (_clock_get_widget (cd, "cities_list"));
+ location_name_label = _clock_get_widget (cd, "location-name-label");
+ timezone_label = _clock_get_widget (cd, "timezone-label");
+
+
+ if (!clock_locale_supports_am_pm ())
+ gtk_widget_hide (clock_options);
+
+ selection = gtk_tree_view_get_selection (cd->prefs_locations);
+ g_signal_connect (G_OBJECT (selection), "changed",
+ G_CALLBACK (prefs_locations_changed), cd);
+
+ g_signal_connect (G_OBJECT (cd->prefs_window), "delete_event",
+ G_CALLBACK (prefs_hide_event), cd);
+
+ g_signal_connect (G_OBJECT (prefs_close_button), "clicked",
+ G_CALLBACK (prefs_hide), cd);
+
+ g_signal_connect (G_OBJECT (prefs_help_button), "clicked",
+ G_CALLBACK (prefs_help), cd);
+
+ cd->prefs_location_remove_button = _clock_get_widget (cd, "prefs-locations-remove-button");
+
+ g_signal_connect (G_OBJECT (cd->prefs_location_remove_button), "clicked",
+ G_CALLBACK (run_prefs_locations_remove), cd);
+
+ cd->prefs_location_add_button = _clock_get_widget (cd, "prefs-locations-add-button");
+
+ g_signal_connect (G_OBJECT (cd->prefs_location_add_button), "clicked",
+ G_CALLBACK (run_prefs_locations_add), cd);
+
+ cd->prefs_location_edit_button = _clock_get_widget (cd, "prefs-locations-edit-button");
+
+ g_signal_connect (G_OBJECT (cd->prefs_location_edit_button), "clicked",
+ G_CALLBACK (run_prefs_locations_edit), cd);
+
+ edit_window = _clock_get_widget (cd, "edit-location-window");
+
+ gtk_window_set_transient_for (GTK_WINDOW (edit_window),
+ GTK_WINDOW (cd->prefs_window));
+
+ g_signal_connect (G_OBJECT (edit_window), "delete_event",
+ G_CALLBACK (edit_hide_event), cd);
+
+ edit_cancel_button = _clock_get_widget (cd, "edit-location-cancel-button");
+
+ edit_ok_button = _clock_get_widget (cd, "edit-location-ok-button");
+
+ world = mateweather_location_new_world (FALSE);
+
+ location_box = _clock_get_widget (cd, "edit-location-name-box");
+ cd->location_entry = MATEWEATHER_LOCATION_ENTRY (mateweather_location_entry_new (world));
+ gtk_widget_show (GTK_WIDGET (cd->location_entry));
+ gtk_container_add (GTK_CONTAINER (location_box), GTK_WIDGET (cd->location_entry));
+ gtk_label_set_mnemonic_widget (GTK_LABEL (location_name_label),
+ GTK_WIDGET (cd->location_entry));
+
+ g_signal_connect (G_OBJECT (cd->location_entry), "notify::location",
+ G_CALLBACK (location_changed), cd);
+ g_signal_connect (G_OBJECT (cd->location_entry), "changed",
+ G_CALLBACK (location_name_changed), cd);
+
+ zone_box = _clock_get_widget (cd, "edit-location-timezone-box");
+ cd->zone_combo = MATEWEATHER_TIMEZONE_MENU (mateweather_timezone_menu_new (world));
+ gtk_widget_show (GTK_WIDGET (cd->zone_combo));
+ gtk_container_add (GTK_CONTAINER (zone_box), GTK_WIDGET (cd->zone_combo));
+ gtk_label_set_mnemonic_widget (GTK_LABEL (timezone_label),
+ GTK_WIDGET (cd->zone_combo));
+
+ g_signal_connect (G_OBJECT (cd->zone_combo), "notify::tzid",
+ G_CALLBACK (location_timezone_changed), cd);
+
+ mateweather_location_unref (world);
+
+ g_signal_connect (G_OBJECT (edit_cancel_button), "clicked",
+ G_CALLBACK (edit_hide), cd);
+
+ g_signal_connect (G_OBJECT (edit_ok_button), "clicked",
+ G_CALLBACK (run_prefs_edit_save), cd);
+
+ /* Set up the time setting section */
+
+ cd->time_settings_button = _clock_get_widget (cd, "time-settings-button");
+ g_signal_connect (cd->time_settings_button, "clicked",
+ G_CALLBACK (run_time_settings), cd);
+
+ /* fill it with the current preferences */
+ fill_prefs_window (cd);
+}
+
+static void
+display_properties_dialog (ClockData *cd, gboolean start_in_locations_page)
+{
+ ensure_prefs_window_is_created (cd);
+
+ if (start_in_locations_page) {
+ GtkWidget *notebook = _clock_get_widget (cd, "notebook");
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 1);
+ }
+
+ update_set_time_button (cd);
+
+ gtk_window_set_screen (GTK_WINDOW (cd->prefs_window),
+ gtk_widget_get_screen (cd->applet));
+ gtk_window_present (GTK_WINDOW (cd->prefs_window));
+
+ refresh_click_timeout_time_only (cd);
+
+ /* FMQ: cd->props was the old preferences window; remove references to it */
+ /* FMQ: connect to the Help button by hand; look at properties_response_cb() for the help code */
+#if 0
+ /* FMQ: check the code below; replace the proper parts */
+ GtkWidget *hbox;
+ GtkWidget *vbox;
+ GtkWidget *combo;
+ GtkWidget *label;
+
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("24 hour"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("UNIX time"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("Internet time"));
+
+ gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0);
+ gtk_widget_show (combo);
+
+ cd->custom_hbox = gtk_hbox_new (FALSE, 12);
+ gtk_box_pack_start (GTK_BOX (vbox), cd->custom_hbox, TRUE, TRUE, 0);
+
+ cd->custom_label = gtk_label_new_with_mnemonic (_("Custom _format:"));
+ gtk_label_set_use_markup (GTK_LABEL (cd->custom_label), TRUE);
+ gtk_label_set_justify (GTK_LABEL (cd->custom_label),
+ GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment (GTK_MISC (cd->custom_label), 0, 0.5);
+ gtk_box_pack_start (GTK_BOX (cd->custom_hbox),
+ cd->custom_label,
+ FALSE, FALSE, 0);
+
+ cd->custom_entry = gtk_entry_new ();
+ gtk_box_pack_start (GTK_BOX (cd->custom_hbox),
+ cd->custom_entry,
+ FALSE, FALSE, 0);
+ gtk_entry_set_text (GTK_ENTRY (cd->custom_entry),
+ cd->custom_format);
+ g_signal_connect (cd->custom_entry, "changed",
+ G_CALLBACK (set_custom_format_cb),
+ cd);
+
+ g_signal_connect (cd->props, "destroy",
+ G_CALLBACK (gtk_widget_destroyed),
+ &cd->props);
+ g_signal_connect (cd->props, "response",
+ G_CALLBACK (properties_response_cb),
+ cd);
+
+ cd->custom_format_shown = FALSE;
+ update_properties_for_format (cd, GTK_COMBO_BOX (combo), cd->format);
+
+ /* valid values begin from 1 */
+ if (cd->can_handle_format_12)
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo),
+ cd->format - 1);
+ else
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo),
+ cd->format - 2);
+
+ g_signal_connect (combo, "changed",
+ G_CALLBACK (set_format_cb), cd);
+
+ /* Now set up the sensitivity based on mateconf key writability */
+ setup_writability_sensitivity (cd, combo, label, KEY_FORMAT);
+ setup_writability_sensitivity (cd, cd->custom_entry, cd->custom_label,
+ KEY_CUSTOM_FORMAT);
+ setup_writability_sensitivity (cd, cd->showseconds_check, NULL, KEY_SHOW_SECONDS);
+ setup_writability_sensitivity (cd, cd->showdate_check, NULL, KEY_SHOW_DATE);
+
+ gtk_widget_show (cd->props);
+#endif
+}
+
+static void
+verb_display_properties_dialog (GtkAction *action,
+ ClockData *cd)
+{
+ display_properties_dialog (cd, FALSE);
+}
+
+static void
+display_help_dialog (GtkAction *action,
+ ClockData *cd)
+{
+ clock_utils_display_help (cd->applet, "clock", NULL);
+}
+
+static void display_about_dialog(GtkAction* action, ClockData* cd)
+{
+ static const gchar* authors[] = {
+ "George Lebl <[email protected]>",
+ "Gediminas Paulauskas <[email protected]>",
+ NULL
+ };
+
+ static const char* documenters[] = {
+ "Dan Mueth <[email protected]>",
+ NULL
+ };
+
+ char copyright[] = \
+ "Copyright \xc2\xa9 1998-2004 Free Software Foundation, Inc.";
+
+ gtk_show_about_dialog(NULL,
+ "program-name", _("Clock"),
+ "authors", authors,
+ "comments", _("The Clock displays the current time and date"),
+ "copyright", copyright,
+ "documenters", documenters,
+ "logo-icon-name", CLOCK_ICON,
+ "translator-credits", _("translator-credits"),
+ "version", VERSION,
+ "website", "http://matsusoft.com.ar/projects/mate/",
+ NULL);
+}
+
+static gboolean
+clock_factory (MatePanelApplet *applet,
+ const char *iid,
+ gpointer data)
+{
+ gboolean retval = FALSE;
+
+ if (!strcmp (iid, "ClockApplet"))
+ retval = fill_clock_applet (applet);
+
+ return retval;
+}
+
+#ifdef CLOCK_INPROCESS
+MATE_PANEL_APPLET_IN_PROCESS_FACTORY ("ClockAppletFactory",
+ PANEL_TYPE_APPLET,
+ "ClockApplet",
+ clock_factory,
+ NULL)
+#else
+MATE_PANEL_APPLET_OUT_PROCESS_FACTORY ("ClockAppletFactory",
+ PANEL_TYPE_APPLET,
+ "ClockApplet",
+ clock_factory,
+ NULL)
+#endif
diff --git a/applets/clock/clock.h b/applets/clock/clock.h
new file mode 100644
index 00000000..f2347f68
--- /dev/null
+++ b/applets/clock/clock.h
@@ -0,0 +1,41 @@
+/*
+ * clock.h
+ *
+ * Copyright (C) 2007 Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Vincent Untz <[email protected]>
+ *
+ * Most of the original code comes from clock.c
+ */
+
+#ifndef CLOCK_H
+#define CLOCK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CLOCK_ICON "mate-panel-clock"
+#define CLOCK_SCHEMA_DIR "/schemas/apps/clock_applet/prefs"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CLOCK_H */
diff --git a/applets/clock/clock.schemas.in b/applets/clock/clock.schemas.in
new file mode 100644
index 00000000..badec94e
--- /dev/null
+++ b/applets/clock/clock.schemas.in
@@ -0,0 +1,313 @@
+<?xml version="1.0"?>
+<mateconfschemafile>
+ <schemalist>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/format</key>
+ <owner>clock-applet</owner>
+ <type>string</type>
+ <locale name="C">
+ <default>
+ <!-- Translators:
+ This controls whether the MATE panel clock should display time in 24 hour mode
+ or 12 hour mode by default. The only valid values for this are "24-hour" and
+ "12-hour". If your locale uses 24 hour time notation, translate this to "24-hour".
+ If your locale uses 12 hour time notation with am/pm, translate this to "12-hour".
+
+ Do NOT translate this into anything else than "24-hour" or "12-hour". For example,
+ if you translate this to "24 sata" or anything else that isn't "24-hour" or
+ "12-hour", things will not work.
+ -->
+ 24-hour
+ </default>
+ <short>Hour format</short>
+ <long>
+ This key specifies the hour format used by the clock applet.
+ Possible values are "12-hour", "24-hour", "internet", "unix" and
+ "custom".
+ If set to "internet", the clock will display Internet time.
+ The Internet time system divides the day into 1000 ".beats". There
+ are no time zones in this system, so time is the same all over the
+ world.
+ If set to "unix", the clock will display time in seconds since
+ Epoch, i.e. 1970-01-01.
+ If set to "custom", the clock will display time according to the
+ format specified in the custom_format key.
+ </long>
+ </locale>
+ <locale name="en_US">
+ <default>12-hour</default>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/custom_format</key>
+ <owner>clock-applet</owner>
+ <type>string</type>
+ <default></default>
+ <locale name="C">
+ <short>Custom format of the clock</short>
+ <long>
+ This key specifies the format used by the clock applet when the
+ format key is set to "custom". You can use conversion specifiers
+ understood by strftime() to obtain a specific format. See the
+ strftime() manual for more information.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/show_seconds</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Show time with seconds</short>
+ <long>If true, display seconds in time.</long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/show_date</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Show date in clock</short>
+ <long>If true, display date in the clock, in addition to time.</long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/show_tooltip</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Show date in tooltip</short>
+ <long>
+ If true, show date in a tooltip when the pointer is over the clock.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/show_weather</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Show weather in clock</short>
+ <long>If true, display a weather icon.</long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/show_temperature</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Show temperature in clock</short>
+ <long>If true, show the temperature next to the weather icon.</long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/gmt_time</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Use UTC</short>
+ <long>
+ The use of this key was deprecated in MATE 2.28 in favour of the
+ use of timezones. The schema is retained for compatibility with
+ older versions.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/config_tool</key>
+ <owner>clock-applet</owner>
+ <type>string</type>
+ <default> </default>
+ <locale name="C">
+ <short>Time configuration tool</short>
+ <long>
+ The use of this key was deprecated in MATE 2.22 with the use
+ of an internal time configuration tool. The schema is retained for
+ compatibility with older versions.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/show_week_numbers</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Show week numbers in calendar</short>
+ <long>
+ If true, show week numbers in the calendar.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/expand_appointments</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Expand list of appointments</short>
+ <long>
+ If true, expand the list of appointments in the calendar window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/expand_birthdays</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Expand list of birthdays</short>
+ <long>
+ If true, expand the list of birthdays in the calendar window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/expand_tasks</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Expand list of tasks</short>
+ <long>
+ If true, expand the list of tasks in the calendar window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/expand_weather</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Expand list of weather information</short>
+ <long>
+ If true, expand the list of weather information in the calendar
+ window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/expand_locations</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Expand list of locations</short>
+ <long>
+ If true, expand the list of locations in the calendar
+ window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/hour_format</key>
+ <owner>clock-applet</owner>
+ <type>int</type>
+ <default>12</default>
+ <locale name="C">
+ <short>Hour format</short>
+ <long>
+ The use of this key was deprecated in MATE 2.6 in favour of the
+ 'format' key. The schema is retained for compatibility with older
+ versions.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/unix_time</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Use UNIX time</short>
+ <long>
+ The use of this key was deprecated in MATE 2.6 in favour of the
+ 'format' key. The schema is retained for compatibility with older
+ versions.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/internet_time</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Use Internet time</short>
+ <long>
+ The use of this key was deprecated in MATE 2.6 in favour of the
+ 'format' key. The schema is retained for compatibility with older
+ versions.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/cities</key>
+ <owner>clock-applet</owner>
+ <type>list</type>
+ <list_type>string</list_type>
+ <default>[]</default>
+ <locale name="C">
+ <short>List of locations</short>
+ <long>
+ A list of locations to display in the calendar window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/temperature_unit</key>
+ <owner>clock-applet</owner>
+ <type>string</type>
+ <default>Default</default>
+ <locale name="C">
+ <short>Temperature unit</short>
+ <long>
+ The unit to use when showing temperatures.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/speed_unit</key>
+ <owner>clock-applet</owner>
+ <type>string</type>
+ <default>Default</default>
+ <locale name="C">
+ <short>Speed unit</short>
+ <long>
+ The unit to use when showing wind speed.
+ </long>
+ </locale>
+ </schema>
+
+ </schemalist>
+
+</mateconfschemafile>
diff --git a/applets/clock/clock.ui b/applets/clock/clock.ui
new file mode 100644
index 00000000..11d9f8db
--- /dev/null
+++ b/applets/clock/clock.ui
@@ -0,0 +1,1136 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy toplevel-contextual -->
+ <object class="GtkDialog" id="edit-location-window">
+ <property name="border_width">5</property>
+ <property name="resizable">False</property>
+ <property name="type_hint">dialog</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox3">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkTable" id="table26">
+ <property name="visible">True</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkVBox" id="vbox34">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow12">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">never</property>
+ <child>
+ <object class="GtkViewport" id="viewport3">
+ <property name="visible">True</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkImage" id="image30">
+ <property name="stock">gtk-missing-image</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="table27">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="n_rows">5</property>
+ <property name="n_columns">4</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label243">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Languages that have a single word that translates as either &quot;state&quot; or &quot;province&quot; should use that instead of &quot;region&quot;.">&lt;small&gt;&lt;i&gt;Type a city, region, or country name and then select a match from the pop-up.&lt;/i&gt;&lt;/small&gt;</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="edit-location-name-box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="edit-location-timezone-box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="timezone-label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Timezone:</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="location-name-label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Location Name:</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="edit-location-latitude-entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">&#x2022;</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="edit-location-latitude-combo">
+ <property name="visible">True</property>
+ <property name="model">liststore2</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext2"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label240">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;i&gt;(optional)&lt;/i&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label239">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;i&gt;(optional)&lt;/i&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="edit-location-longitude-combo">
+ <property name="visible">True</property>
+ <property name="model">liststore1</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext1"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="edit-location-longitude-entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">&#x2022;</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label238">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">L_ongitude:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">edit-location-longitude-entry</property>
+ </object>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox35">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkLabel" id="label237">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">L_atitude:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">edit-location-latitude-entry</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area3">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkButton" id="edit-location-cancel-button">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="edit-location-ok-button">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">edit-location-cancel-button</action-widget>
+ <action-widget response="-5">edit-location-ok-button</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkDialog" id="set-time-window">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Time &amp; Date</property>
+ <property name="resizable">False</property>
+ <property name="type_hint">dialog</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox2">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">7</property>
+ <property name="bottom_padding">6</property>
+ <property name="left_padding">7</property>
+ <property name="right_padding">7</property>
+ <child>
+ <object class="GtkHBox" id="time_settings_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkCalendar" id="calendar">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="year">2009</property>
+ <property name="month">5</property>
+ <property name="day">3</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="table1">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkHBox" id="hbox61">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkSpinButton" id="hours_spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">&#x25CF;</property>
+ <property name="adjustment">adjustment3</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="minutes_spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">&#x25CF;</property>
+ <property name="adjustment">adjustment2</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="seconds_spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">&#x25CF;</property>
+ <property name="adjustment">adjustment1</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="current_time_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label">23:59:59</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label236">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Time:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">hours_spin</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label235">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Current Time:</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area2">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkButton" id="cancel-set-time-button">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="set-time-button">
+ <property name="label" translatable="yes">_Set System Time</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">cancel-set-time-button</action-widget>
+ <action-widget response="0">set-time-button</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkListStore" id="liststore1">
+ <columns>
+ <!-- column-name item -->
+ <column type="gchararray"/>
+ </columns>
+ <data>
+ <row>
+ <col id="0" translatable="yes">East</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">West</col>
+ </row>
+ </data>
+ </object>
+ <object class="GtkListStore" id="liststore2">
+ <columns>
+ <!-- column-name item -->
+ <column type="gchararray"/>
+ </columns>
+ <data>
+ <row>
+ <col id="0" translatable="yes">North</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">South</col>
+ </row>
+ </data>
+ </object>
+ <object class="GtkDialog" id="prefs-window">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Clock Preferences</property>
+ <property name="resizable">False</property>
+ <property name="window_position">center</property>
+ <property name="type_hint">dialog</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkNotebook" id="notebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="border_width">5</property>
+ <child>
+ <object class="GtkVBox" id="vbox17">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkVBox" id="clock-options">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label210">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Clock Format</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment32">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkHBox" id="hbox49">
+ <property name="visible">True</property>
+ <property name="spacing">13</property>
+ <child>
+ <object class="GtkRadioButton" id="12hr_radio">
+ <property name="label" translatable="yes">_12 hour format</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="24hr_radio">
+ <property name="label" translatable="yes">_24 hour format</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">12hr_radio</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox29">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label229">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Panel Display</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment33">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox30">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkCheckButton" id="date_check">
+ <property name="label" translatable="yes">Show the _date</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="seconds_check">
+ <property name="label" translatable="yes">Show seco_nds</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="weather_check">
+ <property name="label" translatable="yes">Show _weather</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="temperature_check">
+ <property name="label" translatable="yes">Show _temperature</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label209">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">General</property>
+ </object>
+ <packing>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox24">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkHBox" id="hbox54">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow10">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">never</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="cities_list">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <property name="hover_expand">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVButtonBox" id="vbuttonbox2">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="layout_style">start</property>
+ <child>
+ <object class="GtkButton" id="prefs-locations-add-button">
+ <property name="label">gtk-add</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="prefs-locations-edit-button">
+ <property name="label">gtk-edit</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="prefs-locations-remove-button">
+ <property name="label">gtk-remove</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label220">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Locations</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox27">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkVBox" id="vbox28">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label224">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Display</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment34">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkTable" id="table25">
+ <property name="visible">True</property>
+ <property name="n_rows">4</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkComboBox" id="visibility_combo"/>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label232">
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Visibility unit:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">visibility_combo</property>
+ </object>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="pressure_combo"/>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label231">
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Pressure unit:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">pressure_combo</property>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="wind_speed_combo">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="temperature_combo">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label228">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Wind speed unit:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">wind_speed_combo</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label227">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Temperature unit:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">temperature_combo</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label223">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Weather</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkButton" id="prefs-help-button">
+ <property name="label">gtk-help</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="time-settings-button">
+ <property name="label" translatable="yes">Time _Settings</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="prefs-close-button">
+ <property name="label">gtk-close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-11">prefs-help-button</action-widget>
+ <action-widget response="0">time-settings-button</action-widget>
+ <action-widget response="-7">prefs-close-button</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkAdjustment" id="adjustment1">
+ <property name="value">59</property>
+ <property name="upper">59</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">30</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment2">
+ <property name="value">59</property>
+ <property name="upper">59</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">30</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment3">
+ <property name="value">23</property>
+ <property name="upper">23</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">12</property>
+ </object>
+</interface>
diff --git a/applets/clock/org.mate.panel.ClockApplet.mate-panel-applet.in.in b/applets/clock/org.mate.panel.ClockApplet.mate-panel-applet.in.in
new file mode 100644
index 00000000..31ccda1f
--- /dev/null
+++ b/applets/clock/org.mate.panel.ClockApplet.mate-panel-applet.in.in
@@ -0,0 +1,18 @@
+[Applet Factory]
+Id=ClockAppletFactory
+InProcess=@IN_PROCESS@
+Location=@LOCATION@
+_Name=Clock Applet Factory
+_Description=Factory for clock applet
+
+[ClockApplet]
+_Name=Clock
+_Description=Get the current time and date
+Icon=mate-panel-clock
+MateComponentId=OAFIID:MATE_ClockApplet;
+X-MATE-Bugzilla-Bugzilla=MATE
+X-MATE-Bugzilla-Product=mate-panel
+X-MATE-Bugzilla-Component=clock
+X-MATE-Bugzilla-Version=@VERSION@
+X-MATE-Bugzilla-OtherBinaries=clock-applet
+
diff --git a/applets/clock/org.mate.panel.applet.ClockAppletFactory.service.in b/applets/clock/org.mate.panel.applet.ClockAppletFactory.service.in
new file mode 100644
index 00000000..bb866606
--- /dev/null
+++ b/applets/clock/org.mate.panel.applet.ClockAppletFactory.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.mate.panel.applet.ClockAppletFactory
+Exec=@LOCATION@
diff --git a/applets/clock/pixmaps/Makefile.am b/applets/clock/pixmaps/Makefile.am
new file mode 100644
index 00000000..3e9f5077
--- /dev/null
+++ b/applets/clock/pixmaps/Makefile.am
@@ -0,0 +1,21 @@
+icondir = $(datadir)/mate-panel/pixmaps
+icon_DATA = \
+ clock-calendar-icon.png \
+ clock-face-large.svg \
+ clock-face-small.svg \
+ clock-face-small-morning.svg \
+ clock-face-small-day.svg \
+ clock-face-small-evening.svg \
+ clock-face-small-night.svg \
+ clock-map.png \
+ clock-map-location-marker.png \
+ clock-map-location-current.png \
+ clock-map-location-hilight.png
+
+EXTRA_DIST = \
+ clock-map.svg \
+ $(icon_DATA)
+
+MAINTAINERCLEANFILES = Makefile.in
+
+-include $(top_srcdir)/git.mk
diff --git a/applets/clock/pixmaps/Makefile.in b/applets/clock/pixmaps/Makefile.in
new file mode 100644
index 00000000..11e6f2ff
--- /dev/null
+++ b/applets/clock/pixmaps/Makefile.in
@@ -0,0 +1,537 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = applets/clock/pixmaps
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/d-type.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(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)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+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)$(icondir)"
+DATA = $(icon_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CLOCK_CFLAGS = @CLOCK_CFLAGS@
+CLOCK_EDS_ICONDIR = @CLOCK_EDS_ICONDIR@
+CLOCK_LIBS = @CLOCK_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGG_SMCLIENT_CFLAGS = @EGG_SMCLIENT_CFLAGS@
+EGG_SMCLIENT_LIBS = @EGG_SMCLIENT_LIBS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FISH_CFLAGS = @FISH_CFLAGS@
+FISH_LIBS = @FISH_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_QUERYMODULES = @GIO_QUERYMODULES@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBMATE_PANEL_APPLET_CFLAGS = @LIBMATE_PANEL_APPLET_CFLAGS@
+LIBMATE_PANEL_APPLET_LIBS = @LIBMATE_PANEL_APPLET_LIBS@
+LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS@
+LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MATE_PANEL_APPLET_LT_VERSION = @LIB_MATE_PANEL_APPLET_LT_VERSION@
+LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION = @LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECOMPONENT_ACT_IDLDIR = @MATECOMPONENT_ACT_IDLDIR@
+MATECOMPONENT_CFLAGS = @MATECOMPONENT_CFLAGS@
+MATECOMPONENT_IDLDIR = @MATECOMPONENT_IDLDIR@
+MATECOMPONENT_LIBS = @MATECOMPONENT_LIBS@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MATECORBA_IDL = @MATECORBA_IDL@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NETWORK_MANAGER_CFLAGS = @NETWORK_MANAGER_CFLAGS@
+NETWORK_MANAGER_LIBS = @NETWORK_MANAGER_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOTIFICATION_AREA_CFLAGS = @NOTIFICATION_AREA_CFLAGS@
+NOTIFICATION_AREA_LIBS = @NOTIFICATION_AREA_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANEL_CFLAGS = @PANEL_CFLAGS@
+PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE = @PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+PANEL_LIBS = @PANEL_LIBS@
+PANEL_MODULE_MATECOMPONENT_CFLAGS = @PANEL_MODULE_MATECOMPONENT_CFLAGS@
+PANEL_MODULE_MATECOMPONENT_LIBS = @PANEL_MODULE_MATECOMPONENT_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+REBUILD = @REBUILD@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TZ_CFLAGS = @TZ_CFLAGS@
+TZ_LIBS = @TZ_LIBS@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WNCKLET_CFLAGS = @WNCKLET_CFLAGS@
+WNCKLET_LIBS = @WNCKLET_LIBS@
+XGETTEXT = @XGETTEXT@
+XMKMF = @XMKMF@
+XRANDR_CFLAGS = @XRANDR_CFLAGS@
+XRANDR_LIBS = @XRANDR_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+appletsdir = @appletsdir@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+modulesdir = @modulesdir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+icondir = $(datadir)/mate-panel/pixmaps
+icon_DATA = \
+ clock-calendar-icon.png \
+ clock-face-large.svg \
+ clock-face-small.svg \
+ clock-face-small-morning.svg \
+ clock-face-small-day.svg \
+ clock-face-small-evening.svg \
+ clock-face-small-night.svg \
+ clock-map.png \
+ clock-map-location-marker.png \
+ clock-map-location-current.png \
+ clock-map-location-hilight.png
+
+EXTRA_DIST = \
+ clock-map.svg \
+ $(icon_DATA)
+
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applets/clock/pixmaps/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applets/clock/pixmaps/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-iconDATA: $(icon_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(icondir)" || $(MKDIR_P) "$(DESTDIR)$(icondir)"
+ @list='$(icon_DATA)'; test -n "$(icondir)" || 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)$(icondir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \
+ done
+
+uninstall-iconDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(icondir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(icondir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(icondir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-iconDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-iconDATA
+
+.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-iconDATA 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-iconDATA
+
+
+-include $(top_srcdir)/git.mk
+
+# 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.
+.NOEXPORT:
diff --git a/applets/clock/pixmaps/clock-calendar-icon.png b/applets/clock/pixmaps/clock-calendar-icon.png
new file mode 100644
index 00000000..cfab7200
--- /dev/null
+++ b/applets/clock/pixmaps/clock-calendar-icon.png
Binary files differ
diff --git a/applets/clock/pixmaps/clock-face-large.svg b/applets/clock/pixmaps/clock-face-large.svg
new file mode 100644
index 00000000..09b3224f
--- /dev/null
+++ b/applets/clock/pixmaps/clock-face-large.svg
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="50"
+ height="50"
+ id="svg5416"
+ sodipodi:version="0.32"
+ inkscape:version="0.43"
+ version="1.0"
+ sodipodi:docbase="/home/garrett/Desktop"
+ sodipodi:docname="clock-face-large.svg">
+ <defs
+ id="defs5418">
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ id="stop10655"
+ offset="0.0000000"
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop10657"
+ offset="1.0000000"
+ style="stop-color:#9193af;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ id="stop42176"
+ offset="0.0000000"
+ style="stop-color:#a0a0a0;stop-opacity:1.0000000;" />
+ <stop
+ id="stop42178"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ id="stop2147"
+ offset="0.0000000"
+ style="stop-color:#fffffd;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2149"
+ offset="1"
+ style="stop-color:#d9d9d8;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ style="stop-color:#9497b3;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop37937" />
+ <stop
+ style="stop-color:#4c4059;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop37939" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3816"
+ inkscape:collect="always">
+ <stop
+ id="stop3818"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3820"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5593"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5595"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5597"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient5599"
+ gradientUnits="userSpaceOnUse"
+ cx="11.3292"
+ cy="10.58397"
+ fx="11.3292"
+ fy="10.58397"
+ r="15.532059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5601"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5603"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient5605"
+ gradientUnits="userSpaceOnUse"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="10.446983"
+ inkscape:cx="24.509202"
+ inkscape:cy="28.161554"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1600"
+ inkscape:window-height="1152"
+ inkscape:window-x="0"
+ inkscape:window-y="0" />
+ <metadata
+ id="metadata5421">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4415"
+ style="opacity:1;color:#000000;fill:url(#radialGradient5605);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(2.30892,0,0,1.098631,-46.84483,19.60015)" />
+ <path
+ transform="matrix(1.548421,0,0,1.548421,-0.161834,-1.184899)"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4417"
+ style="fill:url(#radialGradient5593);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.17789125;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.294287,0,0,1.294287,3.865446,3.010334)"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4419"
+ style="fill:url(#radialGradient5595);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5597);stroke-width:1.19954503;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5599);stroke-width:1.24198496;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4421"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ transform="matrix(1.468514,0,0,1.468514,1.136597,7.079533e-2)" />
+ <path
+ transform="matrix(1.294287,0,0,1.294287,3.865446,3.010334)"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4429"
+ style="opacity:0.53921569;fill:url(#radialGradient5601);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5603);stroke-width:1.19954503;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <g
+ id="g4760"
+ transform="matrix(0.966895,0,0,0.966895,0.827632,0.827631)">
+ <path
+ id="text4433"
+ d="M 23.395162,9.0668143 L 23.395162,12.043662 L 23.913899,12.043662 L 23.913899,7.8642859 L 23.572004,7.8642859 C 23.389268,8.5068127 23.271372,8.5952346 22.469687,8.6954452 L 22.469687,9.0668143 L 23.395162,9.0668143 M 27.500839,11.530819 L 25.302099,11.530819 C 25.355151,11.188924 25.543785,10.970817 26.056627,10.670186 L 26.646102,10.351869 C 27.229681,10.033553 27.530313,9.6032358 27.530313,9.0903933 C 27.530313,8.7426035 27.38884,8.4183919 27.141261,8.1943917 C 26.893681,7.9703915 26.587153,7.8642859 26.192206,7.8642859 C 25.661679,7.8642859 25.266731,8.0529181 25.036836,8.4066026 C 24.889466,8.6306028 24.824624,8.8899723 24.812835,9.3143937 L 25.331573,9.3143937 C 25.349257,9.0314461 25.384625,8.860498 25.455362,8.724919 C 25.590941,8.4714451 25.8621,8.3181814 26.174521,8.3181814 C 26.646101,8.3181814 26.999786,8.6541824 26.999786,9.1021828 C 26.999786,9.4322883 26.805259,9.7152367 26.43389,9.927447 L 25.891573,10.233974 C 25.019152,10.729133 24.765676,11.124082 24.718519,12.043662 L 27.500839,12.043662 L 27.500839,11.530819"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4437"
+ d="M 16.212011,11.007326 L 16.212011,13.984173 L 16.730749,13.984173 L 16.730749,9.8047976 L 16.388853,9.8047976 C 16.206116,10.447324 16.08822,10.535746 15.286536,10.635957 L 15.286536,11.007326 L 16.212011,11.007326 M 18.861687,11.007326 L 18.861687,13.984173 L 19.380424,13.984173 L 19.380424,9.8047976 L 19.038529,9.8047976 C 18.855792,10.447324 18.737896,10.535746 17.936211,10.635957 L 17.936211,11.007326 L 18.861687,11.007326"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4441"
+ d="M 10.655018,16.363726 L 10.655018,19.340573 L 11.173756,19.340573 L 11.173756,15.161197 L 10.831861,15.161197 C 10.649124,15.803724 10.531228,15.892146 9.7295429,15.992356 L 9.7295429,16.363726 L 10.655018,16.363726 M 13.39901,15.161197 C 13.009957,15.161197 12.656272,15.332145 12.438166,15.620987 C 12.167008,15.986461 12.031429,16.546463 12.031429,17.318675 C 12.031429,18.727518 12.503009,19.476152 13.39901,19.476152 C 14.283221,19.476152 14.766591,18.727518 14.766591,17.354043 C 14.766591,16.540569 14.636907,15.998251 14.359854,15.620987 C 14.141748,15.32625 13.793958,15.161197 13.39901,15.161197 M 13.39901,15.620987 C 13.95901,15.620987 14.236064,16.186884 14.236064,17.306885 C 14.236064,18.491728 13.964905,19.045836 13.38722,19.045836 C 12.83901,19.045836 12.561956,18.468149 12.561956,17.324569 C 12.561956,16.18099 12.83901,15.620987 13.39901,15.620987"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4445"
+ d="M 8.7336924,25.958803 C 8.833903,26.642593 9.2819044,27.049331 9.9185369,27.049331 C 10.378326,27.049331 10.796854,26.825331 11.038539,26.453962 C 11.303802,26.047225 11.421697,25.534381 11.421697,24.773959 C 11.421697,24.072485 11.315592,23.624483 11.068012,23.253114 C 10.838117,22.917114 10.472642,22.734376 10.012853,22.734376 C 9.2170623,22.734376 8.6452711,23.323852 8.6452711,24.143221 C 8.6452711,24.921327 9.1757991,25.469539 9.9303258,25.469539 C 10.325274,25.469539 10.614117,25.328065 10.885275,25.003854 C 10.87938,26.023644 10.549274,26.589541 9.9539049,26.589541 C 9.5884311,26.589541 9.3349564,26.359645 9.25243,25.958803 L 8.7336924,25.958803 M 10.006958,23.188272 C 10.490327,23.188272 10.855801,23.589115 10.855801,24.131431 C 10.855801,24.644274 10.496221,25.009749 9.9892739,25.009749 C 9.4882205,25.009749 9.1757983,24.661958 9.1757983,24.101958 C 9.1757983,23.571431 9.5294836,23.188272 10.006958,23.188272"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4449"
+ d="M 12.931858,32.152782 C 13.362174,31.893414 13.503648,31.681202 13.503648,31.286254 C 13.503648,30.631938 12.990804,30.172147 12.248067,30.172147 C 11.511224,30.172147 10.992486,30.631938 10.992486,31.286254 C 10.992486,31.675307 11.13396,31.887519 11.558382,32.152782 C 11.080908,32.382677 10.845117,32.730468 10.845117,33.190258 C 10.845117,33.956574 11.422803,34.487102 12.248067,34.487102 C 13.073331,34.487102 13.651017,33.956574 13.651017,33.196153 C 13.651017,32.730468 13.415226,32.382677 12.931858,32.152782 M 12.248067,30.631937 C 12.690173,30.631937 12.973121,30.891307 12.973121,31.298044 C 12.973121,31.687097 12.684278,31.946466 12.248067,31.946466 C 11.811856,31.946466 11.523013,31.687097 11.523013,31.292149 C 11.523013,30.891307 11.811856,30.631937 12.248067,30.631937 M 12.248067,32.382677 C 12.766804,32.382677 13.12049,32.712784 13.12049,33.202047 C 13.12049,33.697206 12.766804,34.027312 12.236277,34.027312 C 11.72933,34.027312 11.375644,33.691311 11.375644,33.202047 C 11.375644,32.712784 11.72933,32.382677 12.248067,32.382677"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4453"
+ d="M 18.730535,35.691354 L 15.936425,35.691354 L 15.936425,36.204197 L 18.194113,36.204197 C 17.197902,37.62483 16.791163,38.497255 16.478742,39.87073 L 17.032848,39.87073 C 17.262743,38.532624 17.787376,37.383145 18.730535,36.127565 L 18.730535,35.691354"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4457"
+ d="M 26.296845,38.911288 C 26.196634,38.227498 25.748632,37.82076 25.112,37.82076 C 24.65221,37.82076 24.239577,38.044761 23.991998,38.41613 C 23.73263,38.822867 23.614734,39.335711 23.614734,40.096133 C 23.614734,40.797607 23.72084,41.245609 23.968419,41.616977 C 24.19242,41.952978 24.557895,42.135715 25.017684,42.135715 C 25.813474,42.135715 26.385266,41.54624 26.385266,40.726871 C 26.385266,39.948765 25.854738,39.400552 25.106106,39.400552 C 24.693474,39.400552 24.369262,39.559711 24.145262,39.866237 C 24.151156,38.846447 24.481263,38.28055 25.076632,38.28055 C 25.442106,38.28055 25.69558,38.510446 25.778107,38.911288 L 26.296845,38.911288 M 25.041263,39.860343 C 25.542316,39.860343 25.854738,40.208133 25.854738,40.768134 C 25.854738,41.292766 25.501053,41.675925 25.023579,41.675925 C 24.54021,41.675925 24.174735,41.275082 24.174735,40.73866 C 24.174735,40.219923 24.528421,39.860343 25.041263,39.860343"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4461"
+ d="M 33.602455,35.88379 L 31.444977,35.88379 L 31.132555,38.159163 L 31.61003,38.159163 C 31.851714,37.870321 32.052136,37.77011 32.376347,37.77011 C 32.936348,37.77011 33.290033,38.153269 33.290033,38.772217 C 33.290033,39.37348 32.942242,39.738955 32.376347,39.738955 C 31.922452,39.738955 31.645398,39.509059 31.521609,39.03748 L 31.002871,39.03748 C 31.073608,39.379375 31.132556,39.544429 31.256345,39.697692 C 31.492135,40.016008 31.916557,40.198745 32.388137,40.198745 C 33.231085,40.198745 33.82056,39.585691 33.82056,38.70148 C 33.82056,37.876216 33.272348,37.310319 32.470663,37.310319 C 32.175926,37.310319 31.940136,37.386951 31.698451,37.563793 L 31.863504,36.396633 L 33.602455,36.396633 L 33.602455,35.88379"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4465"
+ d="M 38.288591,33.62013 L 38.288591,34.622237 L 38.807329,34.622237 L 38.807329,33.62013 L 39.426278,33.62013 L 39.426278,33.154445 L 38.807329,33.154445 L 38.807329,30.442861 L 38.424171,30.442861 L 36.526062,33.071918 L 36.526062,33.62013 L 38.288591,33.62013 M 38.288591,33.154445 L 36.979958,33.154445 L 38.288591,31.327073 L 38.288591,33.154445"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4469"
+ d="M 39.674726,25.214253 L 39.739568,25.214253 L 39.957674,25.208358 C 40.529464,25.208358 40.824202,25.467727 40.824202,25.96878 C 40.824202,26.493412 40.49999,26.805834 39.957674,26.805834 C 39.391779,26.805834 39.114725,26.522886 39.079356,25.915728 L 38.560619,25.915728 C 38.584198,26.251728 38.643145,26.469834 38.743356,26.658466 C 38.955566,27.059308 39.3682,27.265625 39.939989,27.265625 C 40.800622,27.265625 41.354729,26.752781 41.354729,25.962886 C 41.354729,25.432359 41.148412,25.137621 40.647359,24.966673 C 41.036412,24.81341 41.230939,24.518672 41.230939,24.100145 C 41.230939,23.380987 40.753464,22.95067 39.957674,22.95067 C 39.114726,22.95067 38.666724,23.410461 38.64904,24.300567 L 39.167778,24.300567 C 39.173672,24.047093 39.197251,23.905619 39.262094,23.775934 C 39.379988,23.546039 39.639358,23.404565 39.963568,23.404565 C 40.423358,23.404565 40.700412,23.675724 40.700412,24.11783 C 40.700412,24.412567 40.594306,24.58941 40.364411,24.683725 C 40.222937,24.742673 40.0402,24.766252 39.674726,24.772147 L 39.674726,25.214253"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4473"
+ d="M 39.352593,19.045902 L 37.153852,19.045902 C 37.206905,18.704007 37.395538,18.485901 37.90838,18.185269 L 38.497855,17.866953 C 39.081434,17.548636 39.382067,17.118319 39.382067,16.605477 C 39.382067,16.257687 39.240593,15.933475 38.993014,15.709475 C 38.745434,15.485475 38.438907,15.379369 38.043959,15.379369 C 37.513433,15.379369 37.118484,15.568001 36.888589,15.921686 C 36.74122,16.145686 36.676378,16.405056 36.664588,16.829477 L 37.183326,16.829477 C 37.20101,16.546529 37.236379,16.375581 37.307116,16.240002 C 37.442695,15.986528 37.713854,15.833265 38.026275,15.833265 C 38.497854,15.833265 38.85154,16.169266 38.85154,16.617266 C 38.85154,16.947372 38.657013,17.23032 38.285644,17.442531 L 37.743327,17.749058 C 36.870905,18.244216 36.61743,18.639165 36.570272,19.558745 L 39.352593,19.558745 L 39.352593,19.045902"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4477"
+ d="M 32.615084,11.132164 L 32.615084,14.109011 L 33.133822,14.109011 L 33.133822,9.929635 L 32.791927,9.929635 C 32.60919,10.572162 32.491294,10.660584 31.689609,10.760795 L 31.689609,11.132164 L 32.615084,11.132164"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4423"
+ sodipodi:cx="119.38776"
+ sodipodi:cy="118.2449"
+ sodipodi:rx="11.22449"
+ sodipodi:ry="11.22449"
+ d="M 130.61225 118.2449 A 11.22449 11.22449 0 1 1 108.16327,118.2449 A 11.22449 11.22449 0 1 1 130.61225 118.2449 z"
+ transform="matrix(0.162679,0,0,0.162679,5.578045,5.763981)" />
+ </g>
+</svg>
diff --git a/applets/clock/pixmaps/clock-face-small-day.svg b/applets/clock/pixmaps/clock-face-small-day.svg
new file mode 100644
index 00000000..bd4b5b2e
--- /dev/null
+++ b/applets/clock/pixmaps/clock-face-small-day.svg
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="36"
+ height="36"
+ id="svg5416"
+ sodipodi:version="0.32"
+ inkscape:version="0.45+devel"
+ version="1.0"
+ sodipodi:docbase="/home/garrett/Desktop"
+ sodipodi:docname="clock-face-small-2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs5418">
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ id="stop10655"
+ offset="0.0000000"
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop10657"
+ offset="1.0000000"
+ style="stop-color:#9193af;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ id="stop42176"
+ offset="0.0000000"
+ style="stop-color:#a0a0a0;stop-opacity:1.0000000;" />
+ <stop
+ id="stop42178"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ id="stop2147"
+ offset="0.0000000"
+ style="stop-color:#fffffd;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2149"
+ offset="1"
+ style="stop-color:#d9d9d8;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ style="stop-color:#9497b3;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop37937" />
+ <stop
+ style="stop-color:#4c4059;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop37939" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3816"
+ inkscape:collect="always">
+ <stop
+ id="stop3818"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3820"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient5847"
+ gradientUnits="userSpaceOnUse"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5849"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5851"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5853"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient5855"
+ gradientUnits="userSpaceOnUse"
+ cx="11.3292"
+ cy="10.58397"
+ fx="11.3292"
+ fy="10.58397"
+ r="15.532059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5857"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5859"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.388889"
+ inkscape:cx="18"
+ inkscape:cy="18"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1600"
+ inkscape:window-height="1154"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ width="36px"
+ height="36px" />
+ <metadata
+ id="metadata5421">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <path
+ d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4415"
+ style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" />
+ <path
+ transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4417"
+ style="fill:url(#radialGradient5849);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4419"
+ style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4421"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4429"
+ style="opacity:0.53921569;fill:url(#radialGradient5857);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ id="path5543"
+ d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z"
+ style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <g
+ id="g5802"
+ style="fill:#888a85;fill-opacity:1"
+ transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)">
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z"
+ id="path5545" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z"
+ id="path5557" />
+ <path
+ id="path5649"
+ d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5651"
+ d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z"
+ id="path5655" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z"
+ id="path5657" />
+ <path
+ id="path5661"
+ d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5663"
+ d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z"
+ id="path5667" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z"
+ id="path5669" />
+ <path
+ id="path5673"
+ d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5675"
+ d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/applets/clock/pixmaps/clock-face-small-evening.svg b/applets/clock/pixmaps/clock-face-small-evening.svg
new file mode 100644
index 00000000..17a9840b
--- /dev/null
+++ b/applets/clock/pixmaps/clock-face-small-evening.svg
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="36"
+ height="36"
+ id="svg5416"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="/home/mclasen/Desktop/intlclock-1.0/pixmaps"
+ sodipodi:docname="intlclock-face-small-morning.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs5418">
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ id="stop10655"
+ offset="0.0000000"
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop10657"
+ offset="1.0000000"
+ style="stop-color:#9193af;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ id="stop42176"
+ offset="0"
+ style="stop-color:#434343;stop-opacity:0.53535354;" />
+ <stop
+ id="stop42178"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ id="stop2147"
+ offset="0.0000000"
+ style="stop-color:#fffffd;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2149"
+ offset="1"
+ style="stop-color:#d9d9d8;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ style="stop-color:#9497b3;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop37937" />
+ <stop
+ style="stop-color:#4c4059;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop37939" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3816"
+ inkscape:collect="always">
+ <stop
+ id="stop3818"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3820"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient5847"
+ gradientUnits="userSpaceOnUse"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5849"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5851"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5853"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient5855"
+ gradientUnits="userSpaceOnUse"
+ cx="11.3292"
+ cy="10.58397"
+ fx="11.3292"
+ fy="10.58397"
+ r="15.532059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="radialGradient5857"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5859"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.388889"
+ inkscape:cx="18"
+ inkscape:cy="39.221053"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1600"
+ inkscape:window-height="1115"
+ inkscape:window-x="0"
+ inkscape:window-y="31"
+ width="36px"
+ height="36px" />
+ <metadata
+ id="metadata5421">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <path
+ d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4415"
+ style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" />
+ <path
+ transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4417"
+ style="fill:url(#radialGradient5849);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4419"
+ style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4421"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4429"
+ style="opacity:0.53921569;fill:url(#radialGradient5857);fill-opacity:1.0;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ id="path5543"
+ d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z"
+ style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <g
+ id="g5802"
+ style="fill:#888a85;fill-opacity:1"
+ transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)">
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z"
+ id="path5545" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z"
+ id="path5557" />
+ <path
+ id="path5649"
+ d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5651"
+ d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z"
+ id="path5655" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z"
+ id="path5657" />
+ <path
+ id="path5661"
+ d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5663"
+ d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z"
+ id="path5667" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z"
+ id="path5669" />
+ <path
+ id="path5673"
+ d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5675"
+ d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/applets/clock/pixmaps/clock-face-small-morning.svg b/applets/clock/pixmaps/clock-face-small-morning.svg
new file mode 100644
index 00000000..17a9840b
--- /dev/null
+++ b/applets/clock/pixmaps/clock-face-small-morning.svg
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="36"
+ height="36"
+ id="svg5416"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="/home/mclasen/Desktop/intlclock-1.0/pixmaps"
+ sodipodi:docname="intlclock-face-small-morning.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs5418">
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ id="stop10655"
+ offset="0.0000000"
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop10657"
+ offset="1.0000000"
+ style="stop-color:#9193af;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ id="stop42176"
+ offset="0"
+ style="stop-color:#434343;stop-opacity:0.53535354;" />
+ <stop
+ id="stop42178"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ id="stop2147"
+ offset="0.0000000"
+ style="stop-color:#fffffd;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2149"
+ offset="1"
+ style="stop-color:#d9d9d8;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ style="stop-color:#9497b3;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop37937" />
+ <stop
+ style="stop-color:#4c4059;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop37939" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3816"
+ inkscape:collect="always">
+ <stop
+ id="stop3818"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3820"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient5847"
+ gradientUnits="userSpaceOnUse"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5849"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5851"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5853"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient5855"
+ gradientUnits="userSpaceOnUse"
+ cx="11.3292"
+ cy="10.58397"
+ fx="11.3292"
+ fy="10.58397"
+ r="15.532059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="radialGradient5857"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5859"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.388889"
+ inkscape:cx="18"
+ inkscape:cy="39.221053"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1600"
+ inkscape:window-height="1115"
+ inkscape:window-x="0"
+ inkscape:window-y="31"
+ width="36px"
+ height="36px" />
+ <metadata
+ id="metadata5421">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <path
+ d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4415"
+ style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" />
+ <path
+ transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4417"
+ style="fill:url(#radialGradient5849);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4419"
+ style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4421"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4429"
+ style="opacity:0.53921569;fill:url(#radialGradient5857);fill-opacity:1.0;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ id="path5543"
+ d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z"
+ style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <g
+ id="g5802"
+ style="fill:#888a85;fill-opacity:1"
+ transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)">
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z"
+ id="path5545" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z"
+ id="path5557" />
+ <path
+ id="path5649"
+ d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5651"
+ d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z"
+ id="path5655" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z"
+ id="path5657" />
+ <path
+ id="path5661"
+ d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5663"
+ d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z"
+ id="path5667" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z"
+ id="path5669" />
+ <path
+ id="path5673"
+ d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5675"
+ d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/applets/clock/pixmaps/clock-face-small-night.svg b/applets/clock/pixmaps/clock-face-small-night.svg
new file mode 100644
index 00000000..d5a7d8e5
--- /dev/null
+++ b/applets/clock/pixmaps/clock-face-small-night.svg
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="36"
+ height="36"
+ id="svg5416"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="/home/mclasen/Desktop/intlclock-1.0/pixmaps"
+ sodipodi:docname="intlclock-face-dark-small.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs5418">
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ id="stop10655"
+ offset="0.0000000"
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop10657"
+ offset="1.0000000"
+ style="stop-color:#9193af;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ id="stop42176"
+ offset="0.0000000"
+ style="stop-color:#a0a0a0;stop-opacity:1.0000000;" />
+ <stop
+ id="stop42178"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ id="stop2147"
+ offset="0.0000000"
+ style="stop-color:#fffffd;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2149"
+ offset="1"
+ style="stop-color:#d9d9d8;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ style="stop-color:#27293c;stop-opacity:1;"
+ offset="0"
+ id="stop37937" />
+ <stop
+ style="stop-color:#d6cae3;stop-opacity:1;"
+ offset="1"
+ id="stop37939" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3816"
+ inkscape:collect="always">
+ <stop
+ id="stop3818"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3820"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient5847"
+ gradientUnits="userSpaceOnUse"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5849"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5851"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5853"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient5855"
+ gradientUnits="userSpaceOnUse"
+ cx="11.3292"
+ cy="10.58397"
+ fx="11.3292"
+ fy="10.58397"
+ r="15.532059" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="linearGradient5859"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.388889"
+ inkscape:cx="18"
+ inkscape:cy="18"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1600"
+ inkscape:window-height="1115"
+ inkscape:window-x="0"
+ inkscape:window-y="31"
+ width="36px"
+ height="36px"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <metadata
+ id="metadata5421">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <path
+ d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4415"
+ style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" />
+ <path
+ transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4417"
+ style="fill:url(#radialGradient5849);fill-opacity:1.0;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4419"
+ style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4421"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4429"
+ style="opacity:0.53921569;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ id="path5543"
+ d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z"
+ style="fill:#c3c9c9;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <g
+ id="g5802"
+ style="fill:#eaece7;fill-opacity:1"
+ transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)">
+ <path
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z"
+ id="path5545" />
+ <path
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z"
+ id="path5557" />
+ <path
+ id="path5649"
+ d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z"
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5651"
+ d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z"
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z"
+ id="path5655" />
+ <path
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z"
+ id="path5657" />
+ <path
+ id="path5661"
+ d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z"
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5663"
+ d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z"
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z"
+ id="path5667" />
+ <path
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z"
+ id="path5669" />
+ <path
+ id="path5673"
+ d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z"
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5675"
+ d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z"
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10.30000019;stroke-miterlimit:3.9000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path6095"
+ sodipodi:cx="34.673683"
+ sodipodi:cy="29.804211"
+ sodipodi:rx="0"
+ sodipodi:ry="2.103158"
+ d="M 34.673683 29.804211 A 0 2.103158 0 1 1 34.673683,29.804211 A 0 2.103158 0 1 1 34.673683 29.804211 z" />
+ </g>
+</svg>
diff --git a/applets/clock/pixmaps/clock-face-small.svg b/applets/clock/pixmaps/clock-face-small.svg
new file mode 100644
index 00000000..bd4b5b2e
--- /dev/null
+++ b/applets/clock/pixmaps/clock-face-small.svg
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="36"
+ height="36"
+ id="svg5416"
+ sodipodi:version="0.32"
+ inkscape:version="0.45+devel"
+ version="1.0"
+ sodipodi:docbase="/home/garrett/Desktop"
+ sodipodi:docname="clock-face-small-2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs5418">
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ id="stop10655"
+ offset="0.0000000"
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop10657"
+ offset="1.0000000"
+ style="stop-color:#9193af;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ id="stop42176"
+ offset="0.0000000"
+ style="stop-color:#a0a0a0;stop-opacity:1.0000000;" />
+ <stop
+ id="stop42178"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ id="stop2147"
+ offset="0.0000000"
+ style="stop-color:#fffffd;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2149"
+ offset="1"
+ style="stop-color:#d9d9d8;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ style="stop-color:#9497b3;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop37937" />
+ <stop
+ style="stop-color:#4c4059;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop37939" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3816"
+ inkscape:collect="always">
+ <stop
+ id="stop3818"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3820"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient5847"
+ gradientUnits="userSpaceOnUse"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5849"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5851"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5853"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient5855"
+ gradientUnits="userSpaceOnUse"
+ cx="11.3292"
+ cy="10.58397"
+ fx="11.3292"
+ fy="10.58397"
+ r="15.532059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5857"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5859"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.388889"
+ inkscape:cx="18"
+ inkscape:cy="18"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1600"
+ inkscape:window-height="1154"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ width="36px"
+ height="36px" />
+ <metadata
+ id="metadata5421">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <path
+ d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4415"
+ style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" />
+ <path
+ transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4417"
+ style="fill:url(#radialGradient5849);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4419"
+ style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4421"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4429"
+ style="opacity:0.53921569;fill:url(#radialGradient5857);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ id="path5543"
+ d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z"
+ style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <g
+ id="g5802"
+ style="fill:#888a85;fill-opacity:1"
+ transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)">
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z"
+ id="path5545" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z"
+ id="path5557" />
+ <path
+ id="path5649"
+ d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5651"
+ d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z"
+ id="path5655" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z"
+ id="path5657" />
+ <path
+ id="path5661"
+ d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5663"
+ d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z"
+ id="path5667" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z"
+ id="path5669" />
+ <path
+ id="path5673"
+ d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5675"
+ d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/applets/clock/pixmaps/clock-map-location-current.png b/applets/clock/pixmaps/clock-map-location-current.png
new file mode 100644
index 00000000..5c505d11
--- /dev/null
+++ b/applets/clock/pixmaps/clock-map-location-current.png
Binary files differ
diff --git a/applets/clock/pixmaps/clock-map-location-hilight.png b/applets/clock/pixmaps/clock-map-location-hilight.png
new file mode 100644
index 00000000..d7de5b78
--- /dev/null
+++ b/applets/clock/pixmaps/clock-map-location-hilight.png
Binary files differ
diff --git a/applets/clock/pixmaps/clock-map-location-marker.png b/applets/clock/pixmaps/clock-map-location-marker.png
new file mode 100644
index 00000000..48d2184f
--- /dev/null
+++ b/applets/clock/pixmaps/clock-map-location-marker.png
Binary files differ
diff --git a/applets/clock/pixmaps/clock-map.png b/applets/clock/pixmaps/clock-map.png
new file mode 100644
index 00000000..31e1a777
--- /dev/null
+++ b/applets/clock/pixmaps/clock-map.png
Binary files differ
diff --git a/applets/clock/pixmaps/clock-map.svg b/applets/clock/pixmaps/clock-map.svg
new file mode 100644
index 00000000..d910af1c
--- /dev/null
+++ b/applets/clock/pixmaps/clock-map.svg
@@ -0,0 +1,755 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="960"
+ height="480"
+ viewBox="0 0 468 234"
+ preserveAspectRatio="xMidYMid meet"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45+devel"
+ sodipodi:docname="earth-2-simple.svg"
+ sodipodi:docbase="/home/garrett/Desktop"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs167">
+ <linearGradient
+ id="linearGradient6105">
+ <stop
+ id="stop6107"
+ offset="0"
+ style="stop-color:#b1cbe6;stop-opacity:1;" />
+ <stop
+ id="stop6109"
+ offset="1"
+ style="stop-color:#ccddef;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6105"
+ id="linearGradient5933"
+ gradientUnits="userSpaceOnUse"
+ x1="250.769"
+ y1="37.809563"
+ x2="250.76901"
+ y2="194.13469"
+ gradientTransform="matrix(1.0010416,0,0,1.0020833,-0.2437371,-0.2437448)" />
+ <filter
+ inkscape:collect="always"
+ id="filter7072">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="288.4"
+ id="feGaussianBlur7074" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-height="1154"
+ inkscape:window-width="1600"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="1"
+ inkscape:cx="495.72419"
+ inkscape:cy="189.71763"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:current-layer="layer3" />
+ <metadata
+ id="metadata4">
+Created by potrace 1.7, written by Peter Selinger 2001-2005
+<rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>The Earth</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Garrett LeSage</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:description>A vectorized, cleaned up, tango-inspired map of the earth based off of the Evolution map.</dc:description>
+ </cc:Work>
+</rdf:RDF>
+</metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Sea">
+ <rect
+ style="opacity:1;fill:url(#linearGradient5933);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4773"
+ width="468.48749"
+ height="234.4875"
+ x="-0.24374618"
+ y="-0.24374475" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Land outline">
+ <g
+ transform="matrix(6.1000977e-4,0,0,-6.1064452e-4,-0.24375,234.24375)"
+ id="g5768"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter7072);opacity:0.75">
+ <path
+ d="M 0,357500 L 0,331000 L 450,331003 C 698,331005 1123,331241 1395,331528 C 2302,332484 2614,332605 3562,332364 C 4142,332217 4565,332211 4861,332345 C 5753,332748 7593,332400 8946,331572 C 9737,331088 10453,330800 10865,330800 C 11227,330800 11698,330668 11912,330506 C 12125,330345 12475,330210 12689,330206 C 12903,330203 13331,329958 13640,329661 L 14202,329123 L 15114,330061 C 15616,330578 16145,331000 16289,331000 C 16433,331000 16662,331133 16797,331296 C 17187,331766 18123,332159 18632,332066 C 19222,331959 20200,332833 20200,333468 C 20200,334118 19827,334400 18967,334400 C 18456,334400 18153,334512 18024,334750 C 17702,335344 16464,335902 16114,335612 C 15785,335338 15400,335484 15400,335881 C 15400,336022 15220,336301 15000,336500 C 14780,336699 14600,336989 14600,337144 C 14600,337829 13575,339587 12801,340231 C 12015,340883 11978,340961 12146,341611 C 12386,342545 13670,342713 14598,341933 C 15276,341362 16765,341139 18800,341302 C 19515,341360 20712,341399 21459,341389 C 23473,341362 24911,342835 24091,344085 C 23791,344544 23805,344567 24641,344969 C 26590,345908 26985,345817 28565,344075 C 29195,343380 38688,343427 39640,344130 C 39991,344388 40420,344600 40594,344600 C 40769,344600 41113,344742 41360,344915 C 41935,345317 46754,345357 47382,344965 C 47709,344761 47843,344777 48155,345059 C 48731,345581 49035,345482 50068,344433 C 51214,343269 51011,342538 49784,343411 C 49176,343844 49135,343848 48572,343515 C 47992,343173 46000,342948 46000,343226 C 46000,343956 44454,344252 44046,343600 C 43903,343371 43580,343200 43290,343200 C 43012,343200 42450,343032 42042,342828 C 41605,342608 40809,342441 40106,342421 C 39227,342396 38801,342283 38493,341993 C 38263,341777 37880,341600 37643,341600 C 37395,341600 37022,341343 36763,340993 C 36451,340571 35990,340292 35247,340076 C 34660,339905 33949,339646 33667,339500 C 33385,339354 32602,339171 31927,339093 C 30657,338947 29600,338397 29600,337881 C 29600,337443 30594,337122 31230,337355 C 31676,337519 31839,337470 32267,337042 C 32639,336670 32967,336541 33496,336561 C 33973,336579 34256,336486 34333,336287 C 34517,335806 35807,335357 36633,335485 C 37482,335617 39059,334755 38955,334215 C 38787,333341 35672,333196 34353,334001 C 33504,334518 33105,334502 31929,333906 C 31157,333514 30778,333438 30078,333534 C 29322,333638 29131,333587 28735,333177 C 28482,332915 28109,332606 27908,332491 C 26940,331940 29604,329452 30707,329875 C 30877,329940 31185,329888 31391,329759 C 31681,329578 31987,329585 32733,329790 C 33655,330043 34680,330093 36367,329966 C 36963,329922 37279,330031 37782,330455 C 38583,331128 38839,331132 39932,330492 C 41386,329640 41053,328763 38975,327977 C 37142,327283 36747,327200 35282,327200 L 33861,327200 L 32803,326121 C 32220,325527 31464,324962 31122,324865 C 29952,324531 30775,322200 32063,322200 C 32230,322200 32723,321795 33158,321300 C 33724,320658 34103,320400 34482,320400 C 34775,320400 35241,320251 35519,320069 C 35990,319761 36073,319761 36719,320069 C 37854,320610 38609,319986 39078,318118 C 39271,317346 40028,317110 41471,317371 C 42306,317523 42913,317521 43589,317365 C 44283,317204 44878,317207 45818,317375 C 47153,317614 47996,317167 47999,316218 C 48001,315768 46256,314291 45028,313703 C 42687,312584 42539,312434 43062,311718 C 43457,311178 44489,311426 45931,312405 C 46672,312908 47328,313199 47721,313200 C 48105,313200 48547,313390 48881,313700 C 49178,313975 49582,314200 49779,314200 C 49977,314200 50291,314369 50478,314576 C 50665,314783 51160,315007 51578,315073 C 51997,315140 52680,315466 53097,315797 C 53586,316186 54084,316400 54501,316400 C 55534,316400 56168,317040 56239,318156 C 56295,319021 56361,319130 57032,319458 C 57435,319655 58018,320150 58327,320558 C 59709,322380 61000,322464 61000,320733 C 61000,319325 64753,318950 66431,320191 C 66735,320416 67028,320600 67083,320600 C 67506,320600 68302,321813 68396,322600 C 68515,323607 68423,323584 70398,323093 C 71272,322875 71982,322535 72575,322049 C 73059,321653 73645,321306 73877,321279 C 74110,321251 74705,321127 75200,321003 C 76868,320584 78091,320460 79891,320526 C 81491,320586 81730,320547 82132,320170 C 82473,319849 82732,319776 83199,319870 C 83545,319939 83980,319891 84189,319761 C 84474,319583 84826,319587 85687,319780 C 86809,320031 86813,320030 87513,319416 C 87898,319077 88335,318800 88482,318800 C 88630,318800 88863,318665 89000,318500 C 89137,318335 89381,318200 89542,318200 C 89704,318200 90000,317998 90200,317750 C 90675,317164 92538,317101 93145,317650 C 93634,318093 94174,318099 94341,317664 C 94426,317444 94320,317230 94035,317040 C 93440,316645 93489,316053 94209,314918 L 94818,313957 L 95726,314093 C 96449,314202 96684,314162 96877,313898 C 97010,313715 97427,313503 97803,313426 C 98373,313310 98509,313177 98621,312627 C 98695,312265 98941,311839 99167,311680 C 99394,311522 99780,311034 100027,310595 C 100355,310010 100664,309745 101187,309600 C 102227,309312 102389,309346 102600,309900 C 102999,310950 105600,309236 105600,307923 C 105600,307203 107050,305747 108117,305394 C 108493,305270 108800,305044 108800,304891 C 108800,304738 109205,304157 109700,303600 C 110195,303043 110600,302507 110600,302409 C 110600,302312 110866,302173 111191,302102 C 111909,301944 112167,301317 111718,300820 C 111080,300115 111300,299200 112107,299200 C 112679,299200 112977,299033 113661,298330 C 114331,297640 114697,297431 115427,297321 C 116847,297108 118908,295088 119075,293747 C 119140,293222 119339,292510 119518,292165 C 119984,291265 120011,285968 119553,285451 C 118983,284806 118688,282901 119068,282321 C 119248,282046 119359,281704 119314,281560 C 118915,280280 119015,278012 119497,277440 C 119774,277111 120000,276665 120000,276448 C 120000,276231 120180,275825 120400,275545 C 120620,275266 120800,274953 120800,274850 C 120800,274747 121477,273955 122304,273090 C 123319,272027 123873,271270 124011,270758 C 124124,270341 124299,270000 124401,270000 C 124504,270000 124714,269757 124870,269460 C 125182,268865 126051,267832 127350,266514 C 127818,266040 128200,265540 128200,265404 C 128200,265230 128403,265194 128872,265282 C 129343,265370 129618,265320 129789,265114 C 129923,264952 130453,264758 130966,264682 C 131488,264605 132150,264336 132465,264072 C 132776,263812 133112,263600 133212,263600 C 133311,263600 133454,263353 133530,263050 C 133740,262206 134556,260768 135002,260456 C 135282,260260 135367,260039 135286,259717 C 135216,259438 135291,259138 135476,258953 C 135643,258785 135840,258410 135913,258119 C 135986,257828 136205,257504 136400,257400 C 136595,257296 136809,256993 136875,256728 C 136942,256462 137335,255958 137748,255608 C 138162,255259 138680,254814 138900,254621 C 139120,254428 139593,254100 139950,253892 C 140628,253498 140758,253048 140373,252431 C 139959,251769 140338,249849 140962,249445 C 141254,249255 141660,248935 141864,248733 C 142123,248476 142389,248404 142746,248494 C 143620,248713 144556,247615 144718,246181 C 144844,245069 145825,243800 146559,243800 C 146659,243800 146984,243575 147281,243300 C 147578,243025 147945,242800 148097,242800 C 148249,242800 148565,242530 148800,242200 C 149227,241600 150225,241355 150491,241785 C 150691,242109 150148,243005 149680,243123 C 149393,243195 149038,243611 148704,244268 C 148415,244836 147813,245705 147366,246200 C 146919,246695 146301,247640 145994,248300 C 145686,248960 145157,249809 144817,250186 C 144478,250563 144200,250992 144200,251138 C 144200,251284 144011,251561 143779,251752 C 143548,251943 143138,252444 142868,252864 C 142597,253285 142112,253721 141788,253834 C 141465,253947 141200,254153 141200,254293 C 141200,254432 141026,254768 140812,255039 C 140599,255310 140363,255778 140287,256080 C 140212,256381 139981,256733 139775,256862 C 138931,257389 139982,259000 141169,259000 C 142060,259000 143000,258132 143000,257309 C 143000,256949 143164,256439 143365,256177 C 143566,255915 144034,255160 144406,254500 C 145059,253340 145642,252724 146488,252296 C 146710,252184 146984,251914 147096,251696 C 147404,251097 148303,250274 149260,249713 C 150343,249078 150916,248306 151138,247183 C 151276,246484 151436,246242 151906,246020 C 152233,245867 152815,245507 153200,245220 C 153585,244934 154339,244475 154876,244200 C 155550,243855 155938,243497 156131,243045 C 156284,242685 156753,242055 157173,241645 C 157593,241235 157993,240668 158063,240385 C 158133,240102 158436,239517 158736,239085 C 159230,238375 159280,238142 159259,236640 C 159240,235209 159290,234947 159619,234742 C 159836,234606 160000,234279 160000,233979 C 160000,233412 161201,232400 161874,232400 C 162067,232400 162444,232141 162710,231825 C 163240,231195 164901,230320 166000,230093 C 166385,230014 166878,229825 167095,229674 C 167311,229524 167747,229400 168063,229400 C 168379,229400 168866,229220 169145,229000 C 169425,228780 169824,228600 170031,228600 C 170239,228600 170799,228240 171277,227800 C 171754,227360 172285,227000 172457,227000 C 172629,227000 173040,226772 173372,226493 C 173825,226111 174104,226018 174498,226117 C 174889,226216 175146,226133 175509,225792 C 176224,225119 178959,224959 179554,225554 C 180886,226886 184761,226235 186000,224471 C 186275,224080 186660,223611 186855,223430 C 187050,223248 187420,222898 187678,222650 C 187935,222403 188227,222200 188327,222200 C 188426,222200 188837,221976 189240,221702 C 189767,221344 190131,221236 190541,221318 C 190960,221402 191208,221323 191486,221016 C 191696,220784 192109,220600 192421,220600 C 192739,220600 193211,220385 193517,220101 C 193997,219657 194170,219617 195112,219727 C 196463,219886 197125,219715 197445,219124 C 197768,218528 200932,215800 201301,215800 C 201754,215800 201854,215412 201529,214915 C 200945,214025 201704,212303 202594,212499 C 202976,212583 203227,212501 203493,212208 C 203696,211983 204025,211800 204224,211800 C 204423,211800 204676,211632 204785,211427 C 204895,211223 205244,210947 205561,210816 C 205887,210681 206260,210299 206419,209939 C 206689,209324 206753,209296 208111,209200 C 209406,209108 209588,209038 210311,208352 C 210745,207940 211259,207603 211453,207602 C 211647,207601 211990,207488 212215,207350 C 212712,207047 213195,207553 213207,208388 C 213242,210833 216022,210680 217266,208164 C 217665,207359 218067,206565 218162,206400 C 219047,204847 219154,204303 218786,203245 C 218611,202744 218636,202530 218921,202096 C 219255,201586 219254,201532 218904,200882 C 218555,200233 218554,200182 218887,199815 C 219429,199216 218513,197600 217631,197600 C 217206,197600 216000,196403 216000,195981 C 216000,195597 215577,195030 214152,193501 C 213401,192696 212959,192033 212875,191585 C 212803,191208 212637,190765 212506,190600 C 211501,189341 211197,187979 211747,187195 C 213035,185357 213098,184486 212010,183555 C 211042,182727 210703,181955 211034,181337 C 211163,181097 211255,180397 211238,179781 L 211207,178662 L 212823,177089 C 213727,176210 214669,175072 214959,174508 C 215245,173954 215586,173434 215716,173353 C 215847,173272 216015,172794 216091,172291 C 216166,171788 216357,171327 216514,171267 C 216693,171198 216800,170871 216800,170390 C 216800,169835 216917,169541 217223,169326 C 217718,168980 218400,167919 218400,167497 C 218400,167335 218580,167091 218800,166954 C 219042,166803 219200,166487 219200,166157 C 219200,165794 219368,165499 219696,165284 C 220434,164801 220985,163796 220862,163159 C 220790,162791 220892,162446 221178,162082 C 221410,161787 221600,161426 221600,161279 C 221600,160623 225067,157577 226111,157315 C 226433,157234 226742,157097 226798,157010 C 226854,156922 227583,156532 228418,156142 C 230649,155101 233600,152651 233600,151840 C 233600,151560 233726,151189 233880,151016 C 234276,150570 234614,149204 234423,148821 C 234335,148645 234288,147524 234317,146331 C 234363,144482 234314,144069 233986,143531 C 233775,143184 233601,142538 233601,142095 C 233600,141651 233456,141084 233281,140833 C 233033,140480 232973,139963 233015,138539 C 233044,137527 232997,136362 232911,135948 C 232803,135430 232834,135100 233009,134889 C 233201,134657 233207,134527 233032,134352 C 232904,134224 232800,133888 232800,133604 C 232800,133321 232614,132930 232387,132736 C 232009,132411 231979,132194 232028,130097 C 232077,127978 232049,127778 231641,127343 C 231398,127085 231197,126700 231193,126487 C 231189,126274 231063,125878 230913,125607 C 230673,125173 230684,125056 231004,124649 C 231291,124285 231347,123961 231264,123142 C 231170,122207 231212,122050 231679,121615 C 232339,121001 232346,120276 231702,119403 C 231421,119022 231149,118310 231077,117767 C 231007,117239 230826,116704 230675,116579 C 230524,116454 230400,116097 230400,115787 C 230400,115477 230303,115163 230183,115090 C 230064,115016 229797,114560 229590,114077 C 229383,113594 228796,112793 228287,112297 C 227407,111442 227366,111354 227474,110548 C 227537,110082 227667,109115 227762,108400 C 227857,107685 228001,106951 228082,106768 C 228181,106543 227997,106124 227512,105468 C 227117,104936 226657,104185 226488,103800 C 226320,103415 226083,102902 225963,102660 C 225800,102333 225807,102065 225993,101617 C 226205,101105 226194,100966 225921,100693 C 225536,100308 225509,99796 225850,99349 C 226166,98935 227112,98695 227290,98984 C 227499,99323 227764,99240 228097,98733 C 228555,98033 228161,97079 227232,96641 C 226435,96265 226275,95915 226091,94151 C 225996,93239 225851,92881 225386,92417 C 224684,91715 224640,91276 225250,91089 C 226494,90706 226710,89713 225699,89024 C 225314,88763 225000,88425 225000,88274 C 225000,88123 224817,88000 224594,88000 C 224127,88000 223848,87472 224153,87167 C 224296,87024 224482,87082 224751,87351 C 225240,87840 226200,88111 226200,87761 C 226200,87626 225953,87318 225651,87077 C 225111,86646 225108,86633 225478,86225 C 225945,85708 225836,84117 225306,83729 C 224689,83278 224973,82288 225700,82355 C 226373,82417 227664,80277 227841,78805 C 227874,78527 228103,78209 228364,78080 C 229203,77663 229501,77043 229085,76583 C 228846,76319 228796,76124 228931,75989 C 229192,75728 229800,75960 229800,76321 C 229800,76616 230042,76691 230267,76466 C 230341,76393 230255,76171 230076,75974 C 229599,75447 229865,74997 230644,75013 C 232292,75048 233401,74766 233522,74283 C 233710,73534 234140,73284 234569,73672 C 235093,74146 235365,74077 235437,73450 C 235523,72702 236383,72584 236990,73236 C 237261,73527 237470,73617 237559,73483 C 238048,72747 241251,72613 241570,73314 C 241748,73705 241884,73751 242588,73656 C 243641,73515 243726,74059 242716,74481 C 242339,74638 241880,74997 241696,75278 C 241491,75591 241096,75839 240677,75917 C 239894,76064 238901,76909 238609,77677 C 238488,77995 238257,78200 238019,78200 C 237443,78200 237037,78702 237147,79278 C 237207,79592 237085,79999 236821,80370 C 236335,81053 236269,81907 236690,82068 C 236849,82129 237075,82522 237192,82940 C 237363,83546 237575,83781 238242,84100 C 238898,84414 239216,84758 239714,85694 C 240211,86627 240483,86922 240960,87046 C 242727,87504 244166,90003 242850,90328 C 242548,90403 241985,90674 241600,90932 C 241215,91189 240563,91626 240150,91902 C 238956,92704 239096,93258 240673,93973 C 241373,94291 242008,94651 242085,94775 C 242161,94899 242614,95000 243091,95000 C 244168,95000 245320,95920 245134,96631 C 245055,96933 245166,97173 245511,97444 C 245795,97668 246000,98037 246000,98326 C 246000,98734 246192,98907 247082,99300 C 248757,100041 248814,100667 247275,101412 C 246138,101963 245810,102580 246276,103292 C 246715,103961 247611,103965 248482,103300 C 249433,102575 249993,102654 250960,103650 C 251413,104118 251923,104616 252092,104758 C 252445,105054 252495,105849 252195,106409 C 251753,107236 252323,107597 254098,107613 C 255596,107627 256988,107689 257537,107767 C 257667,107785 257832,107984 257903,108210 C 258016,108565 258143,108603 258867,108495 C 260180,108299 260795,108673 262785,110880 C 263755,111956 263908,113534 263113,114270 C 262712,114642 262569,114981 262540,115633 L 262500,116500 L 265400,116502 C 268552,116503 269611,116877 269917,118096 C 269978,118340 270308,118666 270649,118820 C 270991,118974 271367,119267 271485,119471 C 271603,119675 271937,120101 272228,120418 C 272518,120735 272810,121212 272877,121478 C 273083,122299 274364,124068 275061,124495 C 276160,125167 276729,125684 277059,126307 C 277232,126633 277997,127548 278759,128340 C 279870,129493 280172,129943 280276,130598 C 280352,131071 280542,131467 280728,131538 C 280995,131641 281028,131871 280923,132894 C 280765,134428 281051,136003 281641,136851 C 282323,137834 283250,138800 283511,138800 C 283639,138800 284153,139160 284653,139600 C 285357,140220 285725,140400 286289,140400 C 286689,140400 287283,140580 287608,140800 C 287934,141020 288451,141369 288759,141576 C 289419,142019 291098,142313 292500,142231 C 293619,142166 296400,143731 296400,144426 C 296400,144608 296535,144809 296700,144872 C 296865,144936 297000,145201 297000,145463 C 297000,145724 297180,146101 297400,146300 C 297620,146499 297800,146823 297800,147019 C 297800,147216 297885,147429 297989,147493 C 298264,147663 299400,149383 299400,149628 C 299400,149742 299603,150000 299850,150200 C 300125,150423 300310,150805 300325,151182 C 300339,151522 300361,152115 300375,152500 C 300391,152951 300499,153200 300677,153200 C 301041,153200 301187,153812 301056,154786 C 300975,155395 301047,155697 301375,156114 C 301870,156743 301930,157644 301500,158000 C 301119,158316 301115,158880 301491,159192 C 301707,159372 301771,159833 301741,160980 C 301701,162482 301719,162546 302350,163179 C 302708,163537 303000,163919 303000,164026 C 303000,164133 303270,164315 303600,164430 C 304070,164594 304200,164758 304200,165189 C 304200,165491 304378,165899 304595,166095 C 304812,166292 305182,166851 305418,167337 C 305653,167823 306083,168374 306373,168560 C 307070,169010 309000,170906 309000,171142 C 309000,171244 309225,171524 309500,171763 C 309817,172038 310000,172408 310000,172774 C 310000,173091 310125,173455 310278,173582 C 310828,174038 310885,175587 310377,176273 C 310050,176716 309917,177179 309906,177919 C 309879,179687 308335,181393 307023,181105 C 306697,181033 306237,181109 305888,181291 C 305564,181460 305139,181598 304941,181599 C 304744,181599 304069,182112 303441,182738 C 302814,183365 301895,184091 301400,184352 C 300905,184613 300383,184978 300241,185163 C 300028,185441 299616,185500 297909,185500 C 296072,185500 295766,185551 295226,185950 C 294711,186330 294363,186400 292990,186400 C 291668,186400 291264,186476 290832,186803 C 290539,187025 290120,187341 289900,187505 C 289680,187669 289217,188028 288871,188302 C 288525,188576 288044,188800 287803,188800 C 287561,188800 287134,188980 286855,189200 C 286575,189420 286147,189600 285904,189600 C 285661,189600 285296,189783 285094,190007 C 284776,190358 284506,190409 283134,190380 C 281741,190350 281502,190397 281221,190758 C 281019,191018 280554,191221 279967,191305 C 278340,191541 277377,193062 278308,193925 C 278869,194445 278720,195154 278009,195340 C 277452,195485 276200,197115 276200,197694 C 276200,197979 276065,198264 275900,198328 C 275716,198398 275600,198701 275600,199109 C 275600,199914 273612,202200 272911,202200 C 272671,202200 272411,202391 272297,202650 C 272185,202906 271884,203129 271600,203168 C 271325,203205 270916,203405 270692,203613 C 270438,203848 270022,203981 269591,203965 C 268961,203941 268094,204150 266841,204626 C 266065,204920 265212,204821 264594,204364 L 264003,203927 L 263539,204364 C 263283,204604 262934,204800 262762,204800 C 262590,204800 262342,204929 262211,205087 C 262080,205245 261731,205429 261436,205496 C 260702,205663 259640,206664 259478,207342 C 259242,208332 257313,209600 256044,209600 C 254898,209600 254431,210583 254351,213162 C 254320,214166 254217,214800 254085,214800 C 253770,214800 253051,213964 252968,213500 C 252860,212899 252062,212875 251523,213456 C 249850,215261 246800,215417 246800,213697 L 246800,213269 L 244750,213753 C 242165,214364 240590,214516 240019,214210 C 239642,214009 239503,214054 239001,214538 C 236558,216900 234812,217461 233580,216281 C 232812,215545 232201,215758 232197,216763 C 232193,217616 232069,217851 231450,218177 C 231001,218413 230200,218194 230200,217834 C 230200,217437 228595,216000 228152,216000 C 227885,216000 227472,215770 227222,215482 C 226801,214998 226693,214973 225599,215100 C 224231,215259 223218,214501 223206,213311 C 223198,212483 222295,211253 221581,211096 C 221262,211026 220888,210812 220750,210621 C 220222,209888 219138,210011 218411,210887 C 218268,211059 217983,211200 217777,211200 C 217572,211200 217291,211380 217154,211600 C 216812,212146 215037,212144 213828,211596 C 213349,211378 212758,211200 212516,211200 C 212274,211200 211902,211068 211688,210906 C 210866,210284 210147,210554 208445,212124 C 207925,212604 207439,212997 207364,212998 C 206564,213010 205515,216304 206018,217222 C 206284,217707 206526,219232 206715,221609 C 206825,222988 205898,224800 205083,224800 C 204918,224800 204540,224979 204242,225198 C 203757,225554 203342,225601 200300,225637 C 196394,225684 195247,226160 196511,227209 C 197117,227712 197230,228162 196906,228788 C 196403,229761 196688,231280 197557,232257 C 197764,232489 197858,232919 197829,233491 C 197793,234170 197881,234460 198215,234771 C 199556,236021 198485,238400 196581,238400 C 195820,238400 195548,238311 195354,238000 C 195151,237676 194887,237600 193964,237600 C 193337,237600 192762,237501 192687,237380 C 192612,237258 192259,237037 191902,236888 C 191239,236611 190871,235768 191126,235105 C 191189,234941 191029,234547 190770,234231 C 190512,233914 190165,233452 190000,233203 C 189190,231980 189117,231937 187782,231900 C 187077,231881 186185,231724 185800,231552 C 184394,230924 182576,230891 181938,231482 C 181631,231767 181167,232000 180908,232000 C 180349,232000 178670,233882 178759,234408 C 178790,234593 178587,234893 178308,235076 C 178029,235259 177800,235534 177800,235687 C 177800,236022 176791,237600 176577,237600 C 176493,237600 176365,238000 176291,238488 C 176218,238976 175988,239530 175779,239719 C 175290,240161 175298,240708 175803,241349 C 176181,241830 176185,241885 175872,242231 C 175561,242574 175561,242625 175869,242966 C 176081,243200 176200,243679 176200,244297 C 176200,245011 176326,245428 176686,245899 C 177149,246507 177164,246617 177012,248291 C 176839,250185 177050,251372 177590,251540 C 178364,251781 178825,252112 179246,252730 C 179496,253097 179864,253398 180064,253399 C 180264,253399 180996,253805 181690,254300 C 183047,255269 183542,255365 185199,254983 C 186005,254797 186131,254819 186431,255188 C 186961,255844 188772,255442 189754,254450 C 190243,253957 190508,253889 190705,254208 C 190776,254323 191010,254360 191226,254292 C 191761,254122 192222,254543 192087,255079 C 191940,255667 193072,256115 193906,255798 C 194376,255619 194533,255655 194934,256031 C 195557,256617 199748,256690 200371,256126 C 200569,255947 201052,255800 201443,255800 C 201981,255800 202234,255678 202482,255300 C 202891,254675 203609,254649 204542,255226 L 205231,255652 L 205808,255226 C 206125,254992 206470,254800 206576,254800 C 207080,254800 207668,253365 207431,252711 C 207118,251845 207140,251066 207481,250935 C 207636,250876 207821,250560 207892,250234 C 207964,249908 208198,249483 208411,249290 C 208625,249096 208800,248852 208800,248748 C 208800,248643 209003,248310 209250,248007 C 209498,247704 209835,247259 210000,247019 C 210525,246253 211513,245790 212148,246012 C 213556,246503 214471,248845 213502,249480 C 213134,249721 213015,249934 213100,250200 C 213166,250408 213036,250937 212810,251381 C 212584,251823 212399,252300 212398,252442 C 212397,252584 212175,253150 211904,253700 C 211634,254250 211410,254980 211406,255323 C 211403,255666 211209,256189 210975,256486 C 210572,256998 210567,257063 210864,257763 C 211036,258168 211227,258680 211288,258900 C 211440,259449 213238,261400 213592,261400 C 213998,261400 215381,262380 216069,263155 C 216449,263584 216770,263773 216995,263702 C 217197,263637 217536,263782 217819,264054 C 218084,264307 218525,264627 218800,264765 C 221972,266356 222988,267803 222410,269911 C 221817,272072 221848,272324 222731,272533 C 223512,272718 224237,273491 224277,274181 C 224289,274408 224863,275173 225550,275880 C 226348,276701 226802,277334 226805,277633 C 226811,278159 227937,278800 228858,278800 C 229147,278800 229565,278994 229786,279231 C 230171,279644 231293,279850 233033,279826 C 233886,279814 234825,281849 234097,282129 C 233138,282497 234325,284400 235513,284400 C 235672,284400 235998,284625 236237,284900 C 236476,285175 236777,285400 236905,285400 C 237034,285400 237355,285588 237619,285817 C 237996,286144 238263,286209 238850,286115 C 239521,286008 239713,286087 240675,286871 C 242405,288280 245243,288353 243600,286946 C 243050,286476 243042,285099 243587,284807 C 244569,284281 246444,285154 247465,286611 C 247727,286985 247978,287045 249405,287078 C 250691,287107 251097,287189 251294,287458 C 251434,287650 251809,287800 252147,287800 C 254041,287800 256707,290204 255890,291175 C 255411,291745 254600,292034 254600,291636 C 254600,290678 251669,290113 250796,290903 C 250515,291158 250216,291222 249700,291139 C 248957,291018 247172,291756 246656,292397 C 246319,292817 246341,293872 246707,294747 C 247641,296982 244104,298914 242400,297100 C 241635,296285 241000,296421 241000,297400 C 241000,298079 241063,298200 241419,298200 C 241650,298200 242078,298371 242371,298579 C 243020,299042 246290,299130 246800,298698 C 246965,298559 247415,298378 247800,298297 C 248185,298215 248678,298025 248895,297874 C 249111,297724 249726,297600 250260,297600 L 251232,297600 L 251100,298200 C 250943,298915 250708,298868 254200,298811 L 256900,298766 L 257750,299426 C 258218,299789 258600,300156 258600,300243 C 258600,300329 258829,300400 259110,300400 C 259396,300400 259822,300619 260082,300900 C 260675,301539 261328,301536 261927,300890 C 262555,300212 262526,300058 261707,299716 C 261226,299515 260973,299254 260878,298863 C 260730,298253 260164,297348 259511,296679 C 259285,296448 258766,295901 258359,295465 L 257617,294671 L 258129,293951 L 258642,293231 L 261771,293222 L 264900,293213 L 265521,292507 C 266252,291676 266226,291680 267342,292220 C 268438,292751 269035,292612 269573,291701 C 269800,291316 270112,291000 270266,291000 C 270655,291000 271600,291773 271600,292090 C 271600,292234 271803,292487 272050,292653 L 272500,292955 L 272078,293531 C 271846,293848 271595,294300 271520,294536 C 271446,294771 271253,295073 271092,295206 C 270932,295340 270800,295609 270800,295805 C 270800,296468 269594,297600 268888,297600 C 268536,297600 268137,297735 268000,297900 C 267840,298093 267397,298200 266762,298200 C 264978,298200 264316,299333 265500,300363 C 266081,300868 266103,300988 265706,301512 C 265328,302012 265328,303388 265706,303888 C 266273,304637 264567,307200 263503,307200 C 263221,307200 262599,307625 261885,308306 C 260725,309412 260069,309746 259494,309526 C 259096,309373 256630,310302 256091,310808 C 255862,311024 255542,311200 255380,311200 C 254947,311200 253861,312710 253708,313526 C 253600,314101 252958,314842 250251,317516 C 246561,321160 246279,321314 245391,320165 C 244436,318931 242921,317600 242470,317600 C 242224,317600 241899,317424 241748,317208 C 241276,316534 239994,316465 239415,317083 C 239148,317367 238770,317600 238573,317600 C 237385,317600 235800,319434 235800,320808 C 235800,321658 234792,322400 233638,322400 C 232713,322400 232449,322476 232246,322800 C 232109,323020 231912,323200 231808,323200 C 231577,323200 229855,324349 229693,324611 C 229629,324715 229315,324800 228995,324800 C 228619,324800 228339,324941 228200,325200 C 227897,325766 226338,325766 225854,325200 C 225417,324690 225105,324695 224581,325219 C 224200,325600 224021,325626 222604,325500 C 221553,325407 221003,325434 220912,325581 C 220588,326104 219057,325826 218293,325107 L 217558,324413 L 217698,323021 C 217797,322033 217949,321527 218219,321283 C 218830,320730 218722,319714 217997,319198 C 216502,318133 216913,316848 219148,315602 C 219614,315342 220054,314944 220126,314718 C 220198,314492 220436,314065 220656,313767 C 221120,313139 221020,312120 220449,311664 C 219740,311097 218601,310400 218386,310400 C 218263,310400 217933,310219 217651,309998 C 217370,309776 216795,309540 216374,309473 C 215033,309258 214625,307292 215636,305914 C 217038,304002 215631,301547 213447,302095 C 212907,302231 211409,303389 211404,303676 C 211402,303773 211018,304234 210550,304701 C 208973,306278 208987,306252 209125,307253 C 209416,309379 208045,310326 204600,310376 C 203047,310399 202601,310477 202158,310802 C 201793,311070 201300,311200 200646,311200 C 200103,311200 199506,311329 199288,311494 C 199075,311655 198710,311790 198477,311794 C 198244,311797 197839,311967 197577,312172 C 196572,312956 194468,313825 193911,313685 C 193511,313585 193279,313655 192992,313962 C 192549,314438 191107,314713 190150,314503 C 188400,314120 186800,314757 186800,315837 C 186800,316547 185574,317552 184267,317915 C 182640,318365 181967,319151 182473,320009 C 182653,320313 182800,320673 182800,320808 C 182800,321363 186786,325590 187314,325595 C 187938,325602 189671,326213 189912,326512 C 190029,326656 190374,326836 190678,326912 C 190983,326989 191326,327259 191442,327512 C 191739,328165 192424,328365 194633,328446 L 196566,328517 L 197591,329509 C 198154,330054 198667,330705 198731,330955 C 198866,331488 199366,331800 200087,331800 C 200661,331800 200770,331390 200300,331000 C 200135,330863 200000,330596 200000,330406 C 200000,330216 199816,329849 199590,329589 C 198879,328768 199115,327734 200049,327584 C 200461,327518 200956,327326 201149,327158 C 201462,326886 202353,326591 202900,326580 C 203624,326564 204761,327076 205410,327710 C 206292,328571 208420,328806 209172,328125 C 209370,327946 209609,327800 209705,327800 C 209800,327800 210137,327553 210453,327250 L 211028,326700 L 211608,327400 C 212426,328385 212195,328979 210988,328994 C 209650,329010 209093,330602 210287,330996 C 210832,331176 211084,331179 211289,331009 C 211461,330866 211924,330828 212532,330906 C 213064,330974 214040,330942 214700,330834 C 215657,330679 215964,330696 216216,330919 C 216783,331424 217302,331242 217978,330301 C 218364,329763 218840,329350 219162,329273 C 219458,329203 219803,329064 219929,328966 C 220168,328778 221414,329249 222038,329763 C 222329,330002 222468,329996 223019,329720 C 223822,329320 225199,329306 225712,329694 C 226257,330106 226875,330069 227300,329600 C 227499,329380 227821,329200 228016,329200 C 228210,329200 228782,328885 229286,328500 C 229791,328115 230376,327800 230586,327800 C 230797,327800 231273,327445 231645,327010 C 232463,326054 233167,325758 234222,325927 C 234969,326046 235619,325855 236800,325167 C 239232,323750 242808,324685 240788,326209 C 240541,326395 240405,326647 240483,326773 C 240713,327145 241369,327031 241612,326577 C 241798,326230 241964,326174 242536,326267 C 242920,326329 243721,326290 244316,326180 C 245366,325986 245422,325999 246194,326619 L 246989,327258 L 246644,327854 C 246455,328183 245993,328687 245618,328976 C 245243,329264 244568,329825 244118,330223 C 243668,330620 242873,331133 242350,331362 C 241704,331644 241400,331897 241400,332151 C 241400,332667 242173,333453 242541,333312 C 243066,333110 243975,332313 244107,331937 C 244299,331392 245403,330200 245716,330200 C 245866,330200 246125,329937 246291,329617 C 246689,328849 247682,328527 249700,328512 C 251425,328499 251722,328623 253629,330151 C 254075,330510 254679,330859 254971,330927 C 255745,331108 256770,332152 257337,333336 L 257833,334371 L 257388,334973 C 257002,335496 256945,335815 256957,337389 L 256971,339202 L 256235,339909 C 255831,340298 255259,340667 254964,340730 C 254669,340793 254219,341067 253964,341340 L 253500,341835 L 254050,342275 C 255206,343200 253459,345600 251629,345600 C 251477,345600 250834,345915 250200,346300 C 248877,347103 248500,347160 248200,346600 C 248082,346380 247857,346200 247700,346200 C 247542,346200 247095,346048 246706,345863 C 246034,345542 245985,345543 245730,345893 C 245440,346290 245000,346162 245000,345681 C 245000,345284 243057,345515 242530,345975 C 242185,346277 242130,346259 241691,345709 C 241228,345128 241214,345125 240806,345494 C 240400,345862 240380,345861 239804,345435 C 239132,344937 238940,344909 238424,345231 C 238148,345403 237574,345408 236172,345249 C 234813,345094 234013,345096 233295,345256 C 232748,345378 231805,345461 231200,345441 C 230277,345410 230047,345475 229769,345843 C 229506,346190 229215,346287 228369,346308 C 227781,346323 227045,346440 226734,346569 C 226187,346794 225424,346852 223286,346827 C 222245,346815 221960,346991 220750,348394 C 220145,349096 218880,348704 219021,347858 C 219089,347448 218980,347189 218788,347307 C 218671,347380 218630,347682 218697,347984 C 218763,348285 218720,348785 218601,349096 L 218386,349662 L 215562,349533 C 213462,349438 212651,349327 212403,349102 C 211940,348684 211543,348724 211233,349222 C 211036,349537 210834,349617 210435,349537 C 210141,349479 209744,349545 209554,349684 C 209311,349863 208927,349892 208254,349781 C 207729,349695 206799,349618 206186,349612 C 205256,349602 205001,349518 204638,349101 C 204226,348626 204167,348615 203452,348872 C 202062,349372 201274,349600 200933,349600 C 200747,349600 200426,349705 200220,349834 C 199528,350266 195891,349689 195019,349008 C 193658,347945 191400,348116 191400,349281 C 191400,350658 193328,351035 200038,350969 C 205144,350920 205606,350944 205975,351277 C 206309,351580 206484,351604 207037,351428 C 208511,350957 211062,350920 212045,351355 C 213616,352050 213593,353761 212016,353510 C 210896,353331 210576,353664 211233,354322 C 211819,354910 213920,355082 214511,354591 C 214727,354412 214992,354457 215684,354792 C 216362,355121 216671,355176 216961,355021 C 217261,354860 217488,354922 218011,355308 C 218378,355579 218766,355800 218873,355800 C 218981,355800 219234,355950 219436,356132 C 219846,356504 220398,356835 221326,357268 C 221670,357428 222012,357658 222087,357780 C 222162,357901 222383,358000 222577,358000 C 222771,358000 223142,358225 223400,358500 C 223972,359109 224192,359121 224882,358579 C 225435,358144 225656,358144 227300,358579 C 228892,359000 230233,358858 230880,358198 C 231215,357856 231763,357556 232180,357486 C 233421,357278 233561,357199 233773,356592 C 234001,355938 234584,355799 235000,356300 C 235375,356752 235662,356663 236054,355976 C 236319,355511 236509,355382 236816,355462 C 237102,355537 237385,355388 237762,354965 C 238579,354048 238880,353948 239460,354404 C 239737,354622 240151,354800 240382,354800 C 240819,354800 240944,354513 240600,354300 C 240490,354232 240400,354047 240400,353888 C 240400,353422 242034,353512 242672,354014 C 243034,354299 243336,354384 243640,354287 C 244286,354082 247842,354042 248236,354235 C 248569,354397 249200,353981 249200,353598 C 249200,353212 250830,353451 251385,353918 C 251862,354319 252041,354360 252605,354199 C 252969,354094 253481,354063 253744,354129 C 254079,354213 254363,354117 254692,353807 C 255025,353495 255360,353383 255838,353424 C 256237,353459 256715,353342 257002,353141 C 257270,352954 257831,352800 258249,352800 C 258854,352800 259045,352707 259183,352350 C 259278,352103 259693,351630 260104,351300 C 260516,350970 261156,350401 261526,350036 C 262005,349564 262312,349409 262591,349497 C 262861,349583 263063,349493 263240,349211 C 263388,348973 263708,348800 264001,348800 C 264325,348800 264576,348645 264703,348364 C 264811,348124 265170,347832 265500,347714 C 266527,347348 267194,346779 267362,346127 C 267490,345628 267643,345487 268112,345434 C 268435,345398 268886,345195 269113,344984 C 269607,344525 270801,344437 271849,344783 C 272721,345071 273000,344954 273000,344300 C 273000,343715 273322,343486 273701,343801 C 274017,344063 275400,343726 275400,343386 C 275400,343286 275657,342955 275972,342652 C 276287,342348 276694,341808 276876,341452 C 277059,341095 277431,340658 277704,340479 C 278354,340053 278333,339816 277650,339862 C 277150,339897 277104,339843 277148,339271 C 277209,338470 277033,338406 274738,338381 C 273281,338365 272799,338284 272373,337981 C 272079,337771 271756,337600 271657,337600 C 270936,337600 270364,336424 270473,335169 C 270534,334471 270592,333724 270601,333509 C 270630,332873 270980,332606 271617,332733 C 272127,332835 272202,332791 272216,332375 C 272225,332114 272446,331540 272708,331100 C 272969,330660 273359,329929 273573,329476 C 273840,328913 274131,328610 274494,328519 C 274815,328439 275119,328163 275263,327822 C 275538,327169 276615,326200 277067,326200 C 277238,326200 277961,325705 278674,325100 C 279387,324495 280095,324000 280248,324000 C 280400,324000 280790,323723 281113,323384 C 282117,322331 283620,321736 284607,322002 C 285523,322249 285882,322099 287051,320982 C 287385,320662 287815,320400 288005,320400 C 288195,320400 288458,320271 288589,320113 C 288955,319673 289882,319549 290785,319819 C 291429,320012 291774,320011 292429,319815 C 293791,319407 294517,320283 294452,322255 C 294385,324296 294740,325589 295477,325986 C 295797,326159 296201,326458 296374,326650 C 296547,326843 296781,327004 296894,327009 C 297125,327020 298519,328926 298465,329158 C 298446,329240 298369,329553 298294,329854 C 298195,330248 298232,330400 298428,330401 C 298578,330402 298940,330528 299234,330681 C 299527,330834 300157,331024 300634,331102 C 301110,331181 301590,331317 301700,331404 C 301810,331491 303065,331652 304488,331762 C 306463,331914 307132,332037 307310,332280 C 307439,332456 307626,332600 307725,332600 C 307825,332600 308220,332768 308604,332974 C 308988,333180 309686,333413 310155,333492 C 310624,333572 311135,333763 311290,333918 C 311445,334073 311833,334200 312154,334200 C 312570,334200 312797,334333 312949,334668 C 313067,334926 313486,335290 313881,335478 C 314277,335665 314600,335901 314600,336002 C 314600,336103 314889,336515 315243,336918 L 315885,337650 L 317193,337505 C 317912,337425 318680,337372 318900,337386 C 319120,337400 320078,337432 321029,337456 C 322351,337490 322849,337582 323145,337850 C 323413,338093 323864,338200 324621,338200 C 325328,338200 325884,338321 326202,338544 C 326472,338733 327144,338910 327696,338938 C 330755,339092 331048,339136 331233,339466 C 331336,339650 331601,339800 331823,339800 C 333886,339800 332971,341873 330665,342424 C 330134,342551 329581,342687 329435,342727 C 328927,342865 329298,343474 330000,343655 C 330385,343755 330800,343918 330922,344019 C 331247,344287 332787,343547 333651,342708 C 334618,341769 336056,341819 337132,342830 C 337813,343470 337723,343929 336825,344387 C 335627,344998 335439,345893 336394,346437 C 337225,346909 337404,347742 336779,348223 C 336256,348625 335495,348716 335300,348400 C 335232,348290 334777,348200 334288,348200 C 333675,348200 333280,348080 333011,347811 C 332797,347597 332280,347362 331861,347289 C 331443,347215 330901,347030 330657,346878 C 330169,346572 329400,346504 329400,346768 C 329400,346860 329890,347175 330489,347468 C 331087,347761 331633,348091 331700,348201 C 331768,348310 332088,348400 332412,348400 C 332735,348400 333180,348580 333400,348800 C 334003,349403 337509,349403 337700,348800 C 337834,348377 338292,348263 338500,348600 C 338568,348710 338900,348800 339239,348800 C 340416,348800 342316,351049 342487,352646 L 342625,353934 L 341729,354617 C 340093,355864 340358,356956 342215,356620 C 344179,356265 344095,356257 344160,356816 C 344274,357795 343605,358298 342233,358267 C 341057,358240 341020,358255 340813,358849 C 340507,359728 340548,360000 340988,360000 C 341202,360000 341435,360096 341508,360212 C 341580,360329 341855,360507 342119,360607 C 342740,360843 342843,362527 342250,362736 C 342058,362804 341585,362993 341200,363156 L 340500,363454 L 341284,363631 C 343385,364106 343047,365600 340838,365600 C 339281,365600 338590,365398 338351,364872 C 338133,364394 337275,364230 336516,364521 C 336017,364713 336081,366430 336600,366754 C 337107,367070 337112,367637 336611,368090 C 336397,368283 336195,368635 336161,368871 C 336102,369284 336019,369298 333867,369242 C 332476,369207 331585,369263 331505,369392 C 331341,369658 330288,369661 329795,369397 C 329378,369174 329168,369428 328924,370450 L 328792,371000 L 330869,371000 C 332643,371000 333020,371058 333455,371400 C 334092,371901 334299,371901 334802,371398 C 335207,370993 338541,370946 340515,371316 C 340951,371398 341341,371308 341818,371017 C 342329,370706 342836,370601 343838,370601 C 344574,370600 345232,370510 345300,370400 C 345368,370290 345742,370200 346130,370200 C 346534,370200 347055,370029 347345,369800 C 347676,369540 348157,369400 348717,369400 C 349198,369400 349651,369287 349740,369146 C 350051,368651 350921,368473 352700,368542 C 353690,368580 354703,368610 354950,368609 C 355927,368605 356381,368611 358546,368655 C 360641,368697 360813,368731 361116,369163 C 361295,369418 361566,369579 361717,369521 C 361869,369463 362366,369547 362822,369708 C 363780,370046 364600,370088 364600,369800 C 364600,369690 364372,369600 364094,369600 C 363518,369600 363199,369050 363621,368783 C 364061,368504 364988,368570 365584,368922 C 366241,369310 367257,368890 368606,367671 L 369394,366959 L 372047,367000 C 376611,367070 382479,366787 382653,366487 C 382770,366286 383725,366218 386753,366199 C 392993,366157 393850,366195 394367,366529 C 394838,366834 395503,366827 398657,366487 C 399381,366409 399912,366444 400077,366581 C 400255,366728 402499,366803 407009,366811 C 412766,366821 413752,366867 414223,367145 C 414713,367435 414814,367437 415234,367162 C 415636,366898 417019,366857 425300,366864 C 433853,366871 434969,366836 435530,366541 C 436065,366260 436855,366212 440761,366220 C 443291,366226 445758,366171 446245,366098 C 446731,366025 447482,366060 447914,366175 C 448416,366309 448987,366319 449494,366203 C 450158,366052 450402,366092 450976,366447 C 451663,366872 451676,366872 466905,366826 C 482661,366779 483787,366828 484190,367581 C 484347,367875 484822,367902 488633,367832 C 493804,367736 493371,367732 495200,367902 C 496025,367979 499715,368075 503400,368114 C 508711,368171 510266,368248 510900,368484 C 511829,368830 512639,368881 512910,368610 C 513030,368490 513992,368486 515496,368600 C 517556,368755 517938,368737 518235,368468 C 518518,368212 519230,368151 522207,368128 L 525835,368100 L 526437,367350 C 526768,366938 527163,366600 527315,366600 C 527467,366600 527736,366379 527913,366108 C 528091,365837 528430,365557 528668,365485 C 528906,365413 529298,365173 529539,364953 C 529850,364668 530127,364588 530487,364679 C 530766,364749 531167,364699 531378,364567 C 531684,364376 531855,364390 532233,364637 C 532625,364895 532920,364912 533982,364741 C 534906,364592 535428,364598 535865,364763 C 536221,364898 536558,364919 536685,364815 C 536974,364577 539370,364590 539518,364830 C 539589,364944 539748,364926 539918,364785 C 540083,364648 540458,364602 540817,364673 C 541156,364741 541603,364705 541812,364594 C 542078,364451 542306,364463 542579,364633 C 542872,364816 543035,364820 543244,364646 C 543631,364326 544323,364552 544695,365121 C 545091,365725 545540,365730 546008,365136 C 546452,364570 548866,364474 549495,364996 C 549693,365160 550344,365309 550974,365335 C 551593,365361 552505,365532 553000,365716 C 554027,366098 556738,366225 563300,366197 C 565610,366187 567590,366186 567700,366194 C 567810,366202 568530,366206 569300,366203 C 570070,366199 571015,366203 571400,366212 C 574742,366285 575534,366332 575760,366474 C 575907,366566 576298,366514 576660,366355 C 577187,366123 578062,366103 581600,366243 C 587032,366458 592033,366290 592260,365885 C 592348,365728 592697,365600 593036,365600 C 593374,365600 594138,365322 594732,364981 C 595757,364395 595839,364380 596300,364681 C 597037,365165 597519,365080 597793,364418 L 598034,363835 L 599667,363907 C 601694,363995 604709,364355 605477,364601 C 605842,364718 606190,364712 606427,364586 C 606684,364448 606936,364459 607238,364620 C 607695,364865 611233,364557 612100,364197 C 612789,363911 614117,363838 614517,364063 C 616402,365128 620294,364222 620095,362766 C 619941,361643 620293,361317 621900,361090 C 623098,360921 623406,360775 624676,359771 C 625213,359347 625779,359000 625933,359000 C 626088,359000 626454,358843 626748,358650 C 627141,358393 627693,358300 628834,358300 C 630223,358300 630410,358254 630619,357865 C 630906,357329 631668,357115 632227,357414 C 632460,357539 632925,357581 633273,357508 C 634259,357302 636378,357021 637800,356907 C 640198,356714 640690,356592 641392,356013 C 641997,355513 642058,355383 641876,354971 C 641320,353707 643349,352583 643997,353795 C 644159,354096 644397,354203 644860,354180 C 645541,354148 646595,354386 647900,354868 C 648537,355103 649188,355132 651100,355011 C 652420,354928 653681,354926 653902,355006 C 654123,355087 654944,355108 655726,355052 C 656999,354961 657216,355000 657791,355425 C 658776,356153 663434,356149 664024,355420 C 664389,354969 664427,354962 664788,355289 C 665021,355500 665577,355655 666233,355692 C 666820,355725 667619,355816 668009,355895 C 668645,356024 668743,355985 668957,355515 L 669196,354991 L 671913,355039 C 673407,355065 674674,355157 674727,355243 C 674986,355662 675621,355257 677134,353705 C 678044,352773 679009,351955 679279,351887 C 679549,351820 679926,351592 680116,351382 C 680589,350860 681237,350903 681881,351500 C 682709,352268 684652,352045 684217,351233 C 683611,350099 684127,348600 685124,348600 C 685592,348600 685800,348507 685800,348300 C 685800,347932 685555,347965 688848,347888 L 691597,347823 L 692698,348873 C 693903,350022 693992,350340 693417,351467 C 692857,352564 692612,352800 692026,352801 C 691298,352803 690179,353147 689700,353517 C 689210,353896 689960,354703 690611,354496 C 690806,354434 691024,354477 691095,354592 C 691307,354935 695935,354852 697206,354482 C 697808,354307 698525,354168 698800,354173 C 706740,354321 707676,354219 707561,353221 L 707500,352700 L 704524,352692 C 702471,352687 701395,352764 701052,352942 C 700253,353356 699823,353265 699677,352650 C 699474,351795 699024,351386 698446,351531 C 698172,351600 697985,351576 698030,351478 C 698717,349995 698779,349970 701370,350140 C 702918,350242 703298,350210 703479,349964 C 703896,349399 713649,349059 714286,349589 C 714479,349749 714708,349748 715126,349586 C 715442,349464 716420,349338 717300,349307 C 718284,349273 719127,349129 719491,348933 C 719930,348697 720379,348646 721238,348735 C 721904,348805 722900,348749 723591,348602 C 724509,348407 724921,348401 725347,348578 C 726006,348851 725448,348834 733676,348824 C 740704,348814 742028,348658 742298,347805 C 742535,347060 742915,346955 743528,347464 C 744408,348197 746400,348359 746400,347699 C 746400,346963 745973,346998 755196,346984 C 758309,346980 759156,346921 759412,346689 C 759588,346530 759927,346400 760166,346400 C 760405,346400 760600,346311 760600,346202 C 760600,346093 761049,345486 761599,344852 C 762148,344218 762733,343543 762899,343350 C 763064,343158 763200,342690 763200,342312 C 763200,341933 763290,341568 763400,341500 C 764205,341002 762994,340834 762038,341311 C 761221,341719 752754,341508 751900,341058 C 751680,340943 751209,340892 750853,340946 C 749710,341120 749240,340880 748972,339986 C 748650,338911 747611,338393 746769,338888 C 746477,339060 746131,339200 746001,339200 C 745870,339200 745534,339380 745255,339600 C 744975,339820 744615,340000 744455,340000 C 744294,340000 743954,340165 743698,340366 C 743264,340707 742686,340730 734977,340715 L 726720,340699 L 725810,341620 C 725310,342126 724785,342688 724644,342868 C 724504,343048 724144,343245 723844,343305 C 723545,343365 722895,343547 722400,343708 C 721007,344163 717995,344101 717147,343601 C 716162,343020 709463,342901 708852,343453 C 708503,343769 708391,343777 707802,343529 C 707248,343296 707059,343295 706621,343520 C 706334,343668 705594,343841 704976,343905 C 703959,344011 703808,344091 703376,344749 C 702841,345567 702081,345866 700984,345691 C 700472,345609 700195,345665 700010,345888 C 699685,346279 698625,346282 698112,345894 C 697898,345732 697558,345600 697355,345600 C 697152,345600 696533,345370 695978,345089 C 694854,344520 694400,344647 694400,345531 C 694400,345815 694257,346056 694050,346120 C 693858,346179 693308,346405 692828,346622 C 692141,346932 691822,346975 691328,346824 C 690983,346718 689367,346592 687738,346545 L 684776,346457 L 684029,345729 C 683619,345328 683174,345000 683040,345000 C 682907,345000 682602,344775 682363,344500 C 682124,344225 681778,344000 681595,344000 C 681411,344000 681054,343820 680800,343600 C 680268,343138 680211,343130 679484,343406 C 679107,343550 678742,343546 678280,343393 C 677609,343172 676607,343620 676140,344350 C 675919,344695 675412,344664 675271,344297 C 675123,343911 672744,344104 672045,344557 C 671638,344821 671550,344817 671215,344514 C 670935,344260 670657,344209 670117,344310 C 668952,344529 666824,344224 666374,343774 C 665569,342969 662282,342899 661190,343665 C 660926,343849 660544,344000 660340,344000 C 659310,344000 658484,345666 659106,346488 C 659722,347302 659131,348200 657980,348200 C 657688,348200 657337,348335 657200,348500 C 656852,348919 656329,348874 655887,348386 C 655493,347950 654408,347981 653848,348444 C 653710,348558 653188,348606 652688,348549 C 652069,348479 651461,348567 650787,348823 C 649472,349323 649373,349307 648860,348516 C 648522,347993 648200,347782 647460,347600 C 645865,347207 643544,347031 643155,347274 C 642891,347440 642664,347406 642202,347133 C 641510,346724 640490,346940 639652,347674 C 639249,348026 639127,348040 638431,347810 C 637532,347513 636911,347659 636309,348309 C 635919,348730 635656,348782 633390,348888 C 632021,348952 630765,349012 630600,349022 C 630435,349032 629760,348944 629100,348827 C 627660,348572 625784,348787 625308,349264 C 624794,349778 622666,349732 622094,349194 C 621680,348805 621000,348822 621000,349221 C 621000,349581 620107,349325 618719,348566 C 618509,348451 617789,348328 617119,348292 C 616448,348257 615394,348090 614776,347923 C 613227,347504 611731,347834 611640,348615 C 611587,349074 611652,349133 612240,349149 C 613240,349176 614846,349494 615337,349761 C 615577,349893 616156,350000 616624,350000 C 617214,350000 617612,350129 617925,350423 C 618204,350685 618741,350885 619338,350947 C 620004,351017 620485,351214 620900,351587 C 621230,351883 621748,352230 622050,352358 C 622621,352600 622724,352895 622411,353389 C 622267,353616 622126,353631 621746,353457 C 621073,353151 620754,353417 620833,354222 L 620900,354900 L 619237,355038 C 618080,355134 617350,355308 616837,355611 C 616229,355970 615906,356026 614991,355930 C 613881,355815 612922,356013 611356,356682 C 610947,356857 610317,357003 609956,357006 C 609595,357010 609125,357145 608912,357306 C 608352,357729 605389,357708 604551,357275 C 604205,357096 603294,356912 602527,356867 C 601362,356798 601056,356703 600675,356292 C 600424,356021 600129,355800 600020,355800 C 599910,355800 599403,355519 598894,355175 C 598056,354609 597921,354575 597473,354815 C 597061,355035 596870,355034 596339,354811 C 595951,354647 594853,354533 593545,354521 L 591390,354500 L 590683,355249 C 589535,356466 588124,356350 586219,354882 C 585546,354363 585275,354255 585071,354424 C 584541,354864 581808,353986 581187,353176 C 580891,352790 580670,352769 576987,352779 C 572138,352792 570268,352206 569589,350460 C 569344,349831 568276,349622 565700,349697 C 564490,349733 563399,349679 563275,349577 C 563151,349476 562656,349395 562175,349397 C 558220,349419 557739,349386 557185,349059 C 555891,348295 556489,346937 558162,346839 L 559204,346779 L 558668,346076 C 558077,345301 557490,345276 556700,345992 C 555580,347007 551662,346603 550566,345359 C 550033,344754 550028,344753 548988,345003 L 547945,345253 L 547298,344483 C 546702,343773 546614,343732 546176,343966 C 544818,344690 544587,344851 544395,345210 C 543466,346946 541326,344783 542112,342903 C 542394,342228 542394,342125 542112,341813 C 541521,341160 541756,340137 542596,339702 C 543334,339320 543733,338351 543428,337682 C 543303,337406 543200,336976 543200,336726 C 543200,336294 541884,335200 541364,335200 C 541253,335200 540934,335020 540655,334800 C 540375,334580 539888,334400 539573,334400 C 539258,334400 538820,334220 538600,334000 C 538080,333480 537200,333461 537200,333969 C 537200,334432 537735,334907 538447,335076 C 538749,335148 539154,335450 539347,335748 C 539541,336047 539955,336519 540267,336799 L 540834,337308 L 540493,338160 C 540305,338628 539983,339102 539776,339213 C 539523,339348 539400,339633 539400,340086 C 539400,340524 539286,340801 539072,340883 C 538796,340989 538762,341215 538862,342288 C 538952,343245 538913,343624 538707,343795 C 538251,344173 538106,345565 538480,345978 C 539230,346807 538581,347400 536925,347400 C 536458,347400 535902,347532 535688,347694 C 535112,348129 533933,348079 533500,347600 C 533301,347380 532897,347200 532602,347200 C 532113,347200 530800,345945 530800,345477 C 530800,345066 530119,344626 529628,344720 C 528731,344892 527928,343667 528042,342299 C 528145,341056 528988,339839 529763,339814 C 530514,339791 531000,339428 531000,338889 C 531000,337830 529488,337839 527043,338912 C 526682,339070 526230,339200 526038,339200 C 525846,339200 525510,339325 525292,339478 C 525074,339631 524094,339823 523114,339905 C 521909,340005 521115,340182 520658,340452 C 520167,340741 519766,340821 519192,340744 C 518758,340686 517797,340714 517057,340805 C 515106,341047 514705,340916 514024,339809 C 513055,338234 511633,337808 510319,338700 C 509479,339270 508379,339357 507986,338884 C 507769,338621 507482,338593 506312,338718 C 504677,338892 504625,338890 503300,338602 C 502750,338483 502064,338389 501776,338394 C 501487,338399 501139,338267 501001,338101 C 500673,337705 500440,337721 499500,338200 C 498580,338669 498026,338700 497142,338330 C 496761,338171 496334,338125 496098,338216 C 495244,338550 493190,338421 492655,338000 C 492322,337738 491843,337600 491271,337600 C 490644,337600 490299,337487 490054,337200 C 489813,336919 489464,336800 488883,336800 C 488360,336800 487868,336654 487551,336404 C 487274,336186 486834,335915 486574,335801 C 486313,335687 485703,335370 485219,335097 C 484734,334823 484120,334600 483855,334600 C 483590,334600 483200,334507 482987,334393 C 482103,333920 481155,335978 482012,336508 C 483259,337278 482412,338400 480584,338400 C 478584,338400 477578,336260 478894,334807 C 479868,333730 477618,333124 475900,334000 C 474848,334536 473811,334317 472600,333302 C 472435,333164 471949,332988 471520,332911 C 470700,332764 469600,331857 469600,331330 C 469600,330883 468660,330222 468198,330343 C 467979,330400 467553,330282 467250,330080 C 466948,329879 466533,329741 466328,329773 C 466123,329806 465689,329578 465364,329266 C 464674,328608 462494,328480 461836,329060 C 461651,329222 461188,329422 460808,329503 C 459806,329716 458870,330551 458396,331655 C 457918,332766 457482,333000 455897,333000 C 455203,333000 454763,333096 454660,333271 C 454504,333536 453759,334000 453491,334000 C 453270,334000 453607,332927 453947,332550 C 454240,332224 454220,332200 453662,332200 C 453316,332200 452909,332031 452700,331800 C 452172,331217 451725,331274 451883,331904 C 452052,332578 451541,332770 450777,332318 C 450141,331943 449800,332033 449800,332579 C 449800,333145 450846,333923 451971,334193 C 452668,334360 453081,334583 453229,334871 C 453351,335107 453620,335488 453829,335717 C 454037,335946 454183,336351 454154,336616 C 454072,337348 454928,337415 455201,336698 C 455373,336244 455484,336187 455978,336295 C 456490,336408 456578,336352 456774,335788 C 456978,335202 457046,335164 457674,335282 C 458178,335376 458383,335332 458468,335111 C 458637,334671 459769,334262 461537,334000 C 462397,333873 463486,333641 463957,333485 C 465035,333127 469607,333087 469952,333432 C 470080,333560 470615,333813 471142,333994 C 472313,334398 472704,335926 471760,336412 C 471507,336542 471075,336852 470800,337100 C 470420,337443 469976,337576 468950,337653 C 468177,337711 467380,337898 467084,338092 C 466709,338338 466357,338394 465792,338299 C 465126,338186 464940,338242 464498,338684 C 464113,339069 463776,339200 463173,339200 C 462583,339200 462269,339318 462011,339636 C 461692,340030 461598,340048 461051,339821 C 460562,339619 460364,339619 460038,339823 C 459709,340028 459573,340026 459316,339813 C 459061,339602 458941,339600 458696,339803 C 458483,339980 458083,340011 457346,339908 C 455692,339675 454863,339803 453969,340428 C 453529,340737 453013,340805 450919,340835 C 449534,340854 448400,340911 448400,340961 C 448400,341012 448589,341358 448819,341731 C 449291,342495 449209,343000 448613,343000 C 448394,343000 448118,343180 448000,343400 C 447745,343877 447400,343926 447400,343485 C 447400,343225 447310,343242 446873,343585 C 446075,344213 443576,344192 443153,343554 C 442859,343111 442820,343108 438189,343154 C 433861,343196 433466,343170 432755,342800 C 432333,342580 431717,342400 431386,342400 C 431055,342400 430431,342220 430000,342000 C 429341,341664 428821,341600 426739,341600 C 424516,341600 424225,341559 423900,341200 C 423667,340943 423284,340800 422827,340800 C 422260,340800 421941,340629 421256,339957 C 420471,339187 420315,339117 419461,339154 C 418340,339203 417887,338867 417591,337768 C 417478,337346 417302,337000 417200,337000 C 417099,337000 416518,336595 415911,336100 C 415303,335605 414692,335200 414553,335199 C 414414,335199 414005,335019 413645,334799 C 413285,334580 412874,334400 412731,334400 C 412588,334400 412011,333825 411448,333122 C 410874,332406 410089,331681 409662,331472 C 408960,331129 408892,331022 408800,330104 L 408700,329107 L 407725,328945 C 407178,328854 406439,328545 406041,328241 C 405370,327729 403726,327241 402577,327213 C 402289,327206 401825,327020 401545,326800 C 401232,326554 400734,326400 400249,326400 C 399716,326400 399345,326271 399100,326000 C 398901,325780 398526,325600 398267,325600 C 398008,325600 397642,325420 397454,325200 C 397265,324980 396974,324797 396806,324794 C 395048,324760 394267,320693 395615,318591 C 395788,318321 395983,317954 396049,317776 C 396114,317597 396417,317389 396721,317312 C 397026,317236 397376,317035 397500,316866 C 397625,316695 398160,316513 398712,316454 C 399255,316396 399844,316224 400021,316070 C 400551,315609 402100,315853 403094,316553 C 403566,316886 404165,317223 404426,317304 C 404687,317384 405061,317618 405258,317825 C 406119,318727 408400,317848 408400,316614 C 408400,316384 408670,315914 409000,315569 C 409330,315223 409600,314815 409600,314661 C 409600,314507 409809,314183 410065,313940 C 411502,312581 411435,311766 409857,311368 C 409245,311214 408917,311006 408800,310700 C 408707,310455 408489,310200 408315,310134 C 407798,309935 407953,309632 408792,309204 C 409787,308697 409654,308660 410289,309620 C 410798,310388 410878,310433 411566,310322 C 413920,309944 413944,309944 414329,310327 C 415133,311125 416833,311830 417630,311695 C 418966,311469 419865,312380 419723,313816 C 419515,315929 420582,317679 422415,318228 C 424451,318838 424709,319972 423044,320998 C 421402,322009 421200,322198 421200,322728 C 421200,323008 421380,323466 421600,323745 C 421820,324025 422002,324444 422005,324677 C 422008,324939 422323,325328 422834,325700 C 423287,326030 424013,326593 424448,326950 C 425017,327418 425442,327601 425969,327603 C 426371,327605 426925,327737 427200,327898 C 427475,328058 427982,328324 428327,328488 C 428723,328676 429003,328990 429090,329343 C 429437,330754 432624,332947 433986,332712 C 434378,332645 435150,332520 435700,332435 C 437157,332209 437957,331610 437684,330950 C 437543,330611 435927,329600 435524,329600 C 435346,329600 435016,329416 434792,329192 C 434568,328968 434185,328698 433942,328592 C 433699,328487 433365,328316 433200,328212 C 433035,328109 432665,327975 432379,327915 C 430710,327568 429770,325811 430385,324190 C 430621,323571 430730,322921 430665,322523 C 430455,321231 433398,319378 435163,319689 C 435568,319761 436530,319889 437300,319975 C 438070,320060 438953,320236 439263,320365 C 439573,320494 440273,320600 440819,320600 C 441496,320600 441848,320691 441922,320886 C 442145,321466 444937,321364 445499,320757 C 446277,319914 446267,319623 445446,319253 C 445036,319067 444543,318787 444352,318629 C 443795,318170 441496,318304 440973,318827 C 440656,319144 440415,319210 439930,319110 C 439584,319039 438838,318989 438273,319000 C 437354,319018 435515,318553 434850,318134 C 434402,317852 434585,317242 435400,316300 C 436295,315266 436284,315301 435979,314426 C 435647,313473 435110,313271 434567,313895 C 434326,314173 433975,314400 433788,314400 C 433602,314400 433337,314535 433200,314700 C 432088,316039 428979,313391 429060,311173 C 429105,309935 428815,309400 428100,309400 C 427852,309400 427537,309265 427400,309100 C 427263,308935 427034,308800 426891,308800 C 426748,308800 426363,308575 426036,308300 C 425266,307652 424535,307646 424244,308284 C 423850,309148 419794,309139 419462,308273 C 419408,308134 418947,307957 418437,307880 C 417756,307778 417336,307563 416858,307070 C 416500,306702 416168,306400 416120,306400 C 415817,306400 414200,307220 414200,307374 C 414200,308246 411565,308946 410718,308300 C 410357,308025 409867,307800 409628,307800 C 409390,307800 409025,307694 408817,307564 C 407998,307053 406179,309402 406919,310016 C 407154,310211 407207,310479 407119,311028 C 407051,311449 407087,311830 407200,311900 C 407644,312174 407416,313540 406820,314179 C 406082,314969 405443,314975 404700,314200 C 404384,313870 403929,313600 403690,313600 C 403450,313600 403025,313420 402745,313200 C 402466,312980 402145,312800 402032,312800 C 401576,312800 401593,311949 402071,310750 C 403117,308128 402892,307000 401323,307000 C 400830,307000 400173,306898 399863,306773 C 399553,306648 398940,306473 398500,306385 C 396212,305925 395793,305738 394985,304815 C 393886,303560 393493,303159 392959,302746 C 392149,302120 391017,301600 390464,301600 C 389708,301600 387449,300207 387308,299653 C 387238,299378 386983,299156 386647,299076 C 386346,299005 385965,298834 385800,298697 C 385635,298560 385275,298380 385000,298299 C 384725,298217 384337,297979 384137,297770 C 383838,297456 383605,297412 382800,297519 C 381749,297658 380681,297207 379963,296320 C 379653,295937 379456,295909 377519,295971 L 375412,296038 L 375073,295329 C 374720,294587 374908,294000 375500,294000 C 375638,294000 375863,293865 376000,293700 C 376174,293490 376636,293400 377534,293400 C 378855,293400 380200,292587 380200,291789 C 380200,291641 380463,291245 380784,290910 C 382115,289519 382589,288153 382000,287400 C 381744,287073 381607,286584 381604,285986 C 381600,285136 381541,285032 380774,284530 L 379948,283989 L 379111,284395 C 378347,284764 377884,284800 373846,284800 C 370840,284800 369250,284877 368895,285039 C 368488,285224 368284,285224 367988,285039 C 367778,284907 367429,284800 367212,284800 C 366277,284800 365302,282531 365820,281562 C 365985,281254 365977,281030 365788,280677 C 365572,280273 365588,280145 365898,279802 C 366230,279435 366235,279370 365947,279050 C 365773,278858 365566,278430 365486,278100 C 365406,277770 365084,277172 364770,276771 C 363990,275774 364001,274865 364804,274096 C 365137,273777 365508,273185 365630,272780 C 366077,271287 366589,270901 368131,270893 C 369614,270886 370814,270300 371286,269352 C 371706,268510 372504,268240 373052,268755 C 373313,269000 373675,269200 373858,269200 C 374041,269200 374338,269425 374518,269700 C 374775,270092 375015,270200 375626,270200 C 376055,270200 376579,270309 376792,270441 C 377109,270640 377250,270617 377585,270313 C 378267,269697 379693,270012 380702,271002 C 381149,271441 381647,271801 381808,271802 C 382363,271806 383463,273161 383488,273871 C 383500,274236 383658,274759 383838,275033 C 384052,275360 384103,275631 383986,275816 C 383712,276249 383724,276271 384900,277456 C 385505,278066 386000,278694 386000,278852 C 386000,279409 386714,279834 387430,279702 C 387959,279604 388245,279686 388789,280089 C 389168,280370 389637,280600 389832,280600 C 390603,280600 391556,282676 390900,282928 C 390487,283086 390522,283788 390950,283921 C 391143,283980 391570,284145 391900,284287 C 392345,284478 392913,284500 394100,284372 C 397056,284055 399271,284240 399959,284863 C 400164,285049 400565,285200 400850,285200 C 401136,285200 401637,285425 401964,285700 C 403087,286645 405111,286337 406045,285078 C 407065,283704 408372,282415 408875,282288 C 409169,282215 409520,282007 409656,281827 C 410137,281187 411737,280268 413527,279604 C 413871,279476 414405,279107 414714,278785 C 415022,278463 415399,278200 415552,278200 C 415854,278200 417495,277306 418039,276845 C 418622,276352 418679,275495 418187,274620 C 417648,273661 417776,273200 418581,273200 C 420357,273200 421851,275433 420924,276702 C 420681,277034 420708,277172 421154,277846 C 421831,278869 420718,280600 419383,280600 C 419259,280600 418881,280833 418542,281118 C 418074,281512 417788,281608 417346,281519 C 416580,281366 415422,282278 413371,284650 C 412843,285260 412388,285600 412098,285600 C 410951,285600 410322,288263 411412,288503 C 411737,288574 412096,288805 412209,289016 C 412498,289556 412835,289495 413513,288781 C 413836,288441 414522,287947 415039,287684 C 415621,287387 416214,286862 416598,286302 C 416940,285806 417314,285400 417431,285400 C 417547,285400 417917,285169 418253,284886 C 418677,284529 419004,284408 419324,284488 C 419656,284572 419844,284492 419999,284202 C 420140,283939 420418,283800 420802,283800 C 421209,283800 421492,283646 421718,283300 C 421957,282936 422223,282800 422699,282800 C 423057,282800 423463,282665 423600,282500 C 423737,282335 424013,282200 424213,282200 C 425163,282200 425703,281323 425651,279866 C 425577,277817 427296,275392 428815,275402 C 428972,275403 429354,275110 429664,274752 C 429976,274392 430270,274199 430321,274322 C 430806,275476 431987,275332 432201,274093 C 432341,273287 433200,273279 433200,274084 C 433200,275664 434076,277961 434742,278128 C 435000,278193 435301,278416 435412,278623 C 435537,278857 435830,279000 436183,279000 C 436495,279000 436863,279135 437000,279300 C 437317,279682 437683,279682 438000,279300 C 438170,279096 438624,279000 439424,279000 C 440680,279000 440859,278810 440359,278008 C 440161,277692 440182,277552 440471,277232 C 440680,277001 440874,276367 440944,275684 C 441027,274884 441240,274265 441632,273684 C 441944,273221 442200,272740 442200,272614 C 442200,272061 444461,270258 445388,270072 C 445713,270007 446133,269784 446321,269577 C 446809,269037 447854,269098 448796,269721 C 449601,270254 452195,270293 452514,269778 C 453167,268721 455686,268531 456676,269464 C 457614,270349 459606,270417 460474,269593 C 461245,268861 461262,266225 460500,265563 C 460163,265270 460000,264921 460000,264495 C 460000,264146 459820,263654 459600,263400 C 459372,263137 459200,262652 459200,262269 C 459200,261901 459105,261600 458990,261600 C 458874,261600 458643,261308 458476,260950 C 457807,259519 457573,259252 456556,258769 C 455603,258315 454041,258163 452563,258380 C 452488,258391 452370,258580 452300,258800 C 452130,259334 451419,259316 450465,258753 C 449193,258002 444526,257951 443662,258678 C 443081,259167 442912,259200 440969,259200 C 439165,259200 438866,259248 438664,259572 C 438512,259815 438087,259990 437437,260076 C 436890,260149 436332,260341 436197,260504 C 436062,260667 435711,260800 435418,260800 C 434826,260800 433743,261301 432898,261965 C 432210,262507 431514,262519 430855,262000 C 430488,261712 430043,261600 429260,261600 C 428038,261600 427400,261345 427400,260856 C 427400,260674 427202,260315 426960,260058 C 426559,259631 426541,259514 426752,258745 C 427225,257018 425412,256272 423852,257550 C 422964,258278 422889,258300 421318,258305 C 419460,258311 418383,258794 416861,260305 C 416394,260768 415597,261290 415061,261482 C 414533,261671 413860,261956 413566,262115 C 413206,262310 412547,262387 411534,262352 C 410043,262300 410032,262304 409285,263050 C 408775,263559 408353,263800 407974,263800 C 406866,263800 406368,264712 407100,265400 C 407375,265658 407600,265959 407600,266069 C 407600,266179 407749,266433 407931,266634 C 408239,266975 408239,267025 407931,267366 C 407749,267567 407599,267949 407599,268216 C 407597,269223 407177,270139 406286,271083 L 405365,272058 L 404874,271529 C 404604,271238 404244,271000 404073,271000 C 403903,271000 403528,270815 403241,270589 C 402664,270135 401240,270207 400951,270704 C 400658,271210 398430,271298 397926,270824 C 397207,270149 396283,270063 395551,270605 C 394642,271277 392175,271429 391541,270852 C 391180,270522 390728,270431 389036,270343 C 387546,270266 386874,270148 386620,269918 C 386427,269743 386040,269600 385761,269600 C 385482,269600 385039,269433 384777,269229 C 384515,269025 383971,268797 383569,268724 C 383167,268650 382788,268457 382726,268295 C 382663,268133 382490,268000 382341,268000 C 382192,268000 381852,267764 381585,267475 L 381100,266950 L 378256,267069 C 375823,267171 375388,267143 375241,266880 C 375056,266549 373695,267165 373340,267741 C 373085,268155 372275,268044 371949,267550 C 371785,267303 371413,266862 371120,266571 C 370828,266281 370343,265678 370044,265232 C 369547,264493 367551,263210 366885,263203 C 366767,263201 366458,262975 366200,262700 C 365942,262425 365617,262200 365479,262200 C 365116,262200 364000,260465 364000,259900 C 364000,259636 363843,259331 363650,259223 C 363356,259058 363300,258729 363300,257151 C 363300,254988 362683,253600 361722,253600 C 361462,253600 361139,253467 361004,253305 C 360870,253143 360451,252953 360074,252882 C 359698,252811 359298,252584 359188,252377 C 359039,252100 358763,252000 358143,251999 C 357110,251998 356116,251178 355431,249763 C 355175,249235 354514,248433 353905,247913 C 353233,247339 352783,246777 352703,246411 C 352632,246090 352445,245720 352287,245589 C 352129,245458 352000,245101 352000,244797 C 352000,244382 351696,243945 350801,243071 C 349824,242116 349602,241780 349601,241250 C 349601,240893 349522,240600 349427,240600 C 349332,240600 348785,239836 348212,238901 L 347171,237203 L 347599,236601 C 347835,236271 348089,235999 348164,235999 C 348614,235994 349173,234656 349062,233846 C 348980,233237 349033,232892 349247,232646 C 349559,232287 349847,231322 349797,230800 C 349782,230635 349742,229777 349708,228894 C 349663,227688 349542,227115 349225,226594 C 348992,226212 348801,225755 348801,225579 C 348800,225402 348485,224845 348100,224341 C 347307,223303 347217,222645 347800,222146 C 348020,221958 348200,221678 348200,221523 C 348200,221369 348347,221186 348527,221117 C 348787,221018 348829,220816 348735,220126 C 348546,218753 348876,217937 349928,217170 C 350975,216408 351172,216219 353100,214133 C 355378,211668 356000,210879 356000,210458 C 356000,210036 358132,207200 358449,207200 C 358552,207200 359019,206805 359488,206323 C 359957,205841 360556,205379 360820,205297 C 361084,205215 361795,204758 362400,204282 C 364524,202609 365406,202000 365703,202000 C 365868,202000 366198,201775 366437,201500 C 366676,201225 367076,201000 367324,201000 C 367573,201000 367832,200910 367900,200800 C 368140,200412 369370,200571 369611,201021 C 369788,201351 369962,201418 370409,201328 C 370856,201239 371064,201318 371358,201692 C 371713,202143 371861,202171 374017,202193 C 375273,202205 376660,202223 377100,202231 C 378207,202253 379052,202005 379361,201569 C 379727,201052 380446,201110 381000,201700 C 381323,202044 381683,202200 382153,202200 C 382534,202200 383062,202377 383345,202600 C 383625,202820 383963,203000 384096,203000 C 384229,203000 384501,203180 384700,203400 C 384922,203646 385316,203800 385720,203800 C 386158,203800 386474,203938 386667,204214 C 386929,204588 387139,204624 388829,204590 C 389858,204569 391306,204654 392047,204779 C 393484,205022 394091,204860 394307,204177 C 394364,203999 394588,203692 394805,203495 C 395022,203299 395204,202994 395208,202819 C 395256,200878 398525,199955 401167,201137 C 403006,201959 405315,199759 405070,197417 C 404985,196598 405022,196115 405185,195918 C 405377,195687 405357,195520 405089,195111 C 404839,194730 404775,194310 404841,193504 C 404921,192549 404874,192362 404466,192008 C 404179,191759 404000,191381 404000,191026 C 404000,190709 403865,190337 403700,190200 C 402988,189609 405192,185819 407350,183923 C 407598,183706 407800,183420 407800,183288 C 407800,183157 407937,182935 408104,182796 C 408906,182131 410345,179624 410448,178714 C 410512,178149 410722,177596 410977,177325 C 411210,177077 411400,176687 411400,176459 C 411400,176230 411535,175991 411700,175928 C 411885,175857 412000,175553 412000,175136 C 412000,174764 412100,174173 412222,173822 C 412384,173359 412385,172953 412227,172342 C 412038,171610 412061,171430 412400,170964 C 412615,170670 412849,170066 412919,169624 C 412990,169181 413217,168665 413424,168478 C 414308,167678 413960,166248 412500,164692 C 411785,163930 411200,163184 411200,163035 C 411200,162885 411020,162534 410800,162255 C 410563,161954 410400,161443 410400,161004 C 410400,160541 410263,160138 410037,159934 C 409741,159666 409667,159251 409634,157665 C 409605,156276 409509,155631 409297,155396 C 408664,154698 409509,152173 411028,150223 C 411233,149961 411400,149530 411400,149267 C 411400,149003 411527,148739 411682,148679 C 412001,148557 413600,146302 413600,145975 C 413600,145859 413780,145534 414000,145255 C 414220,144975 414400,144536 414400,144280 C 414400,144019 414576,143720 414800,143600 C 415162,143406 415200,143181 415200,141205 C 415200,139961 415286,138970 415401,138900 C 415511,138831 415546,138555 415478,138285 C 415411,138015 415444,137683 415552,137547 C 415659,137411 415794,136867 415851,136338 C 415914,135744 416116,135203 416377,134925 C 416648,134636 416800,134212 416800,133744 C 416800,133130 417055,132696 418400,131024 C 419463,129703 420000,128864 420000,128525 C 420000,128220 420160,127928 420398,127801 C 420616,127684 420850,127370 420917,127102 C 420984,126835 421165,126512 421320,126384 C 421474,126256 421600,125870 421600,125526 C 421600,125050 421768,124766 422302,124340 C 423555,123340 423649,123059 423169,121756 C 422661,120376 422777,119741 423597,119401 C 423929,119264 424204,119050 424208,118926 C 424220,118607 425215,117500 425734,117230 C 426352,116907 427974,117163 428265,117629 C 428453,117930 428748,118000 429840,118000 C 430959,118000 431252,118072 431586,118431 C 432018,118895 435301,118881 436179,118411 C 436438,118273 436784,118297 437325,118491 C 438969,119083 440202,119400 440858,119400 C 441770,119400 442717,119748 443694,120442 C 444137,120757 444860,121247 445300,121530 C 445740,121814 446306,122238 446557,122473 C 446809,122708 447579,123395 448269,124000 C 449036,124672 449748,125528 450101,126200 C 450644,127234 451073,127857 452007,128967 C 452223,129224 452400,129550 452400,129693 C 452400,129835 452661,130059 452979,130191 C 453834,130546 454786,133211 454647,134861 C 454562,135862 454607,136077 454974,136419 C 455208,136637 455400,136902 455400,137008 C 455400,137114 455602,137200 455848,137200 C 456522,137200 459040,138511 459710,139211 C 460560,140097 460684,144756 459879,145502 C 459616,145746 459400,146081 459400,146246 C 459400,146411 459210,146788 458978,147083 C 458588,147579 458580,147647 458878,147975 C 459055,148171 459200,148437 459200,148567 C 459200,148826 463731,153400 463987,153400 C 464074,153400 464386,153589 464680,153820 C 465049,154111 465367,154201 465712,154115 C 466087,154021 466325,154114 466678,154495 C 466935,154773 467289,155000 467463,155000 C 467899,155000 469551,156140 469911,156689 C 470073,156936 470422,157237 470685,157357 C 470949,157477 471227,157770 471303,158008 C 471378,158246 471656,158760 471920,159149 C 472505,160010 472532,160531 472000,160700 C 471538,160847 471301,161573 471505,162217 C 471612,162553 471531,162750 471179,163016 C 470720,163362 470718,163378 471082,163781 C 471985,164777 471427,169600 470409,169600 C 470312,169600 470075,170027 469883,170550 C 469690,171073 469402,171654 469242,171842 C 469043,172077 468994,172403 469084,172886 C 469172,173354 469113,173787 468909,174183 C 468715,174557 468675,174823 468801,174900 C 469160,175122 469016,176395 468562,177008 C 468088,177650 467959,181020 468404,181168 C 468878,181326 469224,181878 469116,182307 C 469032,182641 469135,182842 469517,183093 C 469963,183385 470014,183526 469907,184165 C 469794,184838 471614,187000 472295,187000 C 472859,187000 474023,188196 473887,188635 C 473792,188938 474289,189486 477000,192065 C 477165,192222 477872,192946 478570,193675 C 479539,194685 479972,195000 480396,195000 C 480701,195000 481063,195135 481200,195300 C 481337,195465 481660,195600 481917,195600 C 482182,195600 482480,195775 482601,196002 C 482719,196223 483657,197235 484685,198252 C 485713,199268 486691,200370 486860,200700 C 487028,201030 487429,201593 487752,201952 C 488075,202310 488479,202895 488650,203252 C 490364,206818 490884,207821 491122,208018 C 491275,208145 491400,208428 491400,208646 C 491400,208864 491625,209219 491900,209436 C 492175,209652 492400,209921 492400,210033 C 492400,210145 492580,210466 492800,210745 C 493045,211057 493200,211557 493200,212034 C 493200,212463 493347,213039 493527,213313 C 493712,213596 493897,214405 493952,215175 L 494049,216537 L 493315,216991 C 492659,217396 492544,217413 492240,217147 C 492053,216983 491540,216737 491100,216601 C 490660,216464 489998,216225 489630,216070 C 489143,215864 488560,215823 487501,215919 C 486089,216047 486027,216034 485571,215509 C 485141,215014 485014,214978 484100,215091 C 483346,215184 482805,215109 481900,214786 C 479612,213970 479371,214001 477877,215312 C 476390,216618 476217,216903 476651,217337 C 476981,217667 476054,219400 475548,219400 C 475293,219400 472400,222350 472400,222609 C 472400,222703 471932,223014 471360,223301 C 470789,223588 470136,224002 469910,224220 C 469685,224438 469239,224823 468919,225074 C 468406,225479 468332,225675 468287,226750 C 468217,228426 466519,231177 465536,231207 C 464768,231231 464144,232992 464249,234839 C 464340,236435 464309,236682 463976,236967 C 463769,237144 463600,237457 463600,237663 C 463600,238121 463053,238851 461550,240397 C 460686,241286 460400,241725 460400,242160 C 460400,242811 459639,244361 459012,244988 C 458785,245215 458600,245577 458600,245793 C 458600,246009 458420,246282 458200,246400 C 457980,246518 457800,246771 457800,246963 C 457800,247154 457673,247492 457518,247714 C 456443,249249 456877,251800 458214,251800 C 458813,251800 460800,249683 460800,249043 C 460800,248685 461760,247189 462149,246940 C 462287,246852 462400,246529 462400,246221 C 462400,245914 462580,245499 462800,245300 C 463020,245101 463200,244769 463200,244562 C 463200,244106 464462,242800 464904,242800 C 465078,242800 465343,242506 465494,242146 C 465644,241786 465954,241322 466183,241115 C 466413,240908 466600,240499 466600,240207 C 466600,239915 466732,239502 466894,239288 C 467062,239066 467190,238456 467194,237862 C 467197,237291 467299,236762 467420,236687 C 467542,236612 467767,236249 467921,235880 C 468085,235488 468471,235073 468851,234881 C 470359,234118 471419,232980 472138,231350 C 472271,231048 472471,230800 472582,230800 C 472693,230800 473030,230373 473332,229850 C 473633,229328 473997,228828 474140,228740 C 474283,228652 474400,228239 474400,227821 C 474400,227316 474534,226941 474800,226700 C 475066,226459 475200,226084 475200,225581 C 475200,225164 475290,224768 475400,224700 C 475510,224632 475600,224309 475600,223982 C 475600,223655 475735,223064 475900,222669 C 476065,222274 476200,221793 476200,221600 C 476200,221407 476335,221137 476500,221000 C 476673,220857 476800,220421 476800,219973 C 476800,217907 480885,217917 481992,219985 C 482158,220296 482430,220353 483702,220345 C 484909,220337 485323,220415 485757,220735 C 486056,220954 486745,221195 487289,221269 C 487846,221344 488462,221577 488702,221801 C 488935,222021 489401,222200 489738,222200 C 490075,222200 490455,222325 490582,222478 C 490708,222631 491214,222857 491706,222981 C 492198,223104 492600,223294 492600,223403 C 492600,223511 492886,223600 493235,223600 C 493960,223600 495924,224845 496107,225421 C 496307,226051 497827,227026 498410,226898 C 498750,226823 499092,226914 499413,227164 C 499681,227373 500320,227606 500834,227682 C 501347,227758 501881,227956 502019,228123 C 502158,228290 502525,228558 502835,228718 C 503146,228879 503400,229133 503400,229283 C 503400,229434 503648,229618 503950,229693 C 504252,229768 504841,230183 505258,230615 C 505675,231048 506319,231528 506689,231682 C 507059,231837 507419,232143 507488,232363 C 507558,232583 507747,232814 507908,232875 C 508068,232937 508200,233222 508200,233508 C 508200,234090 509287,235799 509660,235802 C 510094,235807 512200,238020 512200,238473 C 512200,239858 510042,242550 509118,242317 C 508908,242264 508514,242396 508241,242610 C 507969,242825 507500,243000 507199,243000 C 506533,243000 505074,244483 504898,245338 C 504452,247510 503963,247441 501086,244799 C 500348,244122 499126,243748 497500,243701 C 496840,243682 496014,243597 495665,243511 C 495069,243365 495019,243396 494837,244028 C 494731,244398 494585,244841 494514,245014 C 494425,245231 494549,245404 494913,245569 C 495468,245822 495481,246697 494934,247045 C 494586,247266 492843,247231 492700,247000 C 492343,246423 491782,246801 491918,247527 C 492049,248223 491997,248311 490677,249631 C 488724,251585 488200,252188 488200,252486 C 488200,252629 488011,252987 487779,253281 C 487304,253885 487378,255005 487924,255451 C 488091,255588 488402,255857 488614,256050 C 489391,256755 490215,256411 491944,254660 C 492619,253976 492947,253494 492871,253296 C 492801,253114 492955,252803 493248,252531 C 493520,252279 493778,251982 493821,251871 C 493865,251760 494547,251249 495337,250736 C 496128,250223 496827,249719 496890,249617 C 496953,249514 497266,249373 497586,249303 C 497905,249233 498213,249055 498269,248908 C 498326,248760 498761,248575 499236,248496 C 499711,248417 500326,248237 500602,248096 C 501013,247886 501197,247887 501608,248103 C 501885,248248 502694,248469 503406,248594 C 505246,248917 505400,248980 505400,249420 C 505400,249906 505976,250159 506219,249779 C 506342,249587 506274,249415 505999,249226 C 505442,248842 505492,248080 506100,247682 C 506375,247501 506601,247252 506601,247127 C 506604,246684 507968,245925 508286,246189 C 508483,246352 508690,246366 508937,246234 C 509380,245998 512559,245597 512913,245733 C 513053,245786 513398,245679 513680,245495 C 514069,245240 514422,245191 515146,245291 C 515671,245363 516595,245413 517200,245402 C 518681,245374 519959,245752 520338,246330 C 520735,246936 521000,246929 521000,246312 C 521000,245780 521297,245472 521498,245797 C 521686,246101 522350,246042 522914,245672 C 523368,245375 523485,245373 524193,245651 C 524823,245898 525042,245909 525336,245708 C 525536,245572 525945,245400 526244,245328 C 526602,245241 527011,244850 527444,244183 C 527924,243442 528434,242983 529348,242469 C 530035,242083 530757,241564 530952,241316 C 531148,241067 531531,240746 531804,240602 C 532444,240264 532593,240026 532597,239337 C 532600,238695 532859,238141 533415,237585 C 533627,237373 533800,237117 533800,237015 C 533800,236807 535894,235800 536324,235800 C 536476,235800 536960,236160 537400,236600 C 538341,237541 538842,237601 539503,236850 C 540083,236191 540102,236044 539664,235560 C 539367,235232 539357,235072 539581,234200 C 539720,233656 539775,232941 539702,232611 C 539612,232199 539734,231550 540091,230545 C 540377,229739 540688,228385 540784,227536 C 540879,226688 541076,225849 541222,225673 C 541535,225296 541993,224046 541997,223557 C 541999,223368 542179,223118 542398,223001 C 542962,222699 543400,221753 543400,220835 C 543400,220055 543928,218652 544500,217912 C 544665,217698 544800,217371 544800,217185 C 544800,216998 545025,216699 545300,216518 C 545575,216338 545800,216027 545800,215826 C 545800,215626 545976,215303 546191,215109 C 546477,214849 546550,214600 546464,214172 C 546388,213791 546454,213470 546655,213245 C 546824,213055 547061,212530 547182,212078 C 547750,209943 550202,208558 551070,209883 C 551244,210148 551740,210521 552172,210712 C 552870,211020 553800,212264 553800,212890 C 553800,212970 553994,213193 554231,213385 C 554591,213676 554678,214003 554756,215359 C 554829,216612 554936,217061 555225,217323 C 555431,217509 555600,217881 555600,218149 C 555600,218418 555780,218866 556000,219145 C 556540,219832 556503,220447 555877,221190 C 555390,221770 555364,221900 555494,223114 L 555633,224415 L 556718,225027 C 557314,225364 557869,225748 557951,225882 C 558206,226297 559069,226800 559525,226800 C 559811,226800 560103,227041 560375,227503 C 560603,227890 561032,228298 561328,228410 C 561623,228523 562863,229638 564082,230889 C 565864,232716 566463,233207 567127,233383 C 567581,233504 568065,233737 568201,233901 C 568337,234066 568522,234200 568612,234200 C 569123,234200 570046,235389 569922,235885 C 569638,237016 571123,238122 572082,237493 C 572520,237207 572630,237208 573331,237505 C 573754,237684 574505,237905 575000,237995 C 576306,238233 578400,239045 579223,239633 C 579806,240050 580200,239693 580200,238746 C 580200,238270 580300,237780 580423,237657 C 580546,237534 580748,237259 580873,237045 C 581642,235729 582234,235035 582684,234922 C 582998,234843 583240,234608 583315,234312 C 583382,234046 583608,233674 583818,233484 C 584028,233294 584200,232936 584200,232689 C 584200,232442 584568,231759 585017,231170 L 585835,230100 L 585725,228300 C 585617,226521 585623,226492 586215,225800 L 586813,225100 L 587557,225525 C 587966,225759 588674,226013 589132,226090 C 589590,226167 590121,226403 590313,226615 C 591397,227812 593082,226167 592854,224137 C 592772,223409 592836,223117 593175,222686 C 593476,222304 593600,221862 593600,221175 C 593600,220420 593689,220148 594000,219954 C 594618,219568 594618,211859 594000,211300 C 593344,210706 593527,210243 595016,208735 C 595795,207946 596574,207030 596746,206700 C 596918,206370 597361,205731 597730,205279 C 598284,204601 598401,204289 598406,203479 C 598410,202941 598541,202330 598698,202123 C 598855,201916 599043,201331 599116,200823 C 599189,200315 599370,199761 599519,199591 C 599919,199132 600714,197579 600870,196950 C 600980,196512 601123,196400 601573,196400 C 601892,196400 602303,196218 602516,195983 C 603152,195279 604552,194427 605303,194286 C 606574,194048 607350,195440 606418,196284 C 606208,196474 605976,196870 605902,197165 C 605829,197459 605635,197848 605472,198030 C 605223,198306 605211,198559 605401,199607 C 605796,201785 602589,206400 600681,206400 C 599508,206400 598424,207730 598701,208831 C 598821,209309 598648,209599 597452,210919 C 597206,211191 596949,211632 596882,211899 C 596816,212165 596635,212488 596480,212616 C 596116,212918 596124,213288 596502,213601 C 596668,213739 596858,214193 596925,214610 C 596994,215046 597249,215544 597523,215783 C 598003,216200 598061,216516 598090,218900 C 598105,220101 599015,220150 600207,219016 C 600674,218572 601215,218159 601410,218097 C 601604,218035 601873,217853 602006,217692 C 602140,217532 602401,217400 602586,217400 C 602933,217400 604994,215218 605234,214598 C 605309,214405 605678,214192 606064,214120 C 606447,214048 606870,213857 607004,213695 C 607139,213533 607371,213400 607519,213400 C 607977,213400 608449,212272 608174,211833 C 607608,210927 608706,209736 609661,210221 C 610222,210505 611956,212347 612105,212816 C 612167,213012 612477,213229 612793,213298 C 613109,213368 613568,213599 613814,213812 C 614060,214026 614467,214200 614719,214200 C 614970,214200 615231,214288 615297,214395 C 615363,214502 615766,214683 616193,214798 C 616840,214972 616994,215116 617112,215654 C 617190,216009 617407,216407 617595,216539 C 618099,216892 617922,221790 617373,222691 C 617169,223026 617001,223550 617001,223856 C 617000,224439 614344,227264 613564,227512 C 613364,227575 613148,227839 613082,228099 C 613017,228358 612792,228726 612582,228916 C 612372,229106 612200,229472 612200,229728 C 612200,230050 611953,230358 611400,230724 C 609773,231800 610259,233502 612922,236050 L 614332,237400 L 615975,237400 C 618248,237400 618924,236789 618380,235229 C 618241,234829 617984,234553 617679,234477 C 616521,234186 615644,231984 616411,231290 C 617227,230552 620200,230699 620200,231478 C 620200,231623 620426,231985 620701,232283 C 621204,232825 621322,234984 620906,236026 C 620675,236604 621672,237464 622442,237351 C 622801,237299 623253,237355 623447,237476 C 623709,237639 623903,237632 624199,237447 C 624536,237237 624660,237260 624999,237599 C 625220,237820 625603,238000 625850,238001 C 626455,238002 629094,239042 629559,239463 C 629806,239687 630276,239800 630954,239800 C 631741,239800 632040,239890 632249,240189 C 632399,240402 632967,240807 633511,241087 C 634055,241367 634811,241913 635190,242298 C 635570,242684 636047,243000 636250,243000 C 636453,243000 636772,243270 636959,243601 C 637147,243931 637477,244258 637693,244328 C 638826,244693 640418,246640 640289,247503 L 640165,248331 L 641879,249916 C 642822,250787 643595,251606 643597,251736 C 643599,251866 643863,252160 644185,252389 C 644506,252618 644826,253065 644896,253382 C 644966,253699 645198,254117 645411,254310 C 645977,254822 645896,255143 645000,255947 C 644068,256784 643885,257817 644600,258200 C 645348,258601 644961,259569 643423,261142 C 642952,261624 642600,262177 642600,262435 C 642600,262682 642375,263113 642099,263392 C 639256,266275 639180,266391 639769,266950 C 641766,268846 642289,269281 642593,269303 C 642882,269324 643697,269889 645070,271020 C 645435,271321 644983,272000 644418,272000 C 644112,272000 643699,272180 643500,272400 C 642940,273019 641317,272965 640891,272314 C 640058,271043 638000,271335 638000,272724 C 638000,273222 637799,273400 636900,273700 C 636101,273966 636031,274863 636800,274968 C 637075,275006 637458,275178 637651,275350 C 638045,275702 638609,276040 639500,276457 C 639830,276612 640225,276889 640378,277074 C 640542,277271 640806,277361 641020,277294 C 641257,277218 641473,277323 641642,277595 C 642113,278354 643603,278940 643929,278494 C 644333,277941 644259,277471 643684,276938 C 642296,275650 643928,274645 645875,275588 C 646343,275815 647008,276000 647351,276000 C 647695,276000 648032,276090 648100,276200 C 648305,276531 650139,276447 650272,276100 C 650336,275935 650583,275800 650822,275800 C 651229,275800 651249,275732 651140,274680 C 650985,273174 651218,272600 651985,272600 C 652333,272600 652658,272461 652767,272266 C 652870,272082 653256,271789 653624,271615 C 654429,271235 654594,270673 654018,270270 C 653470,269886 653491,269561 654111,268823 C 654649,268184 654599,267780 653911,267209 C 653559,266917 653497,265765 653803,265194 C 654205,264444 655481,264313 656510,264916 C 657218,265331 657581,265423 658159,265334 C 659028,265200 659203,265315 660353,266776 C 661299,267978 661316,268034 660914,268657 C 660757,268901 660525,269682 660398,270392 C 660248,271231 660015,271832 659734,272105 C 658797,273013 657991,274065 657873,274535 C 657805,274806 657581,275133 657375,275262 C 656449,275841 657981,277400 659476,277400 C 659661,277400 659863,277532 659925,277692 C 659986,277853 660217,278042 660437,278112 C 660657,278181 660965,278522 661121,278869 C 661278,279216 661495,279658 661603,279850 C 661711,280043 661876,280358 661970,280550 C 662063,280743 662341,281003 662589,281128 C 662836,281253 663367,281665 663769,282042 C 664171,282420 664760,282902 665078,283114 C 665396,283326 665782,283590 665936,283700 C 666143,283847 666309,283779 666565,283442 C 667119,282715 669968,282627 670617,283318 C 670876,283594 671298,283800 671604,283800 C 671991,283800 672444,284116 673254,284950 C 676253,288041 677186,288918 678059,289469 C 678366,289662 678698,290032 678796,290290 C 678894,290548 679142,290881 679347,291030 C 679551,291178 679930,291660 680189,292100 C 680722,293006 681814,294113 682345,294284 C 683240,294574 683600,295597 683600,297849 C 683600,300436 683739,300841 685043,302050 C 686456,303360 687600,303324 687600,301969 C 687600,301667 687704,301190 687832,300909 C 688003,300535 688006,300272 687845,299919 C 687686,299569 687687,299240 687848,298713 C 688049,298059 688028,297957 687635,297682 C 687086,297297 687010,295541 687519,294979 C 687813,294654 687803,294532 687401,293463 C 686535,291166 686865,290293 688406,290802 C 689931,291305 690344,292191 689632,293429 C 689152,294262 689078,294998 689436,295356 C 689566,295486 689723,295976 689786,296446 C 689897,297277 689923,297303 690754,297414 C 692148,297600 692335,298865 691145,300055 C 690948,300252 690468,300911 690080,301518 C 689691,302126 689244,302672 689087,302733 C 688661,302896 688738,303369 689300,304036 C 690611,305595 688938,306811 687424,305400 C 686312,304363 686159,304386 685413,305707 C 685070,306316 684589,306891 684344,306984 C 684100,307078 683729,307344 683519,307577 C 683109,308032 681926,308166 681690,307783 C 681616,307664 681183,307395 680728,307186 C 680273,306976 679747,306694 679559,306559 C 679276,306355 679137,306389 678746,306757 C 678487,307001 678036,307200 677744,307200 C 677426,307200 677132,307354 677009,307584 C 676896,307795 676553,308022 676248,308090 C 675942,308157 675424,308434 675096,308705 L 674500,309198 L 674975,309602 C 675237,309824 675687,310063 675975,310134 C 676264,310205 676869,310564 677321,310932 C 677772,311299 678328,311600 678556,311600 C 678784,311600 679148,311825 679364,312100 C 679581,312375 679830,312600 679918,312600 C 680006,312600 680309,312821 680591,313091 C 681086,313566 682404,314376 683369,314799 C 683627,314912 684212,315301 684669,315663 C 685126,316026 685750,316429 686056,316559 C 686361,316690 686663,316932 686727,317098 C 686794,317274 687092,317400 687440,317400 C 687768,317400 688269,317583 688553,317806 C 688881,318064 689330,318200 689785,318180 C 690178,318163 690725,318239 691000,318349 C 692066,318778 694390,318871 694799,318501 C 695318,318031 701416,317982 701959,318444 C 702784,319145 704065,319603 704390,319313 C 704561,319160 705150,318970 705700,318891 C 706250,318811 706939,318578 707231,318373 C 707523,318168 707819,318000 707889,318000 C 707959,318000 708215,317813 708458,317585 C 708923,317147 710179,317168 710727,317622 C 710862,317735 711289,317866 711675,317914 C 712844,318059 713387,318359 713721,319045 C 714079,319780 715726,321200 716220,321200 C 716398,321200 716974,321530 717502,321933 C 719487,323448 720051,323640 722667,323689 L 725034,323733 L 725967,322669 C 727032,321455 727207,321414 728419,322097 C 728903,322371 729435,322653 729600,322723 C 731035,323337 732075,323926 732267,324233 C 732619,324796 734400,324763 734400,324194 C 734400,323970 734268,323737 734108,323675 C 733947,323614 733759,323386 733691,323170 C 733509,322599 732034,321600 731372,321600 C 731020,321600 730708,321448 730554,321200 C 730409,320969 730087,320800 729791,320800 C 729483,320800 728971,320519 728510,320097 C 728088,319710 727508,319336 727221,319266 C 726934,319196 726485,318973 726223,318770 C 725961,318566 725625,318400 725478,318400 C 725330,318400 725062,318175 724882,317900 C 724701,317625 724402,317400 724217,317400 C 724032,317400 723794,317315 723690,317210 C 723337,316858 721581,316000 721213,316000 C 721013,316000 720327,315595 719689,315100 C 719052,314605 718451,314200 718355,314200 C 718258,314200 718048,313885 717887,313500 C 717726,313115 717508,312800 717402,312800 C 717148,312800 716600,311725 716600,311226 C 716600,311010 716446,310564 716258,310237 C 715958,309715 715952,309599 716206,309293 C 716365,309101 716468,308740 716436,308491 C 716403,308242 716472,307979 716588,307907 C 716705,307835 716800,307270 716800,306651 C 716800,305826 716901,305415 717178,305113 C 717386,304886 717656,304224 717778,303643 C 718325,301027 719985,300551 721717,302513 C 723879,304961 724107,305199 724284,305200 C 724385,305200 724989,305737 725625,306394 C 726820,307626 727833,308200 728813,308200 C 729462,308200 729552,308310 730117,309800 C 730452,310684 730676,310968 731259,311248 C 732484,311836 732908,315248 731843,315954 C 731002,316513 731170,316833 733399,318918 C 734292,319753 734414,319808 735032,319646 C 735477,319530 735987,319558 736561,319730 C 737145,319904 738017,319949 739261,319869 C 740964,319759 741128,319781 741481,320175 C 741691,320409 741953,320600 742065,320600 C 742177,320600 742427,320744 742622,320920 C 743084,321338 743400,321122 743400,320388 C 743400,319556 744037,319595 744414,320450 C 744687,321070 745600,321508 745600,321018 C 745600,320205 747514,319874 748619,320497 C 749873,321204 750364,321400 750874,321400 C 751576,321400 753856,322213 754313,322627 C 754542,322834 755032,323003 755413,323007 C 755791,323011 756325,323143 756600,323300 C 756875,323457 757348,323589 757650,323593 C 757953,323597 758383,323783 758606,324006 C 758830,324230 759282,324466 759610,324532 C 759939,324598 760257,324730 760316,324826 C 760375,324922 760586,325000 760785,325000 C 760984,325000 761381,325185 761667,325410 C 762090,325743 762267,325778 762606,325597 C 762836,325474 763280,325430 763593,325498 C 763915,325569 764219,325532 764293,325412 C 764365,325295 764758,325200 765167,325200 C 767059,325200 767441,326802 765877,328178 C 764408,329472 764826,330191 767050,330197 L 768000,330200 L 768000,357100 L 768000,384000 L 384000,384000 L 0,384000 L 0,357500 z M 320860,371872 C 320948,371722 321158,371600 321327,371600 C 321899,371600 321473,371100 320848,371038 C 320380,370992 320170,371082 319998,371404 C 319858,371665 319652,371786 319467,371715 C 319301,371651 318927,371786 318636,372015 L 318108,372430 L 319404,372287 C 320150,372204 320768,372028 320860,371872 z M 327114,371984 C 327389,371681 327641,371598 328045,371679 C 328759,371822 328762,371499 328050,371158 C 327723,371002 327500,370733 327500,370497 C 327500,370032 327249,369807 326724,369803 C 326399,369800 326366,369905 326475,370588 C 326547,371041 326516,371428 326400,371500 C 326103,371684 326158,372400 326469,372400 C 326617,372400 326907,372213 327114,371984 z M 324877,371687 C 325186,370883 324033,369723 323040,369838 C 322171,369938 322248,371075 323129,371161 C 323475,371195 323916,371397 324110,371611 C 324536,372082 324719,372100 324877,371687 z M 307911,371583 C 307985,371463 307955,371275 307844,371164 C 307596,370916 306731,371327 306906,371610 C 307066,371869 307745,371850 307911,371583 z M 309600,371512 C 309600,371353 309516,371172 309414,371109 C 309176,370962 308937,371336 309100,371600 C 309284,371898 309600,371842 309600,371512 z M 317410,371288 C 317552,371117 317968,370852 318334,370699 C 319053,370398 319209,369923 318657,369711 C 318412,369617 318097,369820 317562,370417 C 316488,371617 315042,371700 314231,370610 C 313575,369729 313353,369567 313122,369798 C 312935,369985 313294,370666 313901,371272 C 314357,371728 317034,371741 317410,371288 z M 357634,371269 C 358047,370895 358121,370400 357763,370400 C 357488,370400 356600,371190 356600,371435 C 356600,371720 357252,371615 357634,371269 z M 360563,371250 C 360481,370823 359600,370643 359600,371053 C 359600,371435 359795,371600 360248,371600 C 360503,371600 360607,371484 360563,371250 z M 347533,371267 C 347460,371193 347340,371193 347267,371267 C 347193,371340 347253,371400 347400,371400 C 347547,371400 347607,371340 347533,371267 z M 306400,370721 C 306400,370314 305942,370200 304311,370200 C 303147,370200 302749,370118 302335,369792 C 301781,369356 297885,369175 296139,369505 C 295208,369681 295073,370566 296000,370422 C 297529,370185 300925,370324 301500,370647 C 302303,371098 306400,371160 306400,370721 z M 366900,370600 C 366968,370490 366889,370400 366724,370400 C 366559,370400 366368,370490 366300,370600 C 366232,370710 366311,370800 366476,370800 C 366641,370800 366832,370710 366900,370600 z M 371000,369629 C 371000,368976 369997,368392 369403,368698 C 368611,369108 368642,369285 369550,369539 C 370524,369812 371000,369842 371000,369629 z M 327300,367367 C 328842,367463 329267,366879 328150,366198 C 327702,365924 327143,365801 326350,365801 L 325200,365800 L 325200,366722 L 325200,367645 L 325950,367487 C 326363,367401 326970,367347 327300,367367 z M 330611,366671 L 330812,366142 L 331256,366553 C 332141,367373 333420,367088 334491,365833 C 335486,364667 335507,364349 334579,364534 C 334137,364623 333817,364540 333395,364228 C 332674,363695 332197,363687 331545,364200 C 331266,364420 330948,364600 330840,364600 C 330731,364600 330590,364736 330527,364903 C 330463,365070 330183,365292 329905,365398 C 329397,365591 329247,366169 329521,366884 C 329716,367392 330387,367261 330611,366671 z M 335733,363667 C 335660,363593 335600,363653 335600,363800 C 335600,363947 335660,364007 335733,363933 C 335807,363860 335807,363740 335733,363667 z M 234933,357867 C 234860,357793 234740,357793 234667,357867 C 234593,357940 234653,358000 234800,358000 C 234947,358000 235007,357940 234933,357867 z M 608600,356200 C 608600,356090 608460,356000 608288,356000 C 608117,356000 608032,356090 608100,356200 C 608168,356310 608308,356400 608412,356400 C 608515,356400 608600,356310 608600,356200 z M 118735,353050 C 119582,351987 119502,351464 118375,350683 C 117583,350134 117580,350127 117708,349106 C 117828,348141 117806,348067 117318,347845 C 116331,347395 116661,345200 117716,345200 C 117955,345200 118263,345065 118400,344900 C 118537,344735 118916,344600 119242,344600 C 119601,344600 119968,344436 120170,344187 C 120473,343814 120709,343776 122603,343797 C 123756,343809 125082,343820 125548,343819 C 126186,343819 126448,343916 126606,344211 C 126766,344510 127015,344599 127658,344586 C 128121,344577 129005,344631 129621,344707 C 130536,344819 130794,344784 131021,344513 C 131175,344330 131421,344073 131568,343940 C 131716,343808 132185,343363 132610,342950 C 133097,342478 133575,342200 133898,342200 C 134213,342200 134455,342064 134523,341850 C 134684,341335 134953,340783 135405,340037 C 136047,338977 135601,338647 134681,339500 C 134291,339861 133918,340000 133337,340000 C 132873,340000 132379,340138 132172,340326 C 131894,340577 131355,340657 129822,340676 C 128083,340697 127773,340754 127366,341130 C 126736,341711 121942,341738 121521,341163 C 121056,340527 120216,340486 119672,341073 C 119026,341770 117160,341851 116754,341200 C 116245,340386 115131,340655 113856,341900 C 112583,343143 110883,343502 110414,342626 C 110000,341852 109063,341649 105456,341552 C 103562,341501 101897,341369 101756,341259 C 100855,340552 99208,340568 98609,341289 C 98261,341708 98111,341684 97491,341109 C 97091,340738 96821,340646 96391,340732 C 95947,340821 95545,340665 94563,340023 C 93123,339082 92859,339039 92118,339621 C 91678,339968 91424,340019 90693,339909 C 89899,339790 89750,339833 89311,340307 C 88886,340766 88714,340821 88050,340708 C 87430,340604 87170,340666 86710,341028 C 86189,341438 85915,341479 83603,341494 C 81516,341507 80969,341574 80517,341870 C 80027,342191 79400,342234 74725,342265 C 70106,342296 69419,342342 68948,342650 C 68654,342843 68073,343003 67657,343006 C 66839,343013 65800,343731 65800,344290 C 65800,344720 66766,344693 67255,344250 C 67959,343613 73889,343559 74737,344182 C 75263,344569 75591,344598 79700,344624 C 83674,344650 84146,344689 84579,345028 C 84959,345326 85337,345393 86407,345352 C 87463,345311 87841,345376 88144,345650 C 88682,346136 93407,346174 93804,345695 C 94030,345423 94100,345429 94450,345745 C 94795,346058 95329,346104 98960,346137 C 102960,346173 103089,346187 103414,346618 C 103623,346895 103869,347016 104069,346940 C 104955,346600 106000,347563 106000,348719 C 106000,349442 106926,350186 107836,350194 C 108240,350197 108706,350335 108871,350500 C 109051,350680 109541,350800 110095,350800 C 110818,350800 111129,350911 111528,351310 C 111931,351713 112262,351829 113112,351863 C 113703,351887 114298,352018 114433,352153 C 114569,352289 114919,352400 115210,352400 C 115502,352400 116047,352617 116420,352883 C 117240,353465 118340,353545 118735,353050 z M 715745,353000 C 716149,352683 716557,352600 717715,352600 C 718519,352600 719232,352510 719300,352400 C 719701,351751 715899,351538 715321,352177 C 715133,352384 714714,352607 714390,352672 C 714046,352741 713800,352917 713800,353095 C 713800,353554 715123,353489 715745,353000 z M 122850,352103 C 123471,351557 123544,351243 123090,351068 C 122703,350920 121800,351736 121800,352235 C 121800,352732 122191,352683 122850,352103 z M 686703,350876 C 686490,350551 686227,350397 685953,350438 C 685304,350534 685315,350931 685972,351160 C 686297,351273 686635,351576 686724,351833 L 686885,352300 L 686958,351838 C 686998,351585 686883,351152 686703,350876 z M 689600,350200 C 689600,350090 689510,350000 689400,350000 C 689290,350000 689200,350090 689200,350200 C 689200,350310 689290,350400 689400,350400 C 689510,350400 689600,350310 689600,350200 z M 214200,348312 C 214200,347933 213914,347769 213518,347921 C 213011,348115 213141,348600 213700,348600 C 214002,348600 214200,348486 214200,348312 z M 224600,345112 C 224600,344733 224259,344534 223868,344685 C 223615,344782 223602,344862 223802,345102 C 224117,345482 224600,345488 224600,345112 z M 447733,342667 C 447660,342593 447600,342653 447600,342800 C 447600,342947 447660,343007 447733,342933 C 447807,342860 447807,342740 447733,342667 z M 211362,339595 C 212446,339072 212425,338800 211300,338800 C 210433,338800 210400,338822 210400,339400 C 210400,340113 210324,340097 211362,339595 z M 141800,338550 C 142099,338180 142371,338099 143332,338088 C 144111,338080 144686,337954 145059,337709 C 145711,337281 145704,336693 145047,336714 C 144801,336722 143831,336745 142891,336764 C 141304,336797 141146,336839 140677,337350 C 140399,337653 139996,338085 139781,338312 C 139279,338841 139457,339000 140551,339000 C 141227,339000 141522,338894 141800,338550 z M 153234,337869 C 154037,337143 153321,336358 152150,336680 C 151494,336861 150526,337719 150686,337978 C 150906,338333 152812,338252 153234,337869 z M 127991,333911 C 128660,333104 127467,331882 126510,332395 C 126050,332641 125952,332625 125536,332234 C 125282,331995 124887,331800 124659,331800 C 124430,331800 124191,331665 124128,331500 C 123980,331114 123400,331108 123400,331493 C 123400,331654 123580,331882 123800,332000 C 124033,332124 124200,332419 124200,332703 C 124200,333071 124337,333226 124750,333327 C 125053,333401 125614,333628 125997,333831 C 126833,334273 127662,334307 127991,333911 z M 214294,334010 C 214358,333906 214229,333722 214006,333603 C 213548,333358 213476,332809 213850,332421 C 214052,332211 214024,332175 213700,332232 C 213212,332319 213001,333751 213436,334027 C 213788,334250 214150,334243 214294,334010 z M 447237,325397 C 448008,325392 448382,325030 447916,324740 C 447705,324608 447199,324208 446792,323850 C 446385,323493 445865,323200 445638,323200 C 445410,323200 445168,323110 445100,323000 C 445032,322890 444802,322800 444588,322800 C 443836,322800 444121,323667 445100,324357 C 445669,324759 446000,325143 446000,325403 C 446000,325747 446063,325781 446387,325607 C 446600,325493 446982,325399 447237,325397 z M 437152,324023 C 437643,323358 437565,323200 436749,323200 C 436164,323200 435420,323837 435407,324350 C 435393,324879 436700,324634 437152,324023 z M 460684,324479 C 461044,324340 461119,323297 460784,323090 C 460508,322920 459324,324116 459495,324393 C 459638,324623 460200,324664 460684,324479 z M 451388,323423 C 451499,323216 451826,322987 452115,322914 C 453576,322547 454154,321593 453210,321105 C 451855,320405 449800,321017 449800,322122 C 449800,323216 450981,324184 451388,323423 z M 96533,315067 C 96460,314993 96400,315053 96400,315200 C 96400,315347 96460,315407 96533,315333 C 96607,315260 96607,315140 96533,315067 z M 98300,314800 C 98368,314690 98233,314600 98000,314600 C 97767,314600 97632,314690 97700,314800 C 97768,314910 97903,315000 98000,315000 C 98097,315000 98232,314910 98300,314800 z M 175620,305579 C 176260,304894 176297,304755 175992,304185 C 175736,303706 174400,304841 174400,305537 C 174400,306391 174847,306406 175620,305579 z M 121561,295450 C 121527,294928 121410,294500 121300,294500 C 121190,294500 121073,294928 121039,295450 C 120990,296215 121041,296400 121300,296400 C 121559,296400 121610,296215 121561,295450 z M 200174,294859 C 202784,293415 203313,292726 202426,291924 C 201795,291353 198525,291400 197539,291994 C 196638,292537 194269,292505 193645,291941 C 192947,291311 190800,291944 190800,292780 C 190800,293313 191181,293558 192414,293817 C 193011,293942 193648,294175 193829,294335 C 194010,294494 194757,294833 195490,295089 C 196222,295345 196878,295611 196947,295680 C 197240,295973 198944,295540 200174,294859 z M 465763,290814 C 465825,289949 464865,288600 464189,288600 C 464085,288600 464000,288250 464000,287821 C 464000,287031 464223,286800 464985,286800 C 465179,286800 465501,286620 465700,286400 C 465899,286180 466253,286000 466486,286000 C 466965,286000 467769,285501 468161,284960 C 468305,284762 468627,284600 468876,284600 C 469126,284600 469542,284375 469800,284100 C 470058,283825 470437,283600 470641,283600 C 471267,283600 473004,281759 472868,281240 C 472805,280998 472687,280800 472606,280800 C 472525,280800 472221,280580 471931,280311 L 471403,279822 L 466883,279894 C 462629,279962 462335,279991 461918,280383 C 461674,280612 461265,280800 461009,280800 C 460753,280800 460429,280958 460288,281150 C 460076,281439 459714,281500 458220,281500 C 456568,281500 456380,281540 456093,281950 C 455684,282534 455054,282523 454583,281924 C 454264,281518 454081,281463 453342,281546 C 452571,281633 452436,281585 452126,281112 C 451868,280718 451673,280613 451372,280709 C 451102,280795 450815,280696 450515,280414 C 449814,279756 446056,279644 445797,280274 C 445700,280508 445304,280925 444916,281200 C 444046,281817 443854,283487 444600,283954 C 444888,284133 445000,284420 445000,284976 C 445000,285753 448401,289575 450049,290650 C 450798,291138 451926,291112 452200,290600 C 452327,290362 452619,290200 452920,290200 C 453403,290200 454029,289633 454800,288495 C 455349,287685 456418,286943 457255,286790 C 458640,286537 460086,288582 459100,289400 C 458601,289814 458742,290200 459393,290200 C 459781,290200 460060,290338 460200,290600 C 460367,290912 460622,291001 461357,291004 C 461990,291007 462464,291139 462800,291405 C 463194,291717 463554,291790 464500,291751 L 465700,291700 L 465763,290814 z M 495094,291207 C 495440,290824 495418,290783 494319,289727 C 491433,286954 491346,286423 493446,284396 C 494242,283628 494962,283000 495046,283000 C 495131,283000 495200,282506 495200,281902 C 495200,281020 495279,280754 495600,280554 C 495936,280344 496000,280087 496000,278960 C 496000,277649 496019,277598 496800,276876 C 497694,276048 497788,275632 497200,275100 C 496687,274636 496674,273681 497177,273412 C 497384,273301 497615,272966 497690,272668 C 497765,272369 497970,272020 498146,271891 C 498595,271562 498321,271000 497711,271000 C 497435,271000 496915,270820 496555,270601 C 495650,270049 494095,270049 493800,270600 C 493682,270820 493495,271000 493385,271000 C 492971,271000 490685,272181 490300,272594 C 490080,272830 489698,273230 489450,273484 C 488893,274055 488876,274519 489400,274800 C 489692,274956 489800,275219 489800,275775 C 489800,276392 489894,276579 490300,276764 C 490910,277042 491061,278912 490491,279131 C 490322,279196 490015,279576 489810,279975 C 489605,280374 489246,280880 489013,281100 C 488780,281320 488344,281763 488045,282084 C 487745,282404 487298,282848 487050,283070 C 486802,283291 486600,283579 486600,283709 C 486600,283839 486420,284175 486200,284455 C 485980,284734 485800,285230 485800,285557 C 485800,285947 485649,286251 485362,286442 C 484778,286830 486476,288600 487431,288600 C 487802,288600 488097,288763 488308,289084 C 488482,289350 489014,289750 489489,289974 C 489965,290197 490654,290655 491021,290990 C 491880,291775 494456,291911 495094,291207 z M 201560,289160 C 201972,288748 201826,288198 201129,287537 C 200017,286482 199468,285013 199990,284490 C 200932,283547 199806,281064 198557,281329 C 195888,281895 197980,289388 200810,289398 C 201091,289399 201428,289292 201560,289160 z M 208350,288967 C 209088,288750 209347,288767 210309,289094 C 212433,289816 213638,288408 211786,287369 C 211271,287080 210691,286497 210277,285850 C 209480,284605 209035,284516 207976,285389 C 206532,286579 205905,289757 207200,289319 C 207365,289263 207883,289105 208350,288967 z M 514119,288679 L 514500,287957 L 514000,287631 C 513725,287452 513261,287056 512970,286753 C 512301,286056 510412,285937 509961,286563 C 509818,286763 509543,286985 509350,287057 C 508917,287218 508896,287573 509310,287731 C 509487,287800 509745,287690 509915,287475 C 510195,287120 510265,287160 511251,288250 C 512587,289727 513492,289862 514119,288679 z M 212360,282160 C 212731,281789 212658,281641 211850,281135 C 210343,280189 209114,280295 209238,281359 C 209342,282250 211672,282848 212360,282160 z M 445760,279067 C 445848,278470 445340,278168 444365,278238 C 443267,278317 443193,278801 444234,279094 C 444637,279207 445037,279369 445121,279454 C 445368,279701 445695,279503 445760,279067 z M 509600,247633 C 509600,247373 509362,247200 509169,247319 C 508962,247447 509140,247800 509412,247800 C 509515,247800 509600,247725 509600,247633 z M 455320,191520 C 455379,191365 455736,191181 456114,191111 C 456962,190951 457141,189797 456381,189390 C 456032,189203 455984,189048 456093,188468 C 456246,187654 455962,187200 455300,187200 C 455052,187200 454706,186998 454531,186750 L 454214,186300 L 453607,186953 C 452582,188056 452710,189481 453950,190771 C 454985,191848 455158,191942 455320,191520 z M 229400,101207 C 229400,100366 229146,100104 228200,99970 C 227768,99910 227709,99968 227764,100400 C 227799,100675 227835,101148 227843,101450 C 227871,102496 229400,102257 229400,101207 z"
+ id="path5770"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 348128,366700 C 348063,366531 347765,366400 347446,366400 C 346454,366400 345920,365051 346750,364642 C 347429,364307 350385,364598 350611,365021 C 350780,365336 351044,365400 352167,365400 C 354053,365400 354501,365858 353326,366584 C 352452,367124 348326,367216 348128,366700 z"
+ id="path5772"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 507933,365909 C 507701,365733 507313,365672 506878,365742 C 506391,365821 506081,365755 505815,365513 C 505459,365191 505392,365196 504612,365594 C 504158,365826 503685,365952 503560,365875 C 503436,365799 502745,365715 502025,365689 C 500883,365649 500663,365576 500301,365121 C 500008,364754 499695,364600 499242,364600 C 498428,364600 498389,364142 499137,363361 C 499862,362604 501049,362861 501950,363969 C 502168,364236 502200,364219 502200,363838 C 502200,363462 502310,363400 502987,363400 C 503420,363400 504023,363305 504326,363190 C 505268,362832 507590,362784 508219,363110 C 509020,363524 509383,363471 509598,362906 C 509966,361936 511410,362177 513025,363477 C 513313,363710 513831,364053 514175,364241 C 515670,365056 514635,365619 511604,365639 C 510196,365648 509354,365743 509057,365927 C 508513,366262 508397,366261 507933,365909 z"
+ id="path5774"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 521634,365425 C 521483,365329 521396,365007 521434,364678 C 521524,363889 522297,363756 522624,364474 C 523026,365354 522428,365928 521634,365425 z"
+ id="path5776"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 488824,365050 C 488679,364792 488263,364734 486573,364741 C 484110,364751 483469,364347 484177,363230 C 484376,362917 486704,362787 488347,362998 C 489283,363118 489441,363082 489840,362658 C 490397,362065 491075,362124 491167,362773 C 491226,363194 491312,363234 491927,363134 C 492695,363010 493030,363382 492609,363889 C 492425,364111 492445,364282 492697,364668 C 493120,365313 493033,365346 490851,365357 C 489364,365365 488966,365304 488824,365050 z"
+ id="path5778"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 587016,365119 C 586828,364892 586674,364856 586503,364998 C 586258,365201 584677,365144 583437,364888 C 583018,364801 582408,364380 581780,363742 L 580787,362732 L 581440,362058 C 582037,361442 582115,361414 582344,361727 C 582700,362214 585195,362243 585728,361767 C 585933,361584 586460,361369 586900,361291 C 587340,361212 587792,361075 587905,360987 C 588456,360554 590137,360549 590537,360978 L 590930,361400 L 592161,360900 C 593465,360371 594114,360288 594594,360592 C 594795,360719 595087,360655 595518,360389 C 596316,359896 596258,359887 597093,360621 C 598721,362050 596755,363964 594851,362803 C 594318,362478 594114,362448 593707,362633 C 593327,362807 593140,362799 592901,362601 C 592486,362256 592372,362412 592251,363487 C 592124,364616 591992,364724 590393,365004 C 587866,365448 587305,365467 587016,365119 z"
+ id="path5780"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 426597,363794 C 426434,363691 426108,363605 425873,363603 C 425638,363601 425188,363466 424873,363301 C 424558,363137 424119,363002 423897,363001 C 423675,363001 423169,362826 422773,362613 C 422129,362268 422006,362258 421633,362520 C 421327,362734 421118,362757 420857,362606 C 420661,362493 420251,362312 419946,362204 C 419642,362096 419312,361794 419212,361533 C 418971,360899 416371,361349 415554,362166 C 415115,362605 413937,362438 413196,361831 C 412367,361154 411028,361151 410851,361825 C 410686,362458 409796,362271 408835,361401 C 407793,360459 407731,359742 408682,359634 C 409002,359597 409462,359438 409704,359279 C 410092,359025 410175,359029 410414,359316 C 410932,359941 411570,360034 412190,359576 C 412652,359234 412869,359190 413330,359344 C 413906,359537 415416,358317 416087,357119 C 416491,356396 420730,356482 421426,357228 C 421764,357590 422163,357800 422511,357800 C 422814,357800 423357,358025 423718,358300 C 424078,358575 424462,358800 424571,358800 C 424680,358800 425037,359025 425365,359301 C 425692,359577 426239,359858 426580,359926 C 427279,360066 427405,360508 426800,360700 C 426263,360870 426296,361088 426900,361364 C 427175,361489 427400,361728 427400,361896 C 427400,362342 427952,362267 428100,361800 C 428241,361355 428792,361272 429160,361640 C 429347,361827 429453,361827 429640,361640 C 429772,361508 430209,361400 430610,361400 C 431012,361400 431631,361299 431986,361175 C 432449,361014 432764,361011 433100,361164 C 433458,361327 433623,361313 433795,361106 C 433985,360877 434106,360879 434560,361116 C 434857,361271 435254,361398 435443,361399 C 435632,361399 435882,361580 436000,361800 C 436284,362331 436645,362304 437364,361700 C 438025,361144 438733,361061 439297,361473 C 439910,361921 439369,362994 438527,363001 C 438182,363003 437450,363051 436900,363107 C 435243,363276 433250,363056 432761,362651 C 432209,362192 431064,362278 430625,362810 L 430221,363300 L 429379,362826 C 428560,362365 428529,362362 428219,362727 C 427474,363602 426896,363983 426597,363794 z M 417400,357800 C 417400,357690 417265,357600 417100,357600 C 416935,357600 416800,357690 416800,357800 C 416800,357910 416935,358000 417100,358000 C 417265,358000 417400,357910 417400,357800 z"
+ id="path5782"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 599418,360757 C 597679,359342 597936,358900 600500,358900 C 603541,358900 604532,359565 603503,360913 C 602667,362010 600874,361942 599418,360757 z"
+ id="path5784"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 428540,360474 C 428267,360200 428406,359973 428808,360036 C 429032,360071 429217,360190 429218,360300 C 429222,360543 428735,360668 428540,360474 z"
+ id="path5786"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 430056,359750 C 429196,358639 430569,356741 431768,357383 C 432377,357709 432591,357650 432800,357100 C 433049,356445 433715,356435 433878,357084 C 434006,357595 433860,358200 433608,358200 C 433526,358200 433216,358425 432919,358700 C 432622,358975 432269,359200 432134,359200 C 431999,359200 431735,359380 431546,359600 C 431162,360049 430350,360130 430056,359750 z"
+ id="path5788"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 526718,356645 C 526398,356602 525937,356437 525693,356277 C 525450,356118 524767,355931 524175,355862 C 523584,355793 522920,355623 522700,355484 C 522418,355305 520999,355210 517877,355162 C 515103,355119 513350,355013 513177,354876 C 513025,354757 512090,354550 511100,354416 C 509903,354254 509166,354050 508900,353807 C 508680,353606 507960,353289 507300,353103 C 505860,352696 504291,351921 503584,351267 C 503300,351005 502589,350615 502004,350402 C 500549,349870 498820,348804 498430,348200 C 497901,347381 496969,346585 496160,346261 C 494816,345723 495939,343741 497575,343764 C 498050,343770 498472,343654 498620,343476 C 499281,342679 502176,342448 503612,343077 C 503800,343159 504228,343007 504691,342693 C 505380,342226 505489,342204 505765,342479 C 506178,342893 505788,343800 505197,343800 C 504970,343800 504316,344255 503742,344811 L 502700,345822 L 503700,346707 C 504250,347193 504845,347594 505023,347596 C 505201,347598 505561,347761 505823,347958 C 506085,348155 506550,348424 506856,348556 C 507161,348688 507463,348932 507527,349098 C 507591,349264 507844,349400 508090,349400 C 508337,349400 508701,349580 508900,349800 C 509099,350020 509432,350200 509639,350200 C 509847,350200 510260,350376 510558,350591 C 510856,350806 511818,351167 512697,351393 C 513808,351680 514439,351962 514773,352322 C 515213,352796 515342,352828 516324,352706 C 517538,352554 518200,352696 518200,353107 C 518200,353336 518594,353371 520348,353294 C 522534,353199 523698,353392 524121,353921 C 524289,354131 524765,354178 526097,354115 C 527737,354037 528800,354236 528800,354620 C 528800,354705 529199,354835 529687,354908 C 530633,355050 530873,355339 530681,356104 C 530525,356728 528942,356944 526718,356645 z"
+ id="path5790"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 621486,355534 C 621243,354901 621778,354151 622407,354244 C 622742,354293 623098,354223 623211,354087 C 623467,353779 624134,353939 624290,354345 C 624477,354834 624033,355197 623401,355070 C 622963,354983 622787,355051 622611,355379 C 622361,355847 621644,355947 621486,355534 z"
+ id="path5792"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 623519,352821 C 623160,352425 623101,351885 623396,351703 C 623746,351486 624400,351997 624400,352486 C 624400,353093 623928,353273 623519,352821 z"
+ id="path5794"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 272400,342800 C 272400,342690 272490,342600 272600,342600 C 272710,342600 272800,342690 272800,342800 C 272800,342910 272710,343000 272600,343000 C 272490,343000 272400,342910 272400,342800 z"
+ id="path5796"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 274592,342690 C 274405,342465 274421,342379 274668,342285 C 275005,342155 275400,342320 275400,342590 C 275400,342905 274829,342976 274592,342690 z"
+ id="path5798"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 268850,342206 C 268237,341943 268269,341834 269281,340731 L 270163,339771 L 270932,340257 C 271783,340794 272383,341697 272086,341994 C 271810,342269 269370,342428 268850,342206 z"
+ id="path5800"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 348848,333293 C 348489,332651 347211,332363 346657,332798 C 346190,333165 345396,333086 344700,332603 C 344590,332527 343825,332482 343000,332504 C 342045,332530 341344,332448 341070,332281 C 340834,332136 339819,331955 338814,331880 C 336921,331737 336480,331529 337103,331073 C 337408,330850 337430,330726 337239,330306 C 336911,329585 337133,329200 337877,329200 C 338335,329200 338718,328999 339254,328479 C 339987,327767 340013,327759 341448,327829 C 342752,327893 342947,327853 343365,327435 C 343929,326871 345316,326976 345774,327617 C 345937,327844 346286,328000 346631,328000 C 346952,328000 347438,328147 347711,328326 C 348053,328550 348457,328618 349005,328545 C 349808,328437 350171,328506 352676,329241 C 354022,329636 355402,330310 355398,330570 C 355390,330943 353778,332373 353229,332494 C 352883,332570 352479,332805 352331,333016 C 352122,333314 351841,333395 351081,333375 C 350541,333361 349862,333414 349571,333494 C 349174,333602 348993,333552 348848,333293 z"
+ id="path5802"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 206048,326168 C 205406,325526 206090,324400 207123,324400 C 207889,324400 209062,325425 208953,326000 C 208878,326395 206418,326538 206048,326168 z"
+ id="path5804"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 28872,320700 C 28694,320235 28945,319800 29394,319800 C 29851,319800 29950,320370 29560,320760 C 29238,321082 29011,321062 28872,320700 z"
+ id="path5806"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 373639,316030 C 373342,315717 372932,315401 372728,315328 C 372445,315227 372377,315050 372444,314589 C 372493,314255 372458,313936 372367,313879 C 372170,313758 372168,312039 372364,311586 C 372616,311004 375127,308899 376306,308281 C 378065,307360 378393,306001 376896,305833 C 376201,305755 375681,305337 375254,304510 C 375086,304185 374825,303796 374674,303645 C 374233,303205 374344,302321 374900,301837 C 375503,301313 375529,300979 375005,300505 C 374612,300149 374612,300145 375019,299574 C 375494,298906 376262,298813 376855,299350 C 377246,299704 378112,299781 382700,299871 C 385537,299927 387600,301031 387600,302495 C 387600,302700 387743,303027 387918,303220 C 388363,303712 388114,304309 387343,304597 C 386142,305046 385301,305566 385073,306000 C 384772,306577 383576,307799 383311,307803 C 383066,307805 381380,309686 381026,310350 C 380894,310598 380496,310923 380143,311073 C 378844,311623 378633,312108 379365,312864 C 380508,314043 380169,315200 378679,315200 C 378011,315200 377666,315344 377000,315900 C 375863,316850 374465,316904 373639,316030 z"
+ id="path5808"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 55350,315184 C 54964,314959 54880,314298 55211,314093 C 55583,313863 56400,314187 56400,314564 C 56400,315239 55926,315519 55350,315184 z"
+ id="path5810"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 366475,309203 C 365829,308544 365125,308004 364911,308003 C 363820,307995 363037,306336 363750,305542 C 364085,305169 364081,305140 363650,304852 C 363403,304686 363200,304399 363200,304214 C 363200,304028 363068,303702 362906,303488 C 362466,302907 362536,302511 363204,301795 C 363923,301026 365265,301022 365774,301787 C 365947,302047 366265,302200 366631,302200 C 366952,302200 367447,302353 367732,302539 C 368017,302726 368549,302858 368915,302834 C 369422,302799 369636,302893 369814,303226 C 370020,303610 370398,303999 371360,304814 C 371541,304967 371580,305300 371488,305908 C 371381,306622 371435,306881 371779,307318 C 372526,308268 371870,309800 370716,309800 C 370459,309800 369926,309935 369531,310100 C 368216,310650 367765,310517 366475,309203 z"
+ id="path5812"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 27504,306804 C 27306,306586 26835,306350 26457,306279 C 25708,306138 25376,305668 25821,305378 C 26307,305061 28752,305736 29035,306265 C 29509,307152 28227,307603 27504,306804 z"
+ id="path5814"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 100933,307067 C 100376,306509 101674,304522 102335,304920 C 102911,305268 102930,306486 102366,306881 C 101899,307209 101170,307303 100933,307067 z"
+ id="path5816"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 5036,302550 C 5071,302303 5235,302100 5400,302100 C 5565,302100 5729,302303 5764,302550 C 5813,302896 5729,303000 5400,303000 C 5071,303000 4987,302896 5036,302550 z"
+ id="path5818"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 686888,288516 C 686569,288282 686497,287971 686480,286766 C 686454,284827 686458,284845 686017,284705 C 685806,284638 685542,284323 685431,284004 C 685270,283540 685075,283398 684465,283296 C 683238,283092 683200,283060 683200,282228 C 683200,281018 684137,280814 685169,281800 C 685618,282229 685993,282400 686486,282400 C 686866,282400 687232,282490 687300,282600 C 687503,282929 688113,282827 688500,282400 C 689007,281840 689903,281886 690437,282500 C 690676,282775 690968,283002 691086,283003 C 691204,283005 691512,283230 691771,283503 C 692290,284051 692622,284115 693169,283773 C 693688,283449 694723,283966 694639,284508 C 694550,285074 693847,285600 693179,285600 C 691821,285600 690170,286409 689042,287628 C 687916,288844 687545,288997 686888,288516 z"
+ id="path5820"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 403164,282500 C 402889,281897 403213,281000 403706,281000 C 404132,281000 405200,281566 405200,281792 C 405200,283002 403639,283544 403164,282500 z"
+ id="path5822"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 684210,279146 C 683870,278974 683633,278591 683438,277899 C 682487,274517 681877,273367 680584,272516 C 680153,272232 679461,271777 679047,271505 C 678465,271123 678131,271036 677585,271125 C 676758,271259 675816,270605 675295,269534 C 674479,267858 674417,267840 669328,267816 C 668904,267814 668454,267732 668328,267634 C 668203,267536 667832,267391 667503,267312 C 665333,266792 663597,263397 665673,263734 C 666269,263831 666410,263760 666897,263122 C 667421,262435 668119,262183 668482,262550 C 668563,262633 669141,262790 669765,262900 C 670801,263083 670932,263165 671266,263850 C 671756,264851 672203,264813 673291,263677 L 674176,262753 L 675427,264027 L 676678,265300 L 677933,265259 C 678716,265233 679397,265327 679744,265507 C 680050,265667 680397,265798 680515,265799 C 680633,265799 680942,266025 681200,266300 C 681458,266575 681823,266800 682010,266800 C 682198,266800 682468,266941 682611,267113 C 682762,267296 683043,267382 683287,267321 C 683938,267158 684800,268170 684800,269098 C 684800,269273 684995,269795 685233,270258 C 685471,270721 685685,271505 685709,272000 C 685750,272862 685967,273553 686400,274200 C 686510,274365 686690,274725 686800,275000 C 686909,275275 687110,275656 687247,275847 C 687447,276129 687431,276317 687161,276847 C 686977,277206 686773,277695 686705,277934 C 686347,279208 685319,279707 684210,279146 z"
+ id="path5824"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 402714,278886 C 402287,278459 402314,277023 402760,276444 C 403296,275747 404207,275756 404448,276461 C 404981,278014 403672,279844 402714,278886 z"
+ id="path5826"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 434118,274138 C 433593,273754 433885,273400 434726,273400 C 435339,273400 435420,273457 435364,273850 C 435287,274389 434660,274534 434118,274138 z"
+ id="path5828"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 412750,273439 C 411866,273382 411800,273341 411803,272839 C 411807,272089 411945,271943 413235,271318 C 413859,271016 414419,270640 414478,270484 C 414591,270191 415691,270094 416289,270323 C 417252,270693 417909,273380 417050,273435 C 416058,273499 413719,273501 412750,273439 z"
+ id="path5830"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 430967,272508 C 430648,271807 431193,271000 431987,271000 C 432638,271000 433600,271964 433600,272615 C 433600,273273 431273,273179 430967,272508 z"
+ id="path5832"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 454917,266367 C 454464,265915 454388,265732 454574,265546 C 454950,265170 455885,265782 455963,266456 C 456045,267159 455680,267128 454917,266367 z"
+ id="path5834"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 663300,263222 C 662457,263093 662115,262298 662530,261431 C 662617,261249 662691,260700 662694,260211 C 662708,258083 664603,258606 665339,260940 C 665651,261931 665651,262048 665340,262701 C 664986,263442 664899,263465 663300,263222 z"
+ id="path5836"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 641991,244650 C 641527,244128 641027,243418 640881,243074 C 640735,242730 640477,242395 640307,242331 C 639743,242114 640228,240840 641404,239450 C 641967,238785 644200,240474 644200,241564 C 644200,241838 644425,242357 644700,242718 C 646233,244727 643677,246550 641991,244650 z"
+ id="path5838"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 210066,241308 C 208341,240558 209769,238628 212075,238594 C 212309,238590 212675,238455 212888,238294 C 213102,238132 213572,238000 213933,238000 C 214295,238000 214885,237820 215245,237601 C 215605,237381 216021,237201 216169,237201 C 216316,237200 216984,236705 217653,236100 C 218321,235495 219010,234997 219184,234993 C 219358,234989 219759,234774 220075,234515 C 220529,234144 220812,234066 221412,234147 C 221993,234225 222303,234148 222714,233825 C 223720,233033 224414,233504 224392,234963 C 224378,235872 222203,237624 221131,237590 C 220331,237564 219177,238033 217985,238868 C 217725,239050 217365,239200 217186,239200 C 217008,239200 216699,239380 216500,239600 C 216301,239820 215896,240000 215600,240000 C 215304,240000 214899,240180 214700,240400 C 214501,240620 214104,240800 213817,240800 C 213513,240800 213192,240966 213046,241200 C 212743,241686 211074,241747 210066,241308 z"
+ id="path5840"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 205853,240656 C 205101,240562 204600,239960 204600,239149 C 204600,238312 205078,238271 206500,238985 C 209077,240280 208790,241021 205853,240656 z"
+ id="path5842"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 51801,234101 C 51484,233719 52027,232800 52570,232800 C 53065,232800 53879,233704 53732,234090 C 53574,234501 52139,234509 51801,234101 z"
+ id="path5844"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 231685,234117 C 231364,233892 231114,233879 230471,234050 C 228986,234447 228581,233654 229323,231801 C 229989,230136 232951,229406 234936,230418 C 235858,230888 236266,230897 236931,230461 C 237422,230139 237463,230141 237724,230499 C 238295,231280 237795,232600 236928,232600 C 236680,232600 236173,232825 235800,233100 C 235427,233375 235041,233600 234943,233600 C 234844,233600 234534,233780 234255,234000 C 233651,234475 232284,234537 231685,234117 z"
+ id="path5846"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 642865,231332 C 642005,230911 641600,230330 641600,229515 C 641600,229259 641457,228930 641283,228786 C 641066,228606 641002,228339 641081,227945 C 641165,227524 641068,227197 640722,226734 C 639813,225518 639837,224319 640793,223186 C 641592,222237 641616,222168 641633,220694 C 641646,219619 641740,219089 641956,218872 C 643141,217688 644703,218306 644160,219745 C 643719,220913 644182,221070 645732,220277 C 646458,219904 647194,219600 647365,219600 C 647537,219600 647923,219365 648223,219078 C 648898,218431 649200,218592 649200,219598 C 649200,220455 648909,220740 647148,221605 C 646624,221862 646052,222232 645876,222427 C 645649,222677 645385,222747 644978,222666 C 644379,222546 644231,222751 644630,223150 C 644803,223323 644778,223504 644530,223883 C 644024,224655 644123,225101 645100,226443 C 646282,228067 646324,228887 645280,229960 C 644884,230367 644432,230948 644275,231250 C 643949,231878 643979,231876 642865,231332 z"
+ id="path5848"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 218682,230126 C 218532,229735 218737,229400 219126,229400 C 219322,229400 219405,229552 219364,229834 C 219286,230362 218845,230551 218682,230126 z"
+ id="path5850"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 498800,218631 C 498800,218231 499389,217600 499762,217600 C 500036,217600 500294,218487 500107,218789 C 499869,219173 498800,219044 498800,218631 z"
+ id="path5852"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 649912,216545 C 650110,213843 648921,213585 647179,215951 C 646497,216877 645852,217001 645266,216319 C 644677,215634 644625,214405 645172,214064 C 645392,213926 645600,213480 645682,212968 C 646008,210932 648376,210613 649232,212490 C 649451,212972 650480,213600 651049,213600 C 651704,213600 652059,214405 652329,216503 C 652475,217630 651772,218400 650597,218400 L 649776,218400 L 649912,216545 z"
+ id="path5854"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 652210,212350 C 652097,212213 651545,211538 650985,210850 L 649966,209600 L 648592,209728 C 646444,209928 645600,209423 645600,207938 C 645600,206985 646121,206558 646584,207131 C 647473,208228 648417,207954 648919,206452 C 649818,203760 651428,202983 652548,204700 C 652998,205389 653450,205807 654004,206043 L 654808,206387 L 654774,208293 C 654750,209657 654661,210267 654459,210434 C 654304,210563 654046,210981 653886,211364 C 653439,212435 652658,212894 652210,212350 z"
+ id="path5856"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 555062,211047 C 554374,210192 554145,207629 554699,207000 C 554844,206835 555062,206328 555183,205873 C 555546,204509 557270,203809 557805,204809 C 557939,205060 558357,205548 558734,205892 C 559373,206478 559508,207200 558979,207200 C 558880,207200 558800,207502 558800,207872 C 558800,208259 558588,208857 558300,209281 C 558025,209686 557800,210156 557800,210324 C 557800,211633 555929,212126 555062,211047 z"
+ id="path5858"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 632589,205750 C 632322,205393 631877,204775 631601,204378 C 630972,203472 629825,202472 629300,202371 C 629076,202328 628746,201966 628549,201547 C 628310,201040 628064,200800 627785,200800 C 627106,200800 626640,200439 626500,199802 C 626428,199471 626289,199200 626191,199200 C 626094,199200 625706,198930 625331,198600 C 624907,198228 624427,198000 624066,198000 C 623027,198000 621729,197190 621502,196400 C 621145,195163 621094,195135 619443,195260 C 617340,195419 615455,192655 617011,191693 C 617127,191622 617446,191054 617720,190432 C 617994,189809 618439,189094 618709,188842 C 619028,188545 619200,188164 619200,187759 C 619200,186932 620094,185430 620657,185310 C 620901,185258 621616,185116 622247,184994 C 622877,184873 623442,184694 623502,184597 C 623562,184500 624364,184473 625283,184538 C 626823,184647 626985,184622 627322,184228 C 627524,183993 627881,183800 628117,183800 C 628352,183800 628876,183575 629281,183300 C 630488,182481 632600,183387 632600,184724 C 632600,184883 632743,185233 632919,185500 C 633146,185848 633200,186210 633106,186767 C 632982,187500 633024,187589 633815,188266 C 634996,189277 635400,190024 635400,191197 C 635400,192296 635779,192812 636950,193305 C 637760,193647 637758,193718 636901,195140 C 636516,195778 636201,196421 636201,196568 C 636200,196716 636020,197066 635800,197345 C 635078,198263 635256,199203 636350,200247 C 639230,202993 639392,203536 637484,204046 C 636815,204225 636393,204504 635958,205053 C 634779,206541 633395,206828 632589,205750 z"
+ id="path5860"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 588070,203094 C 587978,202855 588075,202623 588367,202387 C 588605,202194 588800,201900 588800,201734 C 588800,201568 589321,200907 589958,200266 C 590595,199625 591966,198155 593004,197000 C 594042,195845 594947,194855 595016,194800 C 595403,194489 595617,193694 595500,193002 C 595374,192253 595395,192219 596385,191571 C 597157,191066 597428,190754 597519,190269 C 597585,189919 597890,189407 598198,189133 C 598506,188859 598868,188289 599003,187867 C 599139,187445 599408,186920 599602,186700 C 599795,186480 600012,186107 600084,185871 C 600287,185199 604180,181436 604817,181296 C 605169,181219 605670,180787 606193,180109 C 607025,179030 607413,178810 608500,178800 C 609394,178791 609568,178591 609637,177496 C 609700,176505 609704,176500 610439,176439 C 610995,176392 611336,176198 611812,175655 L 612446,174934 L 614952,174872 C 616781,174826 617545,174732 617779,174522 C 617970,174350 618318,174276 618637,174338 C 618936,174396 619461,174299 619818,174121 C 620172,173944 620653,173800 620886,173800 C 621120,173800 621518,173655 621770,173478 C 622162,173204 622358,173192 623092,173398 C 623702,173569 624067,173578 624344,173430 C 624738,173219 628530,173063 628717,173250 C 629486,174019 628430,175081 627063,174914 C 626325,174823 626219,174861 626163,175235 C 626128,175468 625965,175727 625800,175810 C 625635,175893 624895,176244 624156,176590 C 623417,176936 622759,177305 622694,177410 C 622449,177805 620782,177620 620203,177133 C 619308,176380 618073,176534 616860,177550 C 615985,178282 615788,178359 614739,178371 C 613306,178388 612264,178571 611560,178927 C 611263,179077 610838,179200 610615,179200 C 610263,179200 610235,179267 610405,179713 C 610512,179995 610600,180794 610600,181489 C 610600,182395 610689,182825 610916,183013 C 611102,183168 611195,183468 611143,183743 C 611077,184088 611204,184318 611627,184619 C 612480,185226 612282,186593 611247,187244 C 610946,187434 610557,187694 610381,187823 C 610126,188012 609941,187968 609447,187603 C 608739,187080 608476,187200 607273,188600 C 606250,189790 606000,190263 606000,191005 C 606000,191910 605039,193268 604076,193725 C 603695,193906 603140,194311 602842,194627 C 602545,194942 602104,195200 601862,195200 C 601620,195200 601305,195368 601161,195573 C 601018,195778 600623,196007 600285,196081 C 599947,196156 599223,196640 598677,197158 C 597574,198204 596198,199200 595856,199200 C 595582,199200 594031,200930 593739,201561 C 593440,202207 591885,203210 591237,203175 C 590942,203159 590139,203214 589453,203298 C 588358,203432 588190,203408 588070,203094 z"
+ id="path5862"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 657263,196648 C 656385,196072 655514,190041 656225,189469 C 656925,188907 657368,188958 657718,189640 C 657904,190003 658120,190345 658198,190400 C 658614,190693 658807,191413 658582,191834 C 658381,192210 658420,192319 658875,192651 C 659486,193096 659512,193286 659077,194100 C 658901,194430 658699,195150 658628,195700 C 658497,196724 657953,197101 657263,196648 z"
+ id="path5864"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 649336,194591 C 649030,194153 645708,193979 643961,194309 C 642028,194674 639428,192852 640440,191840 C 640790,191490 641133,191545 641575,192019 C 641942,192413 642205,192442 645933,192501 C 648115,192535 650008,192572 650141,192582 C 650273,192592 650441,192916 650514,193302 C 650586,193688 650725,194054 650823,194114 C 650920,194174 651000,194398 651000,194612 C 651000,195174 649733,195158 649336,194591 z"
+ id="path5866"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 189327,191385 C 188683,190879 188652,190326 189245,189911 C 190170,189263 191000,189636 191000,190700 C 191000,191815 190259,192119 189327,191385 z"
+ id="path5868"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 662650,190868 C 661852,190545 664040,187800 665095,187800 C 665910,187800 667298,186246 667312,185319 C 667330,184108 668254,182708 668830,183016 C 669142,183183 669379,183183 669748,183014 C 670022,182890 670423,182844 670640,182913 C 670897,182994 671192,182889 671488,182611 C 671738,182376 672293,182131 672721,182065 C 673150,181999 673647,181819 673826,181663 C 674029,181488 674345,181429 674662,181508 C 675246,181655 677015,180855 677686,180139 C 677914,179897 678325,179519 678600,179299 C 680152,178060 680514,177017 679799,175845 C 679040,174600 679632,173798 681095,174089 C 681985,174267 683553,173620 684583,172650 C 685079,172183 685579,171792 685693,171783 C 685807,171774 686484,171725 687199,171674 C 687913,171624 688583,171497 688689,171391 C 688999,171081 689602,171172 689747,171550 C 689820,171743 690087,172215 690340,172600 C 691522,174399 692805,175046 694173,174532 C 694683,174341 695269,174146 695476,174099 C 695684,174051 696114,173717 696434,173356 C 698203,171357 699699,170000 700134,170000 C 700390,170000 700600,169921 700600,169824 C 700600,169495 701696,169233 703550,169119 C 705541,168996 705767,169141 705209,170183 C 704904,170754 702293,172800 701870,172800 C 701243,172800 699202,175457 699201,176276 C 699200,176483 699386,176954 699614,177323 C 700070,178061 700064,178773 699600,179017 C 698712,179484 697898,179800 697585,179800 C 697079,179800 696146,180643 695690,181512 C 695333,182193 691864,184200 691044,184200 C 690937,184200 690737,184335 690600,184500 C 690445,184687 690002,184801 689426,184802 C 688149,184806 686501,185275 685618,185887 C 684821,186440 684324,186513 683503,186201 C 682976,186001 681613,186493 681302,186997 C 681233,187109 680788,187200 680313,187200 C 679789,187200 679351,187318 679200,187500 C 678879,187887 677427,187883 676912,187494 C 676698,187332 676266,187200 675951,187200 C 675499,187200 675337,187078 675176,186616 C 675064,186295 674664,185823 674287,185566 C 673911,185310 673602,185033 673601,184950 C 673601,184868 673392,184800 673138,184800 C 672308,184800 671087,186831 671309,187842 C 671660,189440 667600,191905 666600,190700 C 666280,190315 665066,190316 664327,190701 C 663758,190998 663128,191061 662650,190868 z"
+ id="path5870"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 639272,189610 C 639207,189286 638984,188867 638777,188679 C 638511,188438 638400,188065 638400,187407 C 638400,186895 638268,186302 638106,186088 C 637651,185486 637745,184963 638451,184182 C 638808,183787 639299,183187 639543,182850 L 639986,182236 L 639579,181718 C 639064,181064 639152,180450 639833,179944 C 641250,178890 642450,180929 641594,182937 C 641340,183531 641354,183600 641811,183980 C 642534,184582 643000,184523 643000,183830 C 643000,183133 643377,182000 643609,182000 C 643702,182000 643896,181756 644039,181458 C 644183,181161 644495,180868 644734,180808 C 644973,180749 645362,180453 645599,180150 C 646147,179449 646419,179457 646962,180192 C 647481,180893 647558,182152 647093,182330 C 646709,182478 646000,183916 646000,184547 C 646000,184806 645782,185237 645515,185504 C 643919,187100 644337,188479 646466,188640 C 647685,188732 648042,188987 647951,189700 C 647882,190242 646526,190376 645993,189894 C 645715,189642 645430,189593 644832,189695 C 644235,189796 643844,189729 643244,189423 L 642449,189017 L 641674,189603 C 640570,190438 639438,190442 639272,189610 z"
+ id="path5872"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 595325,189093 C 594967,188160 595549,187263 596133,187848 C 596374,188088 596403,188292 596257,188730 C 596041,189377 595513,189583 595325,189093 z"
+ id="path5874"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 654446,185366 C 654076,184996 654150,184307 654605,183896 C 655149,183404 655445,183727 655364,184722 C 655297,185539 654898,185818 654446,185366 z"
+ id="path5876"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 708589,183136 C 708210,182771 707630,182154 707300,181765 C 706487,180807 704962,180135 704293,180440 C 703896,180620 703731,180600 703435,180332 C 703233,180148 702737,180000 702328,180000 C 700829,180000 701228,178443 702805,178138 C 703297,178043 703786,177883 703890,177782 C 704144,177538 704945,177550 705100,177800 C 705168,177910 705583,178000 706021,178000 C 706602,178000 706939,178128 707260,178472 C 707502,178732 707903,179008 708152,179086 C 708401,179164 708737,179486 708900,179800 C 709063,180114 709354,180423 709548,180485 C 710074,180655 711400,181936 711400,182274 C 711400,183621 709650,184158 708589,183136 z"
+ id="path5878"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 714600,179325 C 714600,178669 716253,176800 716834,176800 C 717474,176800 717550,177111 717174,178188 C 716861,179087 714600,180086 714600,179325 z"
+ id="path5880"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 719107,175612 C 718549,174709 720926,172112 721550,172943 C 722013,173561 721860,174766 721250,175303 C 720686,175800 719343,175993 719107,175612 z"
+ id="path5882"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 723343,175076 C 723073,174807 723200,174187 723550,174063 C 723743,173995 724060,173802 724255,173634 C 724738,173219 725047,173563 724965,174425 C 724901,175093 723802,175535 723343,175076 z"
+ id="path5884"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 653295,174131 C 652700,173726 651019,173364 650380,173504 C 649881,173614 649800,173563 649692,173064 C 649487,172123 649142,171580 648557,171278 C 647829,170901 647818,170173 648531,169611 C 649197,169087 649633,169208 650746,170226 C 651211,170652 651722,171000 651881,171000 C 652041,171000 652295,171123 652445,171274 C 652596,171424 652939,171611 653209,171690 C 655169,172258 655847,173136 654932,173924 C 654303,174464 653865,174520 653295,174131 z"
+ id="path5886"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 641607,173813 C 641348,173329 641337,172600 641590,172600 C 641694,172600 642022,172375 642319,172100 C 643124,171354 644200,171883 644200,173026 C 644200,173900 642009,174565 641607,173813 z"
+ id="path5888"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 633000,173300 C 632308,173051 632064,172644 632276,172092 C 632409,171744 633000,171931 633000,172321 C 633000,172709 633386,172668 634155,172199 C 634838,171783 635698,171673 635886,171978 C 635947,172076 636245,172216 636548,172289 C 638213,172691 638600,172840 638600,173081 C 638600,173616 634342,173783 633000,173300 z"
+ id="path5890"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 725445,172289 C 724856,171877 724866,171125 725463,170853 C 726694,170292 728699,171333 728314,172334 C 728166,172721 726013,172687 725445,172289 z"
+ id="path5892"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 639544,171277 C 639242,170975 639405,170225 639800,170100 C 640020,170030 640200,169899 640200,169808 C 640200,169517 640817,169395 641214,169608 C 641597,169812 641769,170877 641450,171065 C 641134,171252 639680,171414 639544,171277 z"
+ id="path5894"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 687750,168108 C 687396,167682 687200,167211 687200,166788 C 687200,166427 687071,165989 686914,165815 C 686757,165642 686584,164990 686531,164367 C 686463,163581 686307,163107 686019,162819 C 685572,162372 685598,159625 686055,159046 C 686194,158869 686156,158683 685928,158431 C 685712,158192 685600,157710 685600,157018 C 685600,154979 682907,153223 681926,154623 C 681584,155111 680521,155800 680110,155800 C 679955,155800 679652,156025 679436,156300 C 679197,156604 678839,156800 678523,156800 C 678220,156800 677899,156967 677754,157200 C 677611,157428 677287,157600 677000,157600 C 676713,157600 676389,157772 676246,158000 C 676109,158220 675811,158400 675585,158400 C 674750,158400 673800,159370 673800,160224 C 673800,160651 673871,161000 673957,161000 C 674043,161000 674286,161293 674496,161650 C 674706,162008 674995,162419 675139,162564 C 675282,162710 675400,162943 675400,163083 C 675400,163223 675580,163501 675800,163700 C 676570,164397 675782,166297 674800,166112 C 674525,166060 673892,165941 673393,165847 C 672894,165753 672369,165604 672226,165516 C 672061,165414 671760,165555 671397,165903 C 670942,166339 670692,166429 670163,166351 C 669645,166274 669404,166356 669060,166726 C 668340,167500 666866,167243 666422,166268 C 666128,165624 664849,165073 664359,165379 C 663834,165707 663442,165648 663306,165218 C 663239,165009 663057,164788 662901,164728 C 662746,164668 662424,164233 662187,163760 C 661950,163287 661529,162658 661252,162362 C 660922,162009 660784,161682 660854,161414 C 661310,159673 659205,159437 657297,161016 L 655777,162273 L 655208,161936 C 654895,161751 654464,161600 654250,161600 C 654037,161600 653699,161420 653500,161200 C 653301,160980 652978,160800 652783,160800 C 652588,160800 652305,160677 652155,160526 C 652004,160375 651592,160103 651240,159921 C 650882,159736 650600,159432 650600,159232 C 650600,158494 647792,156000 646961,156000 C 645713,156000 644800,155038 644800,153724 C 644800,152235 642767,149600 641619,149600 C 641386,149600 641042,149420 640854,149200 C 640570,148869 640264,148800 639083,148800 C 637994,148800 637540,148711 637177,148428 C 636667,148030 635755,147788 634560,147734 C 634154,147715 633708,147588 633570,147450 C 633433,147313 633117,147200 632870,147200 C 632622,147200 632348,147087 632260,146949 C 632010,146556 630657,145600 630352,145600 C 630200,145600 629902,145468 629688,145306 C 629475,145145 629132,145010 628927,145006 C 628465,144998 627200,143650 627200,143166 C 627200,142970 627020,142515 626801,142155 C 626581,141795 626401,141174 626401,140774 C 626400,140374 626265,139937 626100,139800 C 625735,139497 625712,139076 626050,138860 C 626188,138772 626508,138403 626763,138040 L 627226,137381 L 626813,136527 C 626284,135434 626291,134842 626841,134256 C 627136,133942 627289,133516 627302,132969 C 627315,132450 627447,132061 627661,131903 C 627848,131767 628000,131460 628000,131220 C 628000,130801 628389,130142 629346,128940 C 629731,128455 629775,128224 629672,127233 C 629564,126197 629602,126028 630076,125465 C 630364,125122 630600,124709 630600,124546 C 630600,124382 630729,124142 630887,124011 C 631642,123384 631444,121816 630417,120295 C 629443,118851 629885,117860 631750,117307 C 631998,117233 632200,117099 632200,117008 C 632200,115897 636876,116213 638189,117413 C 639163,118303 639346,118385 640900,118632 C 643423,119032 643749,119043 644229,118742 C 644932,118302 647137,118509 647422,119042 C 647833,119809 648478,120400 648905,120400 C 649143,120400 649491,120569 649678,120775 C 649864,120982 650323,121200 650697,121261 C 651071,121321 651637,121563 651955,121798 C 652460,122172 652837,122231 654944,122270 C 656621,122301 657455,122396 657681,122584 C 658189,123006 659512,123249 661800,123341 C 662955,123387 663986,123509 664090,123613 C 664397,123915 664842,123830 665325,123377 C 665608,123110 666131,122919 666738,122861 C 667758,122763 668993,122267 669261,121848 C 669350,121710 669733,121466 670113,121308 C 670820,121012 672985,118844 673244,118173 C 673418,117720 673547,117715 674915,118113 C 675922,118406 676800,119171 676800,119756 C 676800,119863 676929,120058 677087,120189 C 677554,120577 678044,119645 677887,118667 C 677767,117911 677796,117857 678731,117159 C 680397,115914 681767,114709 681784,114474 C 681793,114350 681935,114137 682100,114000 C 682297,113836 682400,113390 682400,112695 C 682400,110947 685103,108731 686817,109073 C 687220,109154 687595,109081 687939,108856 C 688826,108275 690999,108302 691888,108904 C 692750,109490 693844,109554 694353,109050 C 695818,107599 696963,107613 698474,109100 C 699088,109705 699677,110200 699781,110200 C 699886,110200 700100,110329 700258,110487 C 700481,110709 700804,110738 701709,110615 C 703873,110321 705295,111769 705171,114137 L 705100,115492 L 705850,115848 C 706412,116114 706600,116324 706600,116687 C 706600,116954 706721,117292 706868,117440 C 707352,117923 707565,118495 707462,119033 C 707383,119447 707500,119685 708003,120131 C 709533,121486 711029,124439 711535,127100 C 711597,127430 711778,127848 711936,128029 C 712557,128739 712532,131813 711898,132565 C 711352,133215 711345,133254 711450,135305 C 711549,137246 711528,137411 711128,137778 C 710893,137995 710130,138696 709434,139336 C 707027,141548 706614,142004 706735,142320 C 706893,142732 705698,143947 704979,144105 C 704445,144222 703453,145647 702675,147417 C 702427,147980 701493,148800 701100,148800 C 700965,148800 700632,148974 700361,149188 C 700090,149401 699646,149631 699375,149699 C 698175,150000 697000,151351 697000,152430 C 697000,153393 696458,154679 695650,155634 C 695440,155882 695402,156250 695504,157066 C 695628,158052 695599,158187 695221,158389 C 694962,158528 694800,158810 694800,159125 C 694800,159948 693848,160800 692928,160800 C 691585,160800 690620,162071 690747,163673 C 690835,164788 690796,164951 690322,165460 C 689944,165866 689800,166236 689800,166803 C 689800,167372 689694,167642 689414,167793 C 689201,167907 688970,168180 688900,168400 C 688722,168962 688388,168877 687750,168108 z"
+ id="path5896"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 662602,167303 C 662275,166909 662472,166450 663088,166169 C 663702,165889 664200,166218 664200,166903 C 664200,167599 663081,167879 662602,167303 z"
+ id="path5898"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 488746,164848 C 488446,164535 488200,164097 488200,163875 C 488200,163646 487810,163133 487300,162689 C 486759,162218 486400,161736 486400,161480 C 486400,161019 484802,159291 484200,159100 C 484000,159037 483786,158853 483725,158692 C 483663,158532 483444,158400 483237,158400 C 483031,158400 482699,158220 482500,158000 C 482245,157718 481884,157600 481279,157600 C 479732,157600 478199,155673 478176,153700 C 478158,152117 478498,150452 478925,150042 C 479522,149466 479519,149323 478900,148836 C 478625,148619 478400,148245 478400,148003 C 478400,147761 478220,147334 478000,147055 C 477780,146775 477600,146401 477599,146223 C 477599,146045 477417,145603 477196,145239 C 476626,144305 476653,139995 477232,139471 C 477434,139288 477600,139015 477600,138865 C 477600,137272 481381,135734 482800,136750 C 483069,136943 483742,137325 484295,137600 C 484862,137882 485400,138318 485530,138600 C 486433,140560 486600,140989 486600,141341 C 486600,141559 486780,141901 487000,142100 C 487297,142369 487400,142716 487400,143452 C 487400,144213 487514,144578 487893,145029 C 488269,145475 488359,145757 488269,146207 C 488203,146533 488238,146912 488345,147050 C 488671,147470 489200,149334 489200,150063 C 489200,150441 489335,150863 489500,151000 C 489665,151137 489800,151462 489800,151723 C 489800,151983 489980,152309 490200,152446 C 490528,152651 490600,152913 490600,153904 C 490600,154690 490712,155271 490922,155571 C 491122,155857 491202,156240 491133,156586 C 491070,156898 491126,157246 491261,157381 C 491717,157837 491633,163554 491165,163882 C 490952,164031 490709,164411 490626,164727 C 490404,165561 489486,165620 488746,164848 z"
+ id="path5900"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 739994,159386 C 739689,158650 739904,158135 740557,158038 C 741170,157946 741493,158652 741158,159351 C 740784,160131 740308,160145 739994,159386 z"
+ id="path5902"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 741733,157667 C 741456,157389 741616,156448 742000,156100 C 742220,155901 742400,155569 742400,155363 C 742400,154877 742917,154682 743319,155016 C 743708,155338 743535,156910 743051,157450 C 742740,157798 741988,157922 741733,157667 z"
+ id="path5904"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 766953,157401 C 766360,157222 765509,156436 764932,155535 C 764604,155021 764498,154982 763773,155105 C 761786,155440 761716,154096 763605,151850 C 764171,151178 765487,152112 766740,154073 C 767012,154498 767407,154891 767617,154947 C 767944,155032 768000,155234 768000,156323 C 768000,157680 767973,157708 766953,157401 z"
+ id="path5906"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 732995,150087 C 732562,148948 732773,148381 733920,147608 C 736027,146185 736734,146389 735804,148151 C 734630,150377 733422,151209 732995,150087 z"
+ id="path5908"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 753799,116698 C 753406,116225 754716,114510 756768,112812 C 757672,112064 757990,110593 757306,110330 C 757144,110268 756851,109913 756656,109542 C 756460,109170 756124,108533 755909,108125 C 755435,107225 755731,106512 756795,105988 C 757594,105595 757802,105260 757667,104584 C 757444,103471 758529,102432 759523,102807 C 760233,103075 760983,103953 760993,104527 C 760997,104762 761233,105107 761519,105294 C 761887,105535 762007,105752 761931,106043 C 761788,106587 762725,107752 763431,107907 C 764568,108157 765383,109537 764760,110160 C 764378,110542 762910,110453 762372,110016 C 761945,109669 761867,109662 761558,109940 C 761370,110109 760920,110310 760558,110387 C 759969,110512 759905,110592 759949,111152 C 759976,111496 759909,111833 759799,111900 C 759690,111968 759600,112249 759600,112525 C 759600,113101 757929,114883 756800,115511 C 756415,115725 755804,116147 755443,116450 C 754707,117066 754171,117147 753799,116698 z"
+ id="path5910"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 698855,103696 C 698616,103529 698166,103411 697855,103435 C 697543,103459 697178,103410 697043,103326 C 696907,103243 696183,103323 695433,103506 C 693119,104068 692548,103722 693493,102330 C 693772,101919 694000,101417 694000,101215 C 694000,100996 694242,100748 694600,100600 C 694930,100463 695200,100237 695200,100098 C 695200,99423 695909,98970 697138,98859 L 698369,98747 L 699303,99762 C 701640,102298 701286,105399 698855,103696 z"
+ id="path5912"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 751478,103268 C 751089,102845 750636,102230 750471,101900 C 749230,99406 749065,99208 748227,99203 C 747933,99201 747303,98783 746567,98101 C 745914,97497 745137,96944 744840,96873 C 743663,96591 741600,95083 741600,94504 C 741600,94366 741411,94014 741181,93721 C 740184,92454 745551,90836 746592,92090 C 746724,92249 747235,92575 747727,92813 C 748745,93306 749217,93916 749386,94957 C 749479,95530 749730,95856 750602,96540 C 756622,101262 757580,103530 753710,103893 L 752186,104035 L 751478,103268 z"
+ id="path5914"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 224300,93200 C 224137,92936 224376,92562 224614,92709 C 224857,92859 224855,93400 224612,93400 C 224508,93400 224368,93310 224300,93200 z"
+ id="path5916"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 531865,87061 C 530341,86764 531072,84599 532695,84601 C 534616,84603 535211,86198 533549,86892 C 532809,87202 532664,87216 531865,87061 z"
+ id="path5918"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 223440,86160 C 222858,85578 223662,83800 224508,83800 C 224996,83800 224912,85926 224413,86193 C 223914,86460 223734,86454 223440,86160 z"
+ id="path5920"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 255750,81803 C 255087,81107 255030,80305 255621,79989 C 256463,79538 259026,79647 259750,80164 C 261132,81150 260237,82049 258198,81723 C 257544,81618 257380,81664 257201,81999 C 256904,82554 256400,82485 255750,81803 z"
+ id="path5922"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 304872,74900 C 304671,74376 304962,74000 305569,74000 C 306227,74000 306702,74445 306529,74897 C 306372,75306 305029,75308 304872,74900 z"
+ id="path5924"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 600400,55870 C 600235,55815 599920,55691 599700,55594 C 599480,55497 598985,55281 598600,55113 C 598215,54945 597738,54694 597539,54554 C 597237,54341 597147,54356 596984,54642 C 596877,54830 596480,55042 596102,55113 C 595724,55184 595310,55367 595183,55521 C 594779,56008 593144,55375 591993,54287 C 591714,54023 591195,53749 590839,53678 C 590070,53524 589000,52285 589000,51548 C 589000,50788 587573,49857 586886,50170 C 586083,50536 585658,50443 585200,49800 C 584614,48977 584100,49034 582510,50101 L 581167,51001 L 579234,51041 C 577595,51075 577258,51139 577025,51460 C 576682,51933 575184,51774 574434,51184 C 573948,50801 573776,50824 573160,51352 C 572668,51774 570322,51888 570004,51505 C 569870,51343 569447,51152 569064,51080 C 568681,51008 568324,50835 568270,50694 C 568216,50554 567866,50382 567492,50312 C 567117,50241 566728,50036 566627,49855 C 566394,49439 564463,49481 563987,49912 C 563565,50294 561041,50305 560495,49928 C 560229,49745 559192,49621 557332,49552 C 554922,49463 554491,49395 553991,49025 C 553604,48739 553120,48600 552513,48600 C 551167,48600 550818,48005 551287,46514 C 551619,45459 551468,44600 550952,44600 C 550868,44600 550636,44436 550436,44236 C 549166,42966 546110,42944 544991,44196 C 544730,44489 544294,44543 542159,44546 L 539635,44551 L 538818,45434 L 538000,46318 L 535750,46276 C 534043,46244 533337,46310 532827,46550 C 532206,46843 532139,46841 531967,46534 C 531724,46100 531034,46107 530546,46549 C 530231,46834 529751,46901 527930,46918 C 518640,47003 514708,47208 514116,47638 C 513636,47986 513435,48025 512988,47857 C 512379,47627 509025,49095 508143,49977 C 508020,50100 507809,50200 507673,50200 C 507537,50200 507173,50311 506863,50447 C 506268,50709 506098,50717 500057,50787 C 495642,50838 494200,50630 493397,49828 C 493107,49538 492516,49129 492085,48920 C 491653,48710 491054,48414 490754,48261 C 490354,48057 490103,48038 489817,48191 C 489233,48504 488576,48444 488113,48037 C 487255,47282 485251,47008 480000,46930 C 477006,46885 476392,46740 475329,45821 C 475124,45644 474629,45500 474229,45500 C 473684,45500 473454,45396 473318,45087 C 473145,44692 472999,44675 470018,44716 C 468137,44742 466639,44671 466242,44536 C 465773,44378 465485,44375 465242,44527 C 465045,44650 463661,44750 461975,44762 C 459366,44782 458971,44830 458323,45213 C 457559,45664 456800,45627 456200,45111 C 455427,44445 453264,43982 452630,44346 C 452057,44675 452000,44671 451145,44244 C 450656,44000 450083,43800 449870,43800 C 449658,43800 449128,43617 448692,43393 C 448213,43147 447713,43032 447426,43103 C 447154,43170 446814,43102 446626,42944 C 445797,42243 444525,42000 441682,42000 C 439525,42000 438787,41932 438488,41706 C 437989,41329 436719,41316 436412,41685 C 436167,41981 433600,42152 427900,42254 C 425748,42292 425233,42360 424912,42650 C 424662,42876 424200,43000 423609,43000 C 423072,43000 422382,43167 421937,43406 C 421083,43863 417545,43958 417029,43537 C 416880,43416 416168,43255 415447,43181 C 414509,43084 414045,42935 413818,42658 C 413531,42309 413274,42278 411200,42334 C 409935,42368 407730,42309 406300,42203 C 403192,41973 400160,41942 398454,42123 C 397344,42240 397170,42209 396854,41836 C 396345,41234 391903,41115 391481,41692 C 391034,42303 383825,42443 382458,41867 C 382012,41679 381001,41528 380000,41500 C 378971,41471 377905,41308 377300,41088 C 376664,40857 375718,40720 374700,40712 C 373820,40706 372988,40627 372850,40538 C 372713,40449 372489,40445 372352,40530 C 371984,40757 368339,40774 368053,40549 C 367916,40442 367646,40427 367453,40514 C 366829,40795 364922,40784 364600,40498 C 364000,39964 362536,39606 361468,39731 C 360559,39836 360403,39800 360169,39425 C 360023,39191 359719,39000 359494,39000 C 359269,39000 358732,38820 358300,38600 C 357868,38380 357223,38200 356865,38200 C 356414,38200 356147,38074 355995,37790 C 355836,37494 355660,37417 355359,37513 C 354958,37640 354119,37451 352563,36883 C 352073,36704 351216,36640 350011,36692 C 348381,36762 348177,36731 347992,36385 C 347858,36135 347573,36000 347180,36000 C 346846,36000 346420,35918 346232,35817 C 346021,35704 345527,35718 344933,35854 L 343975,36073 L 343237,35274 C 342398,34363 340730,32979 340026,32609 C 339684,32430 339009,32399 337605,32500 C 335949,32618 335640,32593 335539,32331 C 335474,32161 335100,31962 334707,31888 C 333966,31749 332000,30144 332000,29678 C 332000,29505 331600,29440 330650,29458 C 329176,29487 328210,29111 327129,28086 C 326584,27569 326490,27550 324990,27653 C 323494,27756 323405,27738 323103,27277 C 322847,26886 322714,26832 322406,26997 C 321833,27304 321216,27243 320516,26810 C 320004,26493 319469,26412 317692,26379 C 315742,26343 315445,26290 315000,25895 C 314632,25567 314132,25414 313104,25315 C 312279,25235 311566,25050 311359,24863 C 311065,24596 310600,24561 308455,24644 C 306784,24708 305781,24667 305551,24523 C 305290,24360 305093,24371 304781,24566 C 304385,24813 302767,24774 301190,24481 C 300840,24415 300501,24539 300113,24872 C 299418,25469 297033,25493 295722,24914 C 294673,24452 288253,24588 287488,25090 C 286960,25436 286149,25493 285637,25221 C 285435,25114 284859,25123 284200,25244 C 283595,25355 282680,25459 282166,25473 C 281483,25493 281096,25628 280726,25975 C 280331,26347 280098,26420 279660,26309 C 279352,26231 278920,26176 278700,26187 C 276148,26312 275745,26365 275604,26594 C 275411,26906 273510,27235 272853,27070 C 272573,27000 272246,27072 272042,27248 C 271579,27648 270480,28000 269695,28000 C 269340,28000 268948,28122 268824,28271 C 268689,28434 267951,28597 266983,28677 C 266095,28751 265172,28940 264932,29097 C 264693,29254 264318,29386 264098,29391 C 262610,29422 261943,29551 261783,29837 C 261648,30079 261241,30164 260102,30192 C 257778,30248 257539,30285 256948,30680 C 256558,30940 256209,31012 255765,30923 C 255004,30771 254015,31295 254379,31659 C 254500,31780 254600,32017 254600,32185 C 254600,32487 256151,33999 256461,34000 C 256737,34000 257408,35742 257282,36131 C 256925,37232 256725,37600 256484,37600 C 256134,37600 255200,39203 255200,39805 C 255200,40063 255002,40485 254760,40743 C 253774,41792 254506,43268 256594,44441 C 257468,44932 257364,45438 256184,46433 C 255274,47201 255181,47353 255289,47895 C 255555,49226 258913,53200 259772,53200 C 260257,53200 262200,54340 262200,54624 C 262200,55728 261044,56043 259352,55400 C 258576,55105 258053,55033 257358,55125 C 256606,55224 256272,55164 255697,54825 C 255301,54591 254785,54400 254549,54400 C 254314,54400 253767,54154 253333,53854 C 252667,53392 252356,53312 251323,53336 C 250352,53359 250026,53286 249742,52983 C 249502,52726 249114,52600 248560,52600 C 247797,52600 246600,51742 246600,51196 C 246600,51124 245832,51053 244893,51039 C 242990,51012 242853,50966 242591,50277 C 242490,50011 242188,49709 241920,49608 C 241652,49506 241351,49277 241252,49099 C 241099,48827 240988,48814 240536,49020 C 238675,49868 236370,47474 237133,45487 C 237491,44554 235278,43469 234503,44197 C 234130,44548 233799,44595 231690,44595 C 230376,44595 228931,44596 228481,44597 C 227914,44599 227550,44476 227300,44200 C 227101,43980 226814,43800 226662,43800 C 226367,43800 225926,43549 224230,42415 C 223642,42022 222922,41576 222630,41425 C 220618,40380 220448,38400 222370,38400 C 222856,38400 223063,38281 223235,37903 C 223622,37053 224362,36714 225900,36681 C 228281,36630 228633,36485 228478,35624 C 228308,34685 228304,34682 227531,34962 C 227168,35093 226681,35200 226448,35200 C 226214,35200 225975,35279 225915,35376 C 225855,35473 225107,35611 224253,35683 C 223399,35755 222160,35938 221500,36090 C 218669,36740 218260,36789 216900,36646 L 215500,36499 L 215518,35636 C 215536,34795 215523,34777 215018,34936 C 213925,35282 211745,35094 211435,34628 C 211279,34392 211034,34200 210890,34200 C 210747,34200 210465,33993 210265,33741 C 209712,33045 209493,32975 208871,33300 C 208557,33464 208184,33598 208043,33599 C 207902,33599 207587,33724 207343,33876 C 206726,34261 205326,34438 204720,34208 C 204298,34047 204105,34106 203571,34555 C 202959,35070 202832,35094 200914,35066 C 199549,35046 198803,35117 198600,35288 C 198225,35602 196696,35983 195900,35960 C 195570,35950 194940,36104 194500,36302 C 193788,36622 192990,36665 187257,36690 C 180907,36717 180807,36724 180344,37159 C 180086,37401 179699,37600 179485,37600 C 179271,37600 178990,37770 178860,37978 C 178724,38196 178301,38403 177862,38466 C 177443,38527 176560,38684 175900,38815 C 175240,38946 173845,39041 172800,39026 C 171755,39010 170376,38999 169736,39001 C 169035,39002 168406,38887 168155,38711 C 167865,38508 167630,38477 167384,38609 C 166961,38835 165066,37989 163150,36719 C 162295,36152 162792,34421 163934,33987 C 164683,33702 164694,33285 163976,32429 C 163426,31775 163241,31671 162875,31810 C 162632,31902 161297,31923 159906,31858 C 157519,31745 157373,31760 157277,32126 C 157167,32549 154165,34213 153529,34205 C 153325,34202 152890,34425 152564,34700 C 152114,35078 151740,35200 151029,35200 C 150512,35200 149903,35330 149675,35490 C 148885,36043 147357,35123 147437,34142 C 147539,32894 144698,32063 143661,33037 C 143226,33445 142987,33476 140047,33504 C 137925,33524 136742,33617 136420,33789 C 136060,33982 135765,33993 135221,33832 C 133949,33458 132870,33396 131772,33637 C 131182,33766 130174,33851 129531,33827 C 128808,33799 128243,33881 128050,34041 C 127846,34210 127109,34301 125919,34303 C 124699,34306 123935,34402 123600,34597 C 123268,34789 122427,34898 121100,34922 C 118604,34966 117285,35157 116984,35519 C 116583,36003 113288,35907 112854,35400 C 112665,35180 112317,35000 112079,35000 C 111821,35000 111434,34720 111116,34303 C 110329,33272 110112,33211 107900,33400 C 106810,33493 105778,33498 105609,33410 C 105439,33322 104805,33336 104200,33442 C 102361,33762 101887,33714 101122,33130 C 100278,32487 96850,32305 94300,32769 C 93530,32909 92495,33072 92000,33131 C 91505,33190 91014,33320 90910,33419 C 90642,33674 89451,33645 89287,33380 C 88932,32805 87731,32584 84851,32562 C 81966,32541 81917,32533 81108,31963 C 80362,31437 80055,31366 77694,31172 C 75961,31030 74991,30862 74770,30667 C 74445,30379 73225,30287 67500,30122 C 65954,30077 65302,29968 64629,29640 C 63846,29259 61921,28889 60000,28750 C 59451,28711 59287,28605 59238,28262 C 59070,27086 57036,26045 55994,26603 C 55735,26742 55184,26736 54257,26585 C 53217,26416 52760,26422 52300,26610 C 51215,27055 49219,27003 48766,26519 C 48400,26128 48361,26123 48177,26450 C 47957,26841 46124,26962 45900,26600 C 45832,26490 45584,26400 45349,26400 C 45114,26400 44563,26153 44125,25850 L 43328,25300 L 39586,25300 C 36389,25300 35790,25252 35472,24969 C 35162,24694 34792,24657 33262,24746 C 31630,24842 31344,24806 30701,24427 C 29567,23758 7765,23755 6915,24424 C 6467,24776 6212,24827 5415,24721 C 4690,24625 4394,24666 4207,24891 C 3942,25211 3468,25313 1350,25508 L 0,25632 L 0,12816 L 0,0 L 384000,0 L 768000,0 L 768000,12476 L 768000,24951 L 767350,25225 C 766877,25424 765724,25494 763124,25484 C 759602,25471 759540,25478 759065,25953 C 758512,26506 756721,26446 756261,25859 C 755910,25410 754277,25270 753845,25652 C 753169,26249 748811,26593 748000,26113 C 746758,25378 746554,25352 745636,25811 C 745077,26090 744393,26246 743732,26245 C 743114,26245 742402,26396 741958,26622 C 741550,26830 741037,27000 740819,27000 C 739603,27000 739535,28520 740700,29669 C 741195,30157 741600,30696 741600,30868 C 741600,31131 741902,31175 743524,31151 C 745062,31128 745494,31185 745677,31435 C 745967,31831 747115,32099 747293,31812 C 747499,31479 747972,31563 748346,32000 C 748535,32220 748844,32400 749033,32400 C 749222,32400 749432,32490 749500,32600 C 749574,32720 750054,32750 750694,32675 C 751644,32563 751795,32597 752031,32975 C 752187,33225 752503,33400 752798,33400 C 753086,33400 753627,33691 754067,34083 C 754489,34458 755101,34876 755427,35011 C 757089,35700 757030,38200 755352,38200 C 755135,38200 754510,38425 753963,38700 C 753415,38975 752651,39200 752265,39200 C 751857,39200 751342,39374 751035,39615 C 750620,39942 750283,40017 749462,39965 C 748643,39914 748362,39976 748159,40254 C 747952,40536 747533,40623 746100,40683 C 745047,40726 743885,40908 743300,41119 C 742464,41422 741640,41483 738271,41491 C 734766,41499 734193,41544 733866,41840 C 733659,42028 733087,42244 732595,42321 C 732103,42397 731485,42627 731223,42830 C 730686,43246 730158,43299 729586,42992 C 729302,42841 728946,42870 728260,43103 C 727706,43291 727030,43376 726611,43309 C 726220,43247 725773,43278 725618,43379 C 725443,43493 725158,43481 724863,43347 C 724515,43188 724327,43193 724155,43365 C 724026,43494 723702,43600 723436,43600 C 723170,43600 722645,43870 722269,44200 C 721894,44530 721387,44801 721143,44801 C 720899,44802 720442,44937 720127,45101 C 719419,45471 719216,45474 718816,45124 C 718164,44553 717659,44554 717126,45128 C 716690,45599 716555,45644 716142,45455 C 715852,45323 715552,45308 715382,45416 C 715227,45514 714735,45595 714288,45597 C 713842,45599 713302,45732 713088,45894 C 712875,46055 712518,46190 712295,46194 C 712071,46197 711672,46352 711408,46537 C 710709,47027 708094,47036 707655,46550 C 707237,46089 706746,46107 706300,46600 C 706101,46820 705738,47000 705493,47000 C 705249,47000 704931,47142 704788,47315 C 704005,48258 702674,48573 701933,47990 C 701536,47678 701322,47628 701038,47780 C 700833,47890 700467,47928 700226,47865 C 699960,47795 699643,47880 699422,48080 C 699029,48436 693047,48926 691964,48691 C 691566,48604 691376,48671 691228,48949 C 691052,49277 690753,49326 688784,49353 C 686642,49381 686514,49407 685981,49918 C 685459,50418 685341,50445 684221,50318 C 683298,50214 682705,50275 681660,50584 C 680225,51007 677596,51049 674181,50701 C 672471,50528 670883,50900 670462,51575 C 670263,51893 670036,51938 668964,51869 C 665477,51647 663877,51727 662964,52169 C 661943,52663 661581,52701 661231,52351 C 661095,52215 660379,52042 659641,51969 C 658904,51895 657895,51744 657400,51634 C 656672,51471 656436,51491 656163,51736 C 655903,51969 655558,52009 654663,51909 C 654023,51837 653029,51781 652454,51784 C 651620,51787 651366,51710 651200,51400 C 651045,51110 650854,51039 650445,51121 C 649967,51217 649828,51117 649329,50329 C 648466,48964 647389,49042 645850,50581 C 644765,51666 644108,51426 644070,49930 C 644035,48516 641996,47324 641117,48203 C 641008,48312 640688,48400 640405,48400 C 638977,48400 638617,49441 639918,49805 C 641020,50114 641399,50704 641024,51528 C 640725,52182 638715,52103 637758,51399 C 637066,50890 636835,50897 636246,51450 C 635558,52095 632192,52050 631486,51387 C 631084,51009 630896,50979 629710,51106 C 628594,51226 628323,51193 627995,50896 C 627629,50564 627544,50563 626553,50871 C 624552,51495 621730,50908 620692,49651 C 620287,49162 617640,49267 616900,49802 C 616556,50050 614125,50768 613600,50776 C 611922,50801 610098,51205 609784,51621 C 609543,51941 609327,52025 608971,51936 C 608620,51847 608420,51922 608242,52207 C 608101,52433 607777,52600 607480,52600 C 607123,52600 606929,52730 606853,53019 C 606779,53304 606217,53690 605103,54221 C 603993,54751 603389,55166 603235,55502 C 603011,55995 601411,56203 600400,55870 z"
+ id="path5926"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="Land">
+ <g
+ transform="matrix(6.1000977e-4,0,0,-6.1064454e-4,-0.24375,234.24376)"
+ id="g6"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
+ <path
+ d="M 0,357500 L 0,331000 L 450,331003 C 698,331005 1123,331241 1395,331528 C 2302,332484 2614,332605 3562,332364 C 4142,332217 4565,332211 4861,332345 C 5753,332748 7593,332400 8946,331572 C 9737,331088 10453,330800 10865,330800 C 11227,330800 11698,330668 11912,330506 C 12125,330345 12475,330210 12689,330206 C 12903,330203 13331,329958 13640,329661 L 14202,329123 L 15114,330061 C 15616,330578 16145,331000 16289,331000 C 16433,331000 16662,331133 16797,331296 C 17187,331766 18123,332159 18632,332066 C 19222,331959 20200,332833 20200,333468 C 20200,334118 19827,334400 18967,334400 C 18456,334400 18153,334512 18024,334750 C 17702,335344 16464,335902 16114,335612 C 15785,335338 15400,335484 15400,335881 C 15400,336022 15220,336301 15000,336500 C 14780,336699 14600,336989 14600,337144 C 14600,337829 13575,339587 12801,340231 C 12015,340883 11978,340961 12146,341611 C 12386,342545 13670,342713 14598,341933 C 15276,341362 16765,341139 18800,341302 C 19515,341360 20712,341399 21459,341389 C 23473,341362 24911,342835 24091,344085 C 23791,344544 23805,344567 24641,344969 C 26590,345908 26985,345817 28565,344075 C 29195,343380 38688,343427 39640,344130 C 39991,344388 40420,344600 40594,344600 C 40769,344600 41113,344742 41360,344915 C 41935,345317 46754,345357 47382,344965 C 47709,344761 47843,344777 48155,345059 C 48731,345581 49035,345482 50068,344433 C 51214,343269 51011,342538 49784,343411 C 49176,343844 49135,343848 48572,343515 C 47992,343173 46000,342948 46000,343226 C 46000,343956 44454,344252 44046,343600 C 43903,343371 43580,343200 43290,343200 C 43012,343200 42450,343032 42042,342828 C 41605,342608 40809,342441 40106,342421 C 39227,342396 38801,342283 38493,341993 C 38263,341777 37880,341600 37643,341600 C 37395,341600 37022,341343 36763,340993 C 36451,340571 35990,340292 35247,340076 C 34660,339905 33949,339646 33667,339500 C 33385,339354 32602,339171 31927,339093 C 30657,338947 29600,338397 29600,337881 C 29600,337443 30594,337122 31230,337355 C 31676,337519 31839,337470 32267,337042 C 32639,336670 32967,336541 33496,336561 C 33973,336579 34256,336486 34333,336287 C 34517,335806 35807,335357 36633,335485 C 37482,335617 39059,334755 38955,334215 C 38787,333341 35672,333196 34353,334001 C 33504,334518 33105,334502 31929,333906 C 31157,333514 30778,333438 30078,333534 C 29322,333638 29131,333587 28735,333177 C 28482,332915 28109,332606 27908,332491 C 26940,331940 29604,329452 30707,329875 C 30877,329940 31185,329888 31391,329759 C 31681,329578 31987,329585 32733,329790 C 33655,330043 34680,330093 36367,329966 C 36963,329922 37279,330031 37782,330455 C 38583,331128 38839,331132 39932,330492 C 41386,329640 41053,328763 38975,327977 C 37142,327283 36747,327200 35282,327200 L 33861,327200 L 32803,326121 C 32220,325527 31464,324962 31122,324865 C 29952,324531 30775,322200 32063,322200 C 32230,322200 32723,321795 33158,321300 C 33724,320658 34103,320400 34482,320400 C 34775,320400 35241,320251 35519,320069 C 35990,319761 36073,319761 36719,320069 C 37854,320610 38609,319986 39078,318118 C 39271,317346 40028,317110 41471,317371 C 42306,317523 42913,317521 43589,317365 C 44283,317204 44878,317207 45818,317375 C 47153,317614 47996,317167 47999,316218 C 48001,315768 46256,314291 45028,313703 C 42687,312584 42539,312434 43062,311718 C 43457,311178 44489,311426 45931,312405 C 46672,312908 47328,313199 47721,313200 C 48105,313200 48547,313390 48881,313700 C 49178,313975 49582,314200 49779,314200 C 49977,314200 50291,314369 50478,314576 C 50665,314783 51160,315007 51578,315073 C 51997,315140 52680,315466 53097,315797 C 53586,316186 54084,316400 54501,316400 C 55534,316400 56168,317040 56239,318156 C 56295,319021 56361,319130 57032,319458 C 57435,319655 58018,320150 58327,320558 C 59709,322380 61000,322464 61000,320733 C 61000,319325 64753,318950 66431,320191 C 66735,320416 67028,320600 67083,320600 C 67506,320600 68302,321813 68396,322600 C 68515,323607 68423,323584 70398,323093 C 71272,322875 71982,322535 72575,322049 C 73059,321653 73645,321306 73877,321279 C 74110,321251 74705,321127 75200,321003 C 76868,320584 78091,320460 79891,320526 C 81491,320586 81730,320547 82132,320170 C 82473,319849 82732,319776 83199,319870 C 83545,319939 83980,319891 84189,319761 C 84474,319583 84826,319587 85687,319780 C 86809,320031 86813,320030 87513,319416 C 87898,319077 88335,318800 88482,318800 C 88630,318800 88863,318665 89000,318500 C 89137,318335 89381,318200 89542,318200 C 89704,318200 90000,317998 90200,317750 C 90675,317164 92538,317101 93145,317650 C 93634,318093 94174,318099 94341,317664 C 94426,317444 94320,317230 94035,317040 C 93440,316645 93489,316053 94209,314918 L 94818,313957 L 95726,314093 C 96449,314202 96684,314162 96877,313898 C 97010,313715 97427,313503 97803,313426 C 98373,313310 98509,313177 98621,312627 C 98695,312265 98941,311839 99167,311680 C 99394,311522 99780,311034 100027,310595 C 100355,310010 100664,309745 101187,309600 C 102227,309312 102389,309346 102600,309900 C 102999,310950 105600,309236 105600,307923 C 105600,307203 107050,305747 108117,305394 C 108493,305270 108800,305044 108800,304891 C 108800,304738 109205,304157 109700,303600 C 110195,303043 110600,302507 110600,302409 C 110600,302312 110866,302173 111191,302102 C 111909,301944 112167,301317 111718,300820 C 111080,300115 111300,299200 112107,299200 C 112679,299200 112977,299033 113661,298330 C 114331,297640 114697,297431 115427,297321 C 116847,297108 118908,295088 119075,293747 C 119140,293222 119339,292510 119518,292165 C 119984,291265 120011,285968 119553,285451 C 118983,284806 118688,282901 119068,282321 C 119248,282046 119359,281704 119314,281560 C 118915,280280 119015,278012 119497,277440 C 119774,277111 120000,276665 120000,276448 C 120000,276231 120180,275825 120400,275545 C 120620,275266 120800,274953 120800,274850 C 120800,274747 121477,273955 122304,273090 C 123319,272027 123873,271270 124011,270758 C 124124,270341 124299,270000 124401,270000 C 124504,270000 124714,269757 124870,269460 C 125182,268865 126051,267832 127350,266514 C 127818,266040 128200,265540 128200,265404 C 128200,265230 128403,265194 128872,265282 C 129343,265370 129618,265320 129789,265114 C 129923,264952 130453,264758 130966,264682 C 131488,264605 132150,264336 132465,264072 C 132776,263812 133112,263600 133212,263600 C 133311,263600 133454,263353 133530,263050 C 133740,262206 134556,260768 135002,260456 C 135282,260260 135367,260039 135286,259717 C 135216,259438 135291,259138 135476,258953 C 135643,258785 135840,258410 135913,258119 C 135986,257828 136205,257504 136400,257400 C 136595,257296 136809,256993 136875,256728 C 136942,256462 137335,255958 137748,255608 C 138162,255259 138680,254814 138900,254621 C 139120,254428 139593,254100 139950,253892 C 140628,253498 140758,253048 140373,252431 C 139959,251769 140338,249849 140962,249445 C 141254,249255 141660,248935 141864,248733 C 142123,248476 142389,248404 142746,248494 C 143620,248713 144556,247615 144718,246181 C 144844,245069 145825,243800 146559,243800 C 146659,243800 146984,243575 147281,243300 C 147578,243025 147945,242800 148097,242800 C 148249,242800 148565,242530 148800,242200 C 149227,241600 150225,241355 150491,241785 C 150691,242109 150148,243005 149680,243123 C 149393,243195 149038,243611 148704,244268 C 148415,244836 147813,245705 147366,246200 C 146919,246695 146301,247640 145994,248300 C 145686,248960 145157,249809 144817,250186 C 144478,250563 144200,250992 144200,251138 C 144200,251284 144011,251561 143779,251752 C 143548,251943 143138,252444 142868,252864 C 142597,253285 142112,253721 141788,253834 C 141465,253947 141200,254153 141200,254293 C 141200,254432 141026,254768 140812,255039 C 140599,255310 140363,255778 140287,256080 C 140212,256381 139981,256733 139775,256862 C 138931,257389 139982,259000 141169,259000 C 142060,259000 143000,258132 143000,257309 C 143000,256949 143164,256439 143365,256177 C 143566,255915 144034,255160 144406,254500 C 145059,253340 145642,252724 146488,252296 C 146710,252184 146984,251914 147096,251696 C 147404,251097 148303,250274 149260,249713 C 150343,249078 150916,248306 151138,247183 C 151276,246484 151436,246242 151906,246020 C 152233,245867 152815,245507 153200,245220 C 153585,244934 154339,244475 154876,244200 C 155550,243855 155938,243497 156131,243045 C 156284,242685 156753,242055 157173,241645 C 157593,241235 157993,240668 158063,240385 C 158133,240102 158436,239517 158736,239085 C 159230,238375 159280,238142 159259,236640 C 159240,235209 159290,234947 159619,234742 C 159836,234606 160000,234279 160000,233979 C 160000,233412 161201,232400 161874,232400 C 162067,232400 162444,232141 162710,231825 C 163240,231195 164901,230320 166000,230093 C 166385,230014 166878,229825 167095,229674 C 167311,229524 167747,229400 168063,229400 C 168379,229400 168866,229220 169145,229000 C 169425,228780 169824,228600 170031,228600 C 170239,228600 170799,228240 171277,227800 C 171754,227360 172285,227000 172457,227000 C 172629,227000 173040,226772 173372,226493 C 173825,226111 174104,226018 174498,226117 C 174889,226216 175146,226133 175509,225792 C 176224,225119 178959,224959 179554,225554 C 180886,226886 184761,226235 186000,224471 C 186275,224080 186660,223611 186855,223430 C 187050,223248 187420,222898 187678,222650 C 187935,222403 188227,222200 188327,222200 C 188426,222200 188837,221976 189240,221702 C 189767,221344 190131,221236 190541,221318 C 190960,221402 191208,221323 191486,221016 C 191696,220784 192109,220600 192421,220600 C 192739,220600 193211,220385 193517,220101 C 193997,219657 194170,219617 195112,219727 C 196463,219886 197125,219715 197445,219124 C 197768,218528 200932,215800 201301,215800 C 201754,215800 201854,215412 201529,214915 C 200945,214025 201704,212303 202594,212499 C 202976,212583 203227,212501 203493,212208 C 203696,211983 204025,211800 204224,211800 C 204423,211800 204676,211632 204785,211427 C 204895,211223 205244,210947 205561,210816 C 205887,210681 206260,210299 206419,209939 C 206689,209324 206753,209296 208111,209200 C 209406,209108 209588,209038 210311,208352 C 210745,207940 211259,207603 211453,207602 C 211647,207601 211990,207488 212215,207350 C 212712,207047 213195,207553 213207,208388 C 213242,210833 216022,210680 217266,208164 C 217665,207359 218067,206565 218162,206400 C 219047,204847 219154,204303 218786,203245 C 218611,202744 218636,202530 218921,202096 C 219255,201586 219254,201532 218904,200882 C 218555,200233 218554,200182 218887,199815 C 219429,199216 218513,197600 217631,197600 C 217206,197600 216000,196403 216000,195981 C 216000,195597 215577,195030 214152,193501 C 213401,192696 212959,192033 212875,191585 C 212803,191208 212637,190765 212506,190600 C 211501,189341 211197,187979 211747,187195 C 213035,185357 213098,184486 212010,183555 C 211042,182727 210703,181955 211034,181337 C 211163,181097 211255,180397 211238,179781 L 211207,178662 L 212823,177089 C 213727,176210 214669,175072 214959,174508 C 215245,173954 215586,173434 215716,173353 C 215847,173272 216015,172794 216091,172291 C 216166,171788 216357,171327 216514,171267 C 216693,171198 216800,170871 216800,170390 C 216800,169835 216917,169541 217223,169326 C 217718,168980 218400,167919 218400,167497 C 218400,167335 218580,167091 218800,166954 C 219042,166803 219200,166487 219200,166157 C 219200,165794 219368,165499 219696,165284 C 220434,164801 220985,163796 220862,163159 C 220790,162791 220892,162446 221178,162082 C 221410,161787 221600,161426 221600,161279 C 221600,160623 225067,157577 226111,157315 C 226433,157234 226742,157097 226798,157010 C 226854,156922 227583,156532 228418,156142 C 230649,155101 233600,152651 233600,151840 C 233600,151560 233726,151189 233880,151016 C 234276,150570 234614,149204 234423,148821 C 234335,148645 234288,147524 234317,146331 C 234363,144482 234314,144069 233986,143531 C 233775,143184 233601,142538 233601,142095 C 233600,141651 233456,141084 233281,140833 C 233033,140480 232973,139963 233015,138539 C 233044,137527 232997,136362 232911,135948 C 232803,135430 232834,135100 233009,134889 C 233201,134657 233207,134527 233032,134352 C 232904,134224 232800,133888 232800,133604 C 232800,133321 232614,132930 232387,132736 C 232009,132411 231979,132194 232028,130097 C 232077,127978 232049,127778 231641,127343 C 231398,127085 231197,126700 231193,126487 C 231189,126274 231063,125878 230913,125607 C 230673,125173 230684,125056 231004,124649 C 231291,124285 231347,123961 231264,123142 C 231170,122207 231212,122050 231679,121615 C 232339,121001 232346,120276 231702,119403 C 231421,119022 231149,118310 231077,117767 C 231007,117239 230826,116704 230675,116579 C 230524,116454 230400,116097 230400,115787 C 230400,115477 230303,115163 230183,115090 C 230064,115016 229797,114560 229590,114077 C 229383,113594 228796,112793 228287,112297 C 227407,111442 227366,111354 227474,110548 C 227537,110082 227667,109115 227762,108400 C 227857,107685 228001,106951 228082,106768 C 228181,106543 227997,106124 227512,105468 C 227117,104936 226657,104185 226488,103800 C 226320,103415 226083,102902 225963,102660 C 225800,102333 225807,102065 225993,101617 C 226205,101105 226194,100966 225921,100693 C 225536,100308 225509,99796 225850,99349 C 226166,98935 227112,98695 227290,98984 C 227499,99323 227764,99240 228097,98733 C 228555,98033 228161,97079 227232,96641 C 226435,96265 226275,95915 226091,94151 C 225996,93239 225851,92881 225386,92417 C 224684,91715 224640,91276 225250,91089 C 226494,90706 226710,89713 225699,89024 C 225314,88763 225000,88425 225000,88274 C 225000,88123 224817,88000 224594,88000 C 224127,88000 223848,87472 224153,87167 C 224296,87024 224482,87082 224751,87351 C 225240,87840 226200,88111 226200,87761 C 226200,87626 225953,87318 225651,87077 C 225111,86646 225108,86633 225478,86225 C 225945,85708 225836,84117 225306,83729 C 224689,83278 224973,82288 225700,82355 C 226373,82417 227664,80277 227841,78805 C 227874,78527 228103,78209 228364,78080 C 229203,77663 229501,77043 229085,76583 C 228846,76319 228796,76124 228931,75989 C 229192,75728 229800,75960 229800,76321 C 229800,76616 230042,76691 230267,76466 C 230341,76393 230255,76171 230076,75974 C 229599,75447 229865,74997 230644,75013 C 232292,75048 233401,74766 233522,74283 C 233710,73534 234140,73284 234569,73672 C 235093,74146 235365,74077 235437,73450 C 235523,72702 236383,72584 236990,73236 C 237261,73527 237470,73617 237559,73483 C 238048,72747 241251,72613 241570,73314 C 241748,73705 241884,73751 242588,73656 C 243641,73515 243726,74059 242716,74481 C 242339,74638 241880,74997 241696,75278 C 241491,75591 241096,75839 240677,75917 C 239894,76064 238901,76909 238609,77677 C 238488,77995 238257,78200 238019,78200 C 237443,78200 237037,78702 237147,79278 C 237207,79592 237085,79999 236821,80370 C 236335,81053 236269,81907 236690,82068 C 236849,82129 237075,82522 237192,82940 C 237363,83546 237575,83781 238242,84100 C 238898,84414 239216,84758 239714,85694 C 240211,86627 240483,86922 240960,87046 C 242727,87504 244166,90003 242850,90328 C 242548,90403 241985,90674 241600,90932 C 241215,91189 240563,91626 240150,91902 C 238956,92704 239096,93258 240673,93973 C 241373,94291 242008,94651 242085,94775 C 242161,94899 242614,95000 243091,95000 C 244168,95000 245320,95920 245134,96631 C 245055,96933 245166,97173 245511,97444 C 245795,97668 246000,98037 246000,98326 C 246000,98734 246192,98907 247082,99300 C 248757,100041 248814,100667 247275,101412 C 246138,101963 245810,102580 246276,103292 C 246715,103961 247611,103965 248482,103300 C 249433,102575 249993,102654 250960,103650 C 251413,104118 251923,104616 252092,104758 C 252445,105054 252495,105849 252195,106409 C 251753,107236 252323,107597 254098,107613 C 255596,107627 256988,107689 257537,107767 C 257667,107785 257832,107984 257903,108210 C 258016,108565 258143,108603 258867,108495 C 260180,108299 260795,108673 262785,110880 C 263755,111956 263908,113534 263113,114270 C 262712,114642 262569,114981 262540,115633 L 262500,116500 L 265400,116502 C 268552,116503 269611,116877 269917,118096 C 269978,118340 270308,118666 270649,118820 C 270991,118974 271367,119267 271485,119471 C 271603,119675 271937,120101 272228,120418 C 272518,120735 272810,121212 272877,121478 C 273083,122299 274364,124068 275061,124495 C 276160,125167 276729,125684 277059,126307 C 277232,126633 277997,127548 278759,128340 C 279870,129493 280172,129943 280276,130598 C 280352,131071 280542,131467 280728,131538 C 280995,131641 281028,131871 280923,132894 C 280765,134428 281051,136003 281641,136851 C 282323,137834 283250,138800 283511,138800 C 283639,138800 284153,139160 284653,139600 C 285357,140220 285725,140400 286289,140400 C 286689,140400 287283,140580 287608,140800 C 287934,141020 288451,141369 288759,141576 C 289419,142019 291098,142313 292500,142231 C 293619,142166 296400,143731 296400,144426 C 296400,144608 296535,144809 296700,144872 C 296865,144936 297000,145201 297000,145463 C 297000,145724 297180,146101 297400,146300 C 297620,146499 297800,146823 297800,147019 C 297800,147216 297885,147429 297989,147493 C 298264,147663 299400,149383 299400,149628 C 299400,149742 299603,150000 299850,150200 C 300125,150423 300310,150805 300325,151182 C 300339,151522 300361,152115 300375,152500 C 300391,152951 300499,153200 300677,153200 C 301041,153200 301187,153812 301056,154786 C 300975,155395 301047,155697 301375,156114 C 301870,156743 301930,157644 301500,158000 C 301119,158316 301115,158880 301491,159192 C 301707,159372 301771,159833 301741,160980 C 301701,162482 301719,162546 302350,163179 C 302708,163537 303000,163919 303000,164026 C 303000,164133 303270,164315 303600,164430 C 304070,164594 304200,164758 304200,165189 C 304200,165491 304378,165899 304595,166095 C 304812,166292 305182,166851 305418,167337 C 305653,167823 306083,168374 306373,168560 C 307070,169010 309000,170906 309000,171142 C 309000,171244 309225,171524 309500,171763 C 309817,172038 310000,172408 310000,172774 C 310000,173091 310125,173455 310278,173582 C 310828,174038 310885,175587 310377,176273 C 310050,176716 309917,177179 309906,177919 C 309879,179687 308335,181393 307023,181105 C 306697,181033 306237,181109 305888,181291 C 305564,181460 305139,181598 304941,181599 C 304744,181599 304069,182112 303441,182738 C 302814,183365 301895,184091 301400,184352 C 300905,184613 300383,184978 300241,185163 C 300028,185441 299616,185500 297909,185500 C 296072,185500 295766,185551 295226,185950 C 294711,186330 294363,186400 292990,186400 C 291668,186400 291264,186476 290832,186803 C 290539,187025 290120,187341 289900,187505 C 289680,187669 289217,188028 288871,188302 C 288525,188576 288044,188800 287803,188800 C 287561,188800 287134,188980 286855,189200 C 286575,189420 286147,189600 285904,189600 C 285661,189600 285296,189783 285094,190007 C 284776,190358 284506,190409 283134,190380 C 281741,190350 281502,190397 281221,190758 C 281019,191018 280554,191221 279967,191305 C 278340,191541 277377,193062 278308,193925 C 278869,194445 278720,195154 278009,195340 C 277452,195485 276200,197115 276200,197694 C 276200,197979 276065,198264 275900,198328 C 275716,198398 275600,198701 275600,199109 C 275600,199914 273612,202200 272911,202200 C 272671,202200 272411,202391 272297,202650 C 272185,202906 271884,203129 271600,203168 C 271325,203205 270916,203405 270692,203613 C 270438,203848 270022,203981 269591,203965 C 268961,203941 268094,204150 266841,204626 C 266065,204920 265212,204821 264594,204364 L 264003,203927 L 263539,204364 C 263283,204604 262934,204800 262762,204800 C 262590,204800 262342,204929 262211,205087 C 262080,205245 261731,205429 261436,205496 C 260702,205663 259640,206664 259478,207342 C 259242,208332 257313,209600 256044,209600 C 254898,209600 254431,210583 254351,213162 C 254320,214166 254217,214800 254085,214800 C 253770,214800 253051,213964 252968,213500 C 252860,212899 252062,212875 251523,213456 C 249850,215261 246800,215417 246800,213697 L 246800,213269 L 244750,213753 C 242165,214364 240590,214516 240019,214210 C 239642,214009 239503,214054 239001,214538 C 236558,216900 234812,217461 233580,216281 C 232812,215545 232201,215758 232197,216763 C 232193,217616 232069,217851 231450,218177 C 231001,218413 230200,218194 230200,217834 C 230200,217437 228595,216000 228152,216000 C 227885,216000 227472,215770 227222,215482 C 226801,214998 226693,214973 225599,215100 C 224231,215259 223218,214501 223206,213311 C 223198,212483 222295,211253 221581,211096 C 221262,211026 220888,210812 220750,210621 C 220222,209888 219138,210011 218411,210887 C 218268,211059 217983,211200 217777,211200 C 217572,211200 217291,211380 217154,211600 C 216812,212146 215037,212144 213828,211596 C 213349,211378 212758,211200 212516,211200 C 212274,211200 211902,211068 211688,210906 C 210866,210284 210147,210554 208445,212124 C 207925,212604 207439,212997 207364,212998 C 206564,213010 205515,216304 206018,217222 C 206284,217707 206526,219232 206715,221609 C 206825,222988 205898,224800 205083,224800 C 204918,224800 204540,224979 204242,225198 C 203757,225554 203342,225601 200300,225637 C 196394,225684 195247,226160 196511,227209 C 197117,227712 197230,228162 196906,228788 C 196403,229761 196688,231280 197557,232257 C 197764,232489 197858,232919 197829,233491 C 197793,234170 197881,234460 198215,234771 C 199556,236021 198485,238400 196581,238400 C 195820,238400 195548,238311 195354,238000 C 195151,237676 194887,237600 193964,237600 C 193337,237600 192762,237501 192687,237380 C 192612,237258 192259,237037 191902,236888 C 191239,236611 190871,235768 191126,235105 C 191189,234941 191029,234547 190770,234231 C 190512,233914 190165,233452 190000,233203 C 189190,231980 189117,231937 187782,231900 C 187077,231881 186185,231724 185800,231552 C 184394,230924 182576,230891 181938,231482 C 181631,231767 181167,232000 180908,232000 C 180349,232000 178670,233882 178759,234408 C 178790,234593 178587,234893 178308,235076 C 178029,235259 177800,235534 177800,235687 C 177800,236022 176791,237600 176577,237600 C 176493,237600 176365,238000 176291,238488 C 176218,238976 175988,239530 175779,239719 C 175290,240161 175298,240708 175803,241349 C 176181,241830 176185,241885 175872,242231 C 175561,242574 175561,242625 175869,242966 C 176081,243200 176200,243679 176200,244297 C 176200,245011 176326,245428 176686,245899 C 177149,246507 177164,246617 177012,248291 C 176839,250185 177050,251372 177590,251540 C 178364,251781 178825,252112 179246,252730 C 179496,253097 179864,253398 180064,253399 C 180264,253399 180996,253805 181690,254300 C 183047,255269 183542,255365 185199,254983 C 186005,254797 186131,254819 186431,255188 C 186961,255844 188772,255442 189754,254450 C 190243,253957 190508,253889 190705,254208 C 190776,254323 191010,254360 191226,254292 C 191761,254122 192222,254543 192087,255079 C 191940,255667 193072,256115 193906,255798 C 194376,255619 194533,255655 194934,256031 C 195557,256617 199748,256690 200371,256126 C 200569,255947 201052,255800 201443,255800 C 201981,255800 202234,255678 202482,255300 C 202891,254675 203609,254649 204542,255226 L 205231,255652 L 205808,255226 C 206125,254992 206470,254800 206576,254800 C 207080,254800 207668,253365 207431,252711 C 207118,251845 207140,251066 207481,250935 C 207636,250876 207821,250560 207892,250234 C 207964,249908 208198,249483 208411,249290 C 208625,249096 208800,248852 208800,248748 C 208800,248643 209003,248310 209250,248007 C 209498,247704 209835,247259 210000,247019 C 210525,246253 211513,245790 212148,246012 C 213556,246503 214471,248845 213502,249480 C 213134,249721 213015,249934 213100,250200 C 213166,250408 213036,250937 212810,251381 C 212584,251823 212399,252300 212398,252442 C 212397,252584 212175,253150 211904,253700 C 211634,254250 211410,254980 211406,255323 C 211403,255666 211209,256189 210975,256486 C 210572,256998 210567,257063 210864,257763 C 211036,258168 211227,258680 211288,258900 C 211440,259449 213238,261400 213592,261400 C 213998,261400 215381,262380 216069,263155 C 216449,263584 216770,263773 216995,263702 C 217197,263637 217536,263782 217819,264054 C 218084,264307 218525,264627 218800,264765 C 221972,266356 222988,267803 222410,269911 C 221817,272072 221848,272324 222731,272533 C 223512,272718 224237,273491 224277,274181 C 224289,274408 224863,275173 225550,275880 C 226348,276701 226802,277334 226805,277633 C 226811,278159 227937,278800 228858,278800 C 229147,278800 229565,278994 229786,279231 C 230171,279644 231293,279850 233033,279826 C 233886,279814 234825,281849 234097,282129 C 233138,282497 234325,284400 235513,284400 C 235672,284400 235998,284625 236237,284900 C 236476,285175 236777,285400 236905,285400 C 237034,285400 237355,285588 237619,285817 C 237996,286144 238263,286209 238850,286115 C 239521,286008 239713,286087 240675,286871 C 242405,288280 245243,288353 243600,286946 C 243050,286476 243042,285099 243587,284807 C 244569,284281 246444,285154 247465,286611 C 247727,286985 247978,287045 249405,287078 C 250691,287107 251097,287189 251294,287458 C 251434,287650 251809,287800 252147,287800 C 254041,287800 256707,290204 255890,291175 C 255411,291745 254600,292034 254600,291636 C 254600,290678 251669,290113 250796,290903 C 250515,291158 250216,291222 249700,291139 C 248957,291018 247172,291756 246656,292397 C 246319,292817 246341,293872 246707,294747 C 247641,296982 244104,298914 242400,297100 C 241635,296285 241000,296421 241000,297400 C 241000,298079 241063,298200 241419,298200 C 241650,298200 242078,298371 242371,298579 C 243020,299042 246290,299130 246800,298698 C 246965,298559 247415,298378 247800,298297 C 248185,298215 248678,298025 248895,297874 C 249111,297724 249726,297600 250260,297600 L 251232,297600 L 251100,298200 C 250943,298915 250708,298868 254200,298811 L 256900,298766 L 257750,299426 C 258218,299789 258600,300156 258600,300243 C 258600,300329 258829,300400 259110,300400 C 259396,300400 259822,300619 260082,300900 C 260675,301539 261328,301536 261927,300890 C 262555,300212 262526,300058 261707,299716 C 261226,299515 260973,299254 260878,298863 C 260730,298253 260164,297348 259511,296679 C 259285,296448 258766,295901 258359,295465 L 257617,294671 L 258129,293951 L 258642,293231 L 261771,293222 L 264900,293213 L 265521,292507 C 266252,291676 266226,291680 267342,292220 C 268438,292751 269035,292612 269573,291701 C 269800,291316 270112,291000 270266,291000 C 270655,291000 271600,291773 271600,292090 C 271600,292234 271803,292487 272050,292653 L 272500,292955 L 272078,293531 C 271846,293848 271595,294300 271520,294536 C 271446,294771 271253,295073 271092,295206 C 270932,295340 270800,295609 270800,295805 C 270800,296468 269594,297600 268888,297600 C 268536,297600 268137,297735 268000,297900 C 267840,298093 267397,298200 266762,298200 C 264978,298200 264316,299333 265500,300363 C 266081,300868 266103,300988 265706,301512 C 265328,302012 265328,303388 265706,303888 C 266273,304637 264567,307200 263503,307200 C 263221,307200 262599,307625 261885,308306 C 260725,309412 260069,309746 259494,309526 C 259096,309373 256630,310302 256091,310808 C 255862,311024 255542,311200 255380,311200 C 254947,311200 253861,312710 253708,313526 C 253600,314101 252958,314842 250251,317516 C 246561,321160 246279,321314 245391,320165 C 244436,318931 242921,317600 242470,317600 C 242224,317600 241899,317424 241748,317208 C 241276,316534 239994,316465 239415,317083 C 239148,317367 238770,317600 238573,317600 C 237385,317600 235800,319434 235800,320808 C 235800,321658 234792,322400 233638,322400 C 232713,322400 232449,322476 232246,322800 C 232109,323020 231912,323200 231808,323200 C 231577,323200 229855,324349 229693,324611 C 229629,324715 229315,324800 228995,324800 C 228619,324800 228339,324941 228200,325200 C 227897,325766 226338,325766 225854,325200 C 225417,324690 225105,324695 224581,325219 C 224200,325600 224021,325626 222604,325500 C 221553,325407 221003,325434 220912,325581 C 220588,326104 219057,325826 218293,325107 L 217558,324413 L 217698,323021 C 217797,322033 217949,321527 218219,321283 C 218830,320730 218722,319714 217997,319198 C 216502,318133 216913,316848 219148,315602 C 219614,315342 220054,314944 220126,314718 C 220198,314492 220436,314065 220656,313767 C 221120,313139 221020,312120 220449,311664 C 219740,311097 218601,310400 218386,310400 C 218263,310400 217933,310219 217651,309998 C 217370,309776 216795,309540 216374,309473 C 215033,309258 214625,307292 215636,305914 C 217038,304002 215631,301547 213447,302095 C 212907,302231 211409,303389 211404,303676 C 211402,303773 211018,304234 210550,304701 C 208973,306278 208987,306252 209125,307253 C 209416,309379 208045,310326 204600,310376 C 203047,310399 202601,310477 202158,310802 C 201793,311070 201300,311200 200646,311200 C 200103,311200 199506,311329 199288,311494 C 199075,311655 198710,311790 198477,311794 C 198244,311797 197839,311967 197577,312172 C 196572,312956 194468,313825 193911,313685 C 193511,313585 193279,313655 192992,313962 C 192549,314438 191107,314713 190150,314503 C 188400,314120 186800,314757 186800,315837 C 186800,316547 185574,317552 184267,317915 C 182640,318365 181967,319151 182473,320009 C 182653,320313 182800,320673 182800,320808 C 182800,321363 186786,325590 187314,325595 C 187938,325602 189671,326213 189912,326512 C 190029,326656 190374,326836 190678,326912 C 190983,326989 191326,327259 191442,327512 C 191739,328165 192424,328365 194633,328446 L 196566,328517 L 197591,329509 C 198154,330054 198667,330705 198731,330955 C 198866,331488 199366,331800 200087,331800 C 200661,331800 200770,331390 200300,331000 C 200135,330863 200000,330596 200000,330406 C 200000,330216 199816,329849 199590,329589 C 198879,328768 199115,327734 200049,327584 C 200461,327518 200956,327326 201149,327158 C 201462,326886 202353,326591 202900,326580 C 203624,326564 204761,327076 205410,327710 C 206292,328571 208420,328806 209172,328125 C 209370,327946 209609,327800 209705,327800 C 209800,327800 210137,327553 210453,327250 L 211028,326700 L 211608,327400 C 212426,328385 212195,328979 210988,328994 C 209650,329010 209093,330602 210287,330996 C 210832,331176 211084,331179 211289,331009 C 211461,330866 211924,330828 212532,330906 C 213064,330974 214040,330942 214700,330834 C 215657,330679 215964,330696 216216,330919 C 216783,331424 217302,331242 217978,330301 C 218364,329763 218840,329350 219162,329273 C 219458,329203 219803,329064 219929,328966 C 220168,328778 221414,329249 222038,329763 C 222329,330002 222468,329996 223019,329720 C 223822,329320 225199,329306 225712,329694 C 226257,330106 226875,330069 227300,329600 C 227499,329380 227821,329200 228016,329200 C 228210,329200 228782,328885 229286,328500 C 229791,328115 230376,327800 230586,327800 C 230797,327800 231273,327445 231645,327010 C 232463,326054 233167,325758 234222,325927 C 234969,326046 235619,325855 236800,325167 C 239232,323750 242808,324685 240788,326209 C 240541,326395 240405,326647 240483,326773 C 240713,327145 241369,327031 241612,326577 C 241798,326230 241964,326174 242536,326267 C 242920,326329 243721,326290 244316,326180 C 245366,325986 245422,325999 246194,326619 L 246989,327258 L 246644,327854 C 246455,328183 245993,328687 245618,328976 C 245243,329264 244568,329825 244118,330223 C 243668,330620 242873,331133 242350,331362 C 241704,331644 241400,331897 241400,332151 C 241400,332667 242173,333453 242541,333312 C 243066,333110 243975,332313 244107,331937 C 244299,331392 245403,330200 245716,330200 C 245866,330200 246125,329937 246291,329617 C 246689,328849 247682,328527 249700,328512 C 251425,328499 251722,328623 253629,330151 C 254075,330510 254679,330859 254971,330927 C 255745,331108 256770,332152 257337,333336 L 257833,334371 L 257388,334973 C 257002,335496 256945,335815 256957,337389 L 256971,339202 L 256235,339909 C 255831,340298 255259,340667 254964,340730 C 254669,340793 254219,341067 253964,341340 L 253500,341835 L 254050,342275 C 255206,343200 253459,345600 251629,345600 C 251477,345600 250834,345915 250200,346300 C 248877,347103 248500,347160 248200,346600 C 248082,346380 247857,346200 247700,346200 C 247542,346200 247095,346048 246706,345863 C 246034,345542 245985,345543 245730,345893 C 245440,346290 245000,346162 245000,345681 C 245000,345284 243057,345515 242530,345975 C 242185,346277 242130,346259 241691,345709 C 241228,345128 241214,345125 240806,345494 C 240400,345862 240380,345861 239804,345435 C 239132,344937 238940,344909 238424,345231 C 238148,345403 237574,345408 236172,345249 C 234813,345094 234013,345096 233295,345256 C 232748,345378 231805,345461 231200,345441 C 230277,345410 230047,345475 229769,345843 C 229506,346190 229215,346287 228369,346308 C 227781,346323 227045,346440 226734,346569 C 226187,346794 225424,346852 223286,346827 C 222245,346815 221960,346991 220750,348394 C 220145,349096 218880,348704 219021,347858 C 219089,347448 218980,347189 218788,347307 C 218671,347380 218630,347682 218697,347984 C 218763,348285 218720,348785 218601,349096 L 218386,349662 L 215562,349533 C 213462,349438 212651,349327 212403,349102 C 211940,348684 211543,348724 211233,349222 C 211036,349537 210834,349617 210435,349537 C 210141,349479 209744,349545 209554,349684 C 209311,349863 208927,349892 208254,349781 C 207729,349695 206799,349618 206186,349612 C 205256,349602 205001,349518 204638,349101 C 204226,348626 204167,348615 203452,348872 C 202062,349372 201274,349600 200933,349600 C 200747,349600 200426,349705 200220,349834 C 199528,350266 195891,349689 195019,349008 C 193658,347945 191400,348116 191400,349281 C 191400,350658 193328,351035 200038,350969 C 205144,350920 205606,350944 205975,351277 C 206309,351580 206484,351604 207037,351428 C 208511,350957 211062,350920 212045,351355 C 213616,352050 213593,353761 212016,353510 C 210896,353331 210576,353664 211233,354322 C 211819,354910 213920,355082 214511,354591 C 214727,354412 214992,354457 215684,354792 C 216362,355121 216671,355176 216961,355021 C 217261,354860 217488,354922 218011,355308 C 218378,355579 218766,355800 218873,355800 C 218981,355800 219234,355950 219436,356132 C 219846,356504 220398,356835 221326,357268 C 221670,357428 222012,357658 222087,357780 C 222162,357901 222383,358000 222577,358000 C 222771,358000 223142,358225 223400,358500 C 223972,359109 224192,359121 224882,358579 C 225435,358144 225656,358144 227300,358579 C 228892,359000 230233,358858 230880,358198 C 231215,357856 231763,357556 232180,357486 C 233421,357278 233561,357199 233773,356592 C 234001,355938 234584,355799 235000,356300 C 235375,356752 235662,356663 236054,355976 C 236319,355511 236509,355382 236816,355462 C 237102,355537 237385,355388 237762,354965 C 238579,354048 238880,353948 239460,354404 C 239737,354622 240151,354800 240382,354800 C 240819,354800 240944,354513 240600,354300 C 240490,354232 240400,354047 240400,353888 C 240400,353422 242034,353512 242672,354014 C 243034,354299 243336,354384 243640,354287 C 244286,354082 247842,354042 248236,354235 C 248569,354397 249200,353981 249200,353598 C 249200,353212 250830,353451 251385,353918 C 251862,354319 252041,354360 252605,354199 C 252969,354094 253481,354063 253744,354129 C 254079,354213 254363,354117 254692,353807 C 255025,353495 255360,353383 255838,353424 C 256237,353459 256715,353342 257002,353141 C 257270,352954 257831,352800 258249,352800 C 258854,352800 259045,352707 259183,352350 C 259278,352103 259693,351630 260104,351300 C 260516,350970 261156,350401 261526,350036 C 262005,349564 262312,349409 262591,349497 C 262861,349583 263063,349493 263240,349211 C 263388,348973 263708,348800 264001,348800 C 264325,348800 264576,348645 264703,348364 C 264811,348124 265170,347832 265500,347714 C 266527,347348 267194,346779 267362,346127 C 267490,345628 267643,345487 268112,345434 C 268435,345398 268886,345195 269113,344984 C 269607,344525 270801,344437 271849,344783 C 272721,345071 273000,344954 273000,344300 C 273000,343715 273322,343486 273701,343801 C 274017,344063 275400,343726 275400,343386 C 275400,343286 275657,342955 275972,342652 C 276287,342348 276694,341808 276876,341452 C 277059,341095 277431,340658 277704,340479 C 278354,340053 278333,339816 277650,339862 C 277150,339897 277104,339843 277148,339271 C 277209,338470 277033,338406 274738,338381 C 273281,338365 272799,338284 272373,337981 C 272079,337771 271756,337600 271657,337600 C 270936,337600 270364,336424 270473,335169 C 270534,334471 270592,333724 270601,333509 C 270630,332873 270980,332606 271617,332733 C 272127,332835 272202,332791 272216,332375 C 272225,332114 272446,331540 272708,331100 C 272969,330660 273359,329929 273573,329476 C 273840,328913 274131,328610 274494,328519 C 274815,328439 275119,328163 275263,327822 C 275538,327169 276615,326200 277067,326200 C 277238,326200 277961,325705 278674,325100 C 279387,324495 280095,324000 280248,324000 C 280400,324000 280790,323723 281113,323384 C 282117,322331 283620,321736 284607,322002 C 285523,322249 285882,322099 287051,320982 C 287385,320662 287815,320400 288005,320400 C 288195,320400 288458,320271 288589,320113 C 288955,319673 289882,319549 290785,319819 C 291429,320012 291774,320011 292429,319815 C 293791,319407 294517,320283 294452,322255 C 294385,324296 294740,325589 295477,325986 C 295797,326159 296201,326458 296374,326650 C 296547,326843 296781,327004 296894,327009 C 297125,327020 298519,328926 298465,329158 C 298446,329240 298369,329553 298294,329854 C 298195,330248 298232,330400 298428,330401 C 298578,330402 298940,330528 299234,330681 C 299527,330834 300157,331024 300634,331102 C 301110,331181 301590,331317 301700,331404 C 301810,331491 303065,331652 304488,331762 C 306463,331914 307132,332037 307310,332280 C 307439,332456 307626,332600 307725,332600 C 307825,332600 308220,332768 308604,332974 C 308988,333180 309686,333413 310155,333492 C 310624,333572 311135,333763 311290,333918 C 311445,334073 311833,334200 312154,334200 C 312570,334200 312797,334333 312949,334668 C 313067,334926 313486,335290 313881,335478 C 314277,335665 314600,335901 314600,336002 C 314600,336103 314889,336515 315243,336918 L 315885,337650 L 317193,337505 C 317912,337425 318680,337372 318900,337386 C 319120,337400 320078,337432 321029,337456 C 322351,337490 322849,337582 323145,337850 C 323413,338093 323864,338200 324621,338200 C 325328,338200 325884,338321 326202,338544 C 326472,338733 327144,338910 327696,338938 C 330755,339092 331048,339136 331233,339466 C 331336,339650 331601,339800 331823,339800 C 333886,339800 332971,341873 330665,342424 C 330134,342551 329581,342687 329435,342727 C 328927,342865 329298,343474 330000,343655 C 330385,343755 330800,343918 330922,344019 C 331247,344287 332787,343547 333651,342708 C 334618,341769 336056,341819 337132,342830 C 337813,343470 337723,343929 336825,344387 C 335627,344998 335439,345893 336394,346437 C 337225,346909 337404,347742 336779,348223 C 336256,348625 335495,348716 335300,348400 C 335232,348290 334777,348200 334288,348200 C 333675,348200 333280,348080 333011,347811 C 332797,347597 332280,347362 331861,347289 C 331443,347215 330901,347030 330657,346878 C 330169,346572 329400,346504 329400,346768 C 329400,346860 329890,347175 330489,347468 C 331087,347761 331633,348091 331700,348201 C 331768,348310 332088,348400 332412,348400 C 332735,348400 333180,348580 333400,348800 C 334003,349403 337509,349403 337700,348800 C 337834,348377 338292,348263 338500,348600 C 338568,348710 338900,348800 339239,348800 C 340416,348800 342316,351049 342487,352646 L 342625,353934 L 341729,354617 C 340093,355864 340358,356956 342215,356620 C 344179,356265 344095,356257 344160,356816 C 344274,357795 343605,358298 342233,358267 C 341057,358240 341020,358255 340813,358849 C 340507,359728 340548,360000 340988,360000 C 341202,360000 341435,360096 341508,360212 C 341580,360329 341855,360507 342119,360607 C 342740,360843 342843,362527 342250,362736 C 342058,362804 341585,362993 341200,363156 L 340500,363454 L 341284,363631 C 343385,364106 343047,365600 340838,365600 C 339281,365600 338590,365398 338351,364872 C 338133,364394 337275,364230 336516,364521 C 336017,364713 336081,366430 336600,366754 C 337107,367070 337112,367637 336611,368090 C 336397,368283 336195,368635 336161,368871 C 336102,369284 336019,369298 333867,369242 C 332476,369207 331585,369263 331505,369392 C 331341,369658 330288,369661 329795,369397 C 329378,369174 329168,369428 328924,370450 L 328792,371000 L 330869,371000 C 332643,371000 333020,371058 333455,371400 C 334092,371901 334299,371901 334802,371398 C 335207,370993 338541,370946 340515,371316 C 340951,371398 341341,371308 341818,371017 C 342329,370706 342836,370601 343838,370601 C 344574,370600 345232,370510 345300,370400 C 345368,370290 345742,370200 346130,370200 C 346534,370200 347055,370029 347345,369800 C 347676,369540 348157,369400 348717,369400 C 349198,369400 349651,369287 349740,369146 C 350051,368651 350921,368473 352700,368542 C 353690,368580 354703,368610 354950,368609 C 355927,368605 356381,368611 358546,368655 C 360641,368697 360813,368731 361116,369163 C 361295,369418 361566,369579 361717,369521 C 361869,369463 362366,369547 362822,369708 C 363780,370046 364600,370088 364600,369800 C 364600,369690 364372,369600 364094,369600 C 363518,369600 363199,369050 363621,368783 C 364061,368504 364988,368570 365584,368922 C 366241,369310 367257,368890 368606,367671 L 369394,366959 L 372047,367000 C 376611,367070 382479,366787 382653,366487 C 382770,366286 383725,366218 386753,366199 C 392993,366157 393850,366195 394367,366529 C 394838,366834 395503,366827 398657,366487 C 399381,366409 399912,366444 400077,366581 C 400255,366728 402499,366803 407009,366811 C 412766,366821 413752,366867 414223,367145 C 414713,367435 414814,367437 415234,367162 C 415636,366898 417019,366857 425300,366864 C 433853,366871 434969,366836 435530,366541 C 436065,366260 436855,366212 440761,366220 C 443291,366226 445758,366171 446245,366098 C 446731,366025 447482,366060 447914,366175 C 448416,366309 448987,366319 449494,366203 C 450158,366052 450402,366092 450976,366447 C 451663,366872 451676,366872 466905,366826 C 482661,366779 483787,366828 484190,367581 C 484347,367875 484822,367902 488633,367832 C 493804,367736 493371,367732 495200,367902 C 496025,367979 499715,368075 503400,368114 C 508711,368171 510266,368248 510900,368484 C 511829,368830 512639,368881 512910,368610 C 513030,368490 513992,368486 515496,368600 C 517556,368755 517938,368737 518235,368468 C 518518,368212 519230,368151 522207,368128 L 525835,368100 L 526437,367350 C 526768,366938 527163,366600 527315,366600 C 527467,366600 527736,366379 527913,366108 C 528091,365837 528430,365557 528668,365485 C 528906,365413 529298,365173 529539,364953 C 529850,364668 530127,364588 530487,364679 C 530766,364749 531167,364699 531378,364567 C 531684,364376 531855,364390 532233,364637 C 532625,364895 532920,364912 533982,364741 C 534906,364592 535428,364598 535865,364763 C 536221,364898 536558,364919 536685,364815 C 536974,364577 539370,364590 539518,364830 C 539589,364944 539748,364926 539918,364785 C 540083,364648 540458,364602 540817,364673 C 541156,364741 541603,364705 541812,364594 C 542078,364451 542306,364463 542579,364633 C 542872,364816 543035,364820 543244,364646 C 543631,364326 544323,364552 544695,365121 C 545091,365725 545540,365730 546008,365136 C 546452,364570 548866,364474 549495,364996 C 549693,365160 550344,365309 550974,365335 C 551593,365361 552505,365532 553000,365716 C 554027,366098 556738,366225 563300,366197 C 565610,366187 567590,366186 567700,366194 C 567810,366202 568530,366206 569300,366203 C 570070,366199 571015,366203 571400,366212 C 574742,366285 575534,366332 575760,366474 C 575907,366566 576298,366514 576660,366355 C 577187,366123 578062,366103 581600,366243 C 587032,366458 592033,366290 592260,365885 C 592348,365728 592697,365600 593036,365600 C 593374,365600 594138,365322 594732,364981 C 595757,364395 595839,364380 596300,364681 C 597037,365165 597519,365080 597793,364418 L 598034,363835 L 599667,363907 C 601694,363995 604709,364355 605477,364601 C 605842,364718 606190,364712 606427,364586 C 606684,364448 606936,364459 607238,364620 C 607695,364865 611233,364557 612100,364197 C 612789,363911 614117,363838 614517,364063 C 616402,365128 620294,364222 620095,362766 C 619941,361643 620293,361317 621900,361090 C 623098,360921 623406,360775 624676,359771 C 625213,359347 625779,359000 625933,359000 C 626088,359000 626454,358843 626748,358650 C 627141,358393 627693,358300 628834,358300 C 630223,358300 630410,358254 630619,357865 C 630906,357329 631668,357115 632227,357414 C 632460,357539 632925,357581 633273,357508 C 634259,357302 636378,357021 637800,356907 C 640198,356714 640690,356592 641392,356013 C 641997,355513 642058,355383 641876,354971 C 641320,353707 643349,352583 643997,353795 C 644159,354096 644397,354203 644860,354180 C 645541,354148 646595,354386 647900,354868 C 648537,355103 649188,355132 651100,355011 C 652420,354928 653681,354926 653902,355006 C 654123,355087 654944,355108 655726,355052 C 656999,354961 657216,355000 657791,355425 C 658776,356153 663434,356149 664024,355420 C 664389,354969 664427,354962 664788,355289 C 665021,355500 665577,355655 666233,355692 C 666820,355725 667619,355816 668009,355895 C 668645,356024 668743,355985 668957,355515 L 669196,354991 L 671913,355039 C 673407,355065 674674,355157 674727,355243 C 674986,355662 675621,355257 677134,353705 C 678044,352773 679009,351955 679279,351887 C 679549,351820 679926,351592 680116,351382 C 680589,350860 681237,350903 681881,351500 C 682709,352268 684652,352045 684217,351233 C 683611,350099 684127,348600 685124,348600 C 685592,348600 685800,348507 685800,348300 C 685800,347932 685555,347965 688848,347888 L 691597,347823 L 692698,348873 C 693903,350022 693992,350340 693417,351467 C 692857,352564 692612,352800 692026,352801 C 691298,352803 690179,353147 689700,353517 C 689210,353896 689960,354703 690611,354496 C 690806,354434 691024,354477 691095,354592 C 691307,354935 695935,354852 697206,354482 C 697808,354307 698525,354168 698800,354173 C 706740,354321 707676,354219 707561,353221 L 707500,352700 L 704524,352692 C 702471,352687 701395,352764 701052,352942 C 700253,353356 699823,353265 699677,352650 C 699474,351795 699024,351386 698446,351531 C 698172,351600 697985,351576 698030,351478 C 698717,349995 698779,349970 701370,350140 C 702918,350242 703298,350210 703479,349964 C 703896,349399 713649,349059 714286,349589 C 714479,349749 714708,349748 715126,349586 C 715442,349464 716420,349338 717300,349307 C 718284,349273 719127,349129 719491,348933 C 719930,348697 720379,348646 721238,348735 C 721904,348805 722900,348749 723591,348602 C 724509,348407 724921,348401 725347,348578 C 726006,348851 725448,348834 733676,348824 C 740704,348814 742028,348658 742298,347805 C 742535,347060 742915,346955 743528,347464 C 744408,348197 746400,348359 746400,347699 C 746400,346963 745973,346998 755196,346984 C 758309,346980 759156,346921 759412,346689 C 759588,346530 759927,346400 760166,346400 C 760405,346400 760600,346311 760600,346202 C 760600,346093 761049,345486 761599,344852 C 762148,344218 762733,343543 762899,343350 C 763064,343158 763200,342690 763200,342312 C 763200,341933 763290,341568 763400,341500 C 764205,341002 762994,340834 762038,341311 C 761221,341719 752754,341508 751900,341058 C 751680,340943 751209,340892 750853,340946 C 749710,341120 749240,340880 748972,339986 C 748650,338911 747611,338393 746769,338888 C 746477,339060 746131,339200 746001,339200 C 745870,339200 745534,339380 745255,339600 C 744975,339820 744615,340000 744455,340000 C 744294,340000 743954,340165 743698,340366 C 743264,340707 742686,340730 734977,340715 L 726720,340699 L 725810,341620 C 725310,342126 724785,342688 724644,342868 C 724504,343048 724144,343245 723844,343305 C 723545,343365 722895,343547 722400,343708 C 721007,344163 717995,344101 717147,343601 C 716162,343020 709463,342901 708852,343453 C 708503,343769 708391,343777 707802,343529 C 707248,343296 707059,343295 706621,343520 C 706334,343668 705594,343841 704976,343905 C 703959,344011 703808,344091 703376,344749 C 702841,345567 702081,345866 700984,345691 C 700472,345609 700195,345665 700010,345888 C 699685,346279 698625,346282 698112,345894 C 697898,345732 697558,345600 697355,345600 C 697152,345600 696533,345370 695978,345089 C 694854,344520 694400,344647 694400,345531 C 694400,345815 694257,346056 694050,346120 C 693858,346179 693308,346405 692828,346622 C 692141,346932 691822,346975 691328,346824 C 690983,346718 689367,346592 687738,346545 L 684776,346457 L 684029,345729 C 683619,345328 683174,345000 683040,345000 C 682907,345000 682602,344775 682363,344500 C 682124,344225 681778,344000 681595,344000 C 681411,344000 681054,343820 680800,343600 C 680268,343138 680211,343130 679484,343406 C 679107,343550 678742,343546 678280,343393 C 677609,343172 676607,343620 676140,344350 C 675919,344695 675412,344664 675271,344297 C 675123,343911 672744,344104 672045,344557 C 671638,344821 671550,344817 671215,344514 C 670935,344260 670657,344209 670117,344310 C 668952,344529 666824,344224 666374,343774 C 665569,342969 662282,342899 661190,343665 C 660926,343849 660544,344000 660340,344000 C 659310,344000 658484,345666 659106,346488 C 659722,347302 659131,348200 657980,348200 C 657688,348200 657337,348335 657200,348500 C 656852,348919 656329,348874 655887,348386 C 655493,347950 654408,347981 653848,348444 C 653710,348558 653188,348606 652688,348549 C 652069,348479 651461,348567 650787,348823 C 649472,349323 649373,349307 648860,348516 C 648522,347993 648200,347782 647460,347600 C 645865,347207 643544,347031 643155,347274 C 642891,347440 642664,347406 642202,347133 C 641510,346724 640490,346940 639652,347674 C 639249,348026 639127,348040 638431,347810 C 637532,347513 636911,347659 636309,348309 C 635919,348730 635656,348782 633390,348888 C 632021,348952 630765,349012 630600,349022 C 630435,349032 629760,348944 629100,348827 C 627660,348572 625784,348787 625308,349264 C 624794,349778 622666,349732 622094,349194 C 621680,348805 621000,348822 621000,349221 C 621000,349581 620107,349325 618719,348566 C 618509,348451 617789,348328 617119,348292 C 616448,348257 615394,348090 614776,347923 C 613227,347504 611731,347834 611640,348615 C 611587,349074 611652,349133 612240,349149 C 613240,349176 614846,349494 615337,349761 C 615577,349893 616156,350000 616624,350000 C 617214,350000 617612,350129 617925,350423 C 618204,350685 618741,350885 619338,350947 C 620004,351017 620485,351214 620900,351587 C 621230,351883 621748,352230 622050,352358 C 622621,352600 622724,352895 622411,353389 C 622267,353616 622126,353631 621746,353457 C 621073,353151 620754,353417 620833,354222 L 620900,354900 L 619237,355038 C 618080,355134 617350,355308 616837,355611 C 616229,355970 615906,356026 614991,355930 C 613881,355815 612922,356013 611356,356682 C 610947,356857 610317,357003 609956,357006 C 609595,357010 609125,357145 608912,357306 C 608352,357729 605389,357708 604551,357275 C 604205,357096 603294,356912 602527,356867 C 601362,356798 601056,356703 600675,356292 C 600424,356021 600129,355800 600020,355800 C 599910,355800 599403,355519 598894,355175 C 598056,354609 597921,354575 597473,354815 C 597061,355035 596870,355034 596339,354811 C 595951,354647 594853,354533 593545,354521 L 591390,354500 L 590683,355249 C 589535,356466 588124,356350 586219,354882 C 585546,354363 585275,354255 585071,354424 C 584541,354864 581808,353986 581187,353176 C 580891,352790 580670,352769 576987,352779 C 572138,352792 570268,352206 569589,350460 C 569344,349831 568276,349622 565700,349697 C 564490,349733 563399,349679 563275,349577 C 563151,349476 562656,349395 562175,349397 C 558220,349419 557739,349386 557185,349059 C 555891,348295 556489,346937 558162,346839 L 559204,346779 L 558668,346076 C 558077,345301 557490,345276 556700,345992 C 555580,347007 551662,346603 550566,345359 C 550033,344754 550028,344753 548988,345003 L 547945,345253 L 547298,344483 C 546702,343773 546614,343732 546176,343966 C 544818,344690 544587,344851 544395,345210 C 543466,346946 541326,344783 542112,342903 C 542394,342228 542394,342125 542112,341813 C 541521,341160 541756,340137 542596,339702 C 543334,339320 543733,338351 543428,337682 C 543303,337406 543200,336976 543200,336726 C 543200,336294 541884,335200 541364,335200 C 541253,335200 540934,335020 540655,334800 C 540375,334580 539888,334400 539573,334400 C 539258,334400 538820,334220 538600,334000 C 538080,333480 537200,333461 537200,333969 C 537200,334432 537735,334907 538447,335076 C 538749,335148 539154,335450 539347,335748 C 539541,336047 539955,336519 540267,336799 L 540834,337308 L 540493,338160 C 540305,338628 539983,339102 539776,339213 C 539523,339348 539400,339633 539400,340086 C 539400,340524 539286,340801 539072,340883 C 538796,340989 538762,341215 538862,342288 C 538952,343245 538913,343624 538707,343795 C 538251,344173 538106,345565 538480,345978 C 539230,346807 538581,347400 536925,347400 C 536458,347400 535902,347532 535688,347694 C 535112,348129 533933,348079 533500,347600 C 533301,347380 532897,347200 532602,347200 C 532113,347200 530800,345945 530800,345477 C 530800,345066 530119,344626 529628,344720 C 528731,344892 527928,343667 528042,342299 C 528145,341056 528988,339839 529763,339814 C 530514,339791 531000,339428 531000,338889 C 531000,337830 529488,337839 527043,338912 C 526682,339070 526230,339200 526038,339200 C 525846,339200 525510,339325 525292,339478 C 525074,339631 524094,339823 523114,339905 C 521909,340005 521115,340182 520658,340452 C 520167,340741 519766,340821 519192,340744 C 518758,340686 517797,340714 517057,340805 C 515106,341047 514705,340916 514024,339809 C 513055,338234 511633,337808 510319,338700 C 509479,339270 508379,339357 507986,338884 C 507769,338621 507482,338593 506312,338718 C 504677,338892 504625,338890 503300,338602 C 502750,338483 502064,338389 501776,338394 C 501487,338399 501139,338267 501001,338101 C 500673,337705 500440,337721 499500,338200 C 498580,338669 498026,338700 497142,338330 C 496761,338171 496334,338125 496098,338216 C 495244,338550 493190,338421 492655,338000 C 492322,337738 491843,337600 491271,337600 C 490644,337600 490299,337487 490054,337200 C 489813,336919 489464,336800 488883,336800 C 488360,336800 487868,336654 487551,336404 C 487274,336186 486834,335915 486574,335801 C 486313,335687 485703,335370 485219,335097 C 484734,334823 484120,334600 483855,334600 C 483590,334600 483200,334507 482987,334393 C 482103,333920 481155,335978 482012,336508 C 483259,337278 482412,338400 480584,338400 C 478584,338400 477578,336260 478894,334807 C 479868,333730 477618,333124 475900,334000 C 474848,334536 473811,334317 472600,333302 C 472435,333164 471949,332988 471520,332911 C 470700,332764 469600,331857 469600,331330 C 469600,330883 468660,330222 468198,330343 C 467979,330400 467553,330282 467250,330080 C 466948,329879 466533,329741 466328,329773 C 466123,329806 465689,329578 465364,329266 C 464674,328608 462494,328480 461836,329060 C 461651,329222 461188,329422 460808,329503 C 459806,329716 458870,330551 458396,331655 C 457918,332766 457482,333000 455897,333000 C 455203,333000 454763,333096 454660,333271 C 454504,333536 453759,334000 453491,334000 C 453270,334000 453607,332927 453947,332550 C 454240,332224 454220,332200 453662,332200 C 453316,332200 452909,332031 452700,331800 C 452172,331217 451725,331274 451883,331904 C 452052,332578 451541,332770 450777,332318 C 450141,331943 449800,332033 449800,332579 C 449800,333145 450846,333923 451971,334193 C 452668,334360 453081,334583 453229,334871 C 453351,335107 453620,335488 453829,335717 C 454037,335946 454183,336351 454154,336616 C 454072,337348 454928,337415 455201,336698 C 455373,336244 455484,336187 455978,336295 C 456490,336408 456578,336352 456774,335788 C 456978,335202 457046,335164 457674,335282 C 458178,335376 458383,335332 458468,335111 C 458637,334671 459769,334262 461537,334000 C 462397,333873 463486,333641 463957,333485 C 465035,333127 469607,333087 469952,333432 C 470080,333560 470615,333813 471142,333994 C 472313,334398 472704,335926 471760,336412 C 471507,336542 471075,336852 470800,337100 C 470420,337443 469976,337576 468950,337653 C 468177,337711 467380,337898 467084,338092 C 466709,338338 466357,338394 465792,338299 C 465126,338186 464940,338242 464498,338684 C 464113,339069 463776,339200 463173,339200 C 462583,339200 462269,339318 462011,339636 C 461692,340030 461598,340048 461051,339821 C 460562,339619 460364,339619 460038,339823 C 459709,340028 459573,340026 459316,339813 C 459061,339602 458941,339600 458696,339803 C 458483,339980 458083,340011 457346,339908 C 455692,339675 454863,339803 453969,340428 C 453529,340737 453013,340805 450919,340835 C 449534,340854 448400,340911 448400,340961 C 448400,341012 448589,341358 448819,341731 C 449291,342495 449209,343000 448613,343000 C 448394,343000 448118,343180 448000,343400 C 447745,343877 447400,343926 447400,343485 C 447400,343225 447310,343242 446873,343585 C 446075,344213 443576,344192 443153,343554 C 442859,343111 442820,343108 438189,343154 C 433861,343196 433466,343170 432755,342800 C 432333,342580 431717,342400 431386,342400 C 431055,342400 430431,342220 430000,342000 C 429341,341664 428821,341600 426739,341600 C 424516,341600 424225,341559 423900,341200 C 423667,340943 423284,340800 422827,340800 C 422260,340800 421941,340629 421256,339957 C 420471,339187 420315,339117 419461,339154 C 418340,339203 417887,338867 417591,337768 C 417478,337346 417302,337000 417200,337000 C 417099,337000 416518,336595 415911,336100 C 415303,335605 414692,335200 414553,335199 C 414414,335199 414005,335019 413645,334799 C 413285,334580 412874,334400 412731,334400 C 412588,334400 412011,333825 411448,333122 C 410874,332406 410089,331681 409662,331472 C 408960,331129 408892,331022 408800,330104 L 408700,329107 L 407725,328945 C 407178,328854 406439,328545 406041,328241 C 405370,327729 403726,327241 402577,327213 C 402289,327206 401825,327020 401545,326800 C 401232,326554 400734,326400 400249,326400 C 399716,326400 399345,326271 399100,326000 C 398901,325780 398526,325600 398267,325600 C 398008,325600 397642,325420 397454,325200 C 397265,324980 396974,324797 396806,324794 C 395048,324760 394267,320693 395615,318591 C 395788,318321 395983,317954 396049,317776 C 396114,317597 396417,317389 396721,317312 C 397026,317236 397376,317035 397500,316866 C 397625,316695 398160,316513 398712,316454 C 399255,316396 399844,316224 400021,316070 C 400551,315609 402100,315853 403094,316553 C 403566,316886 404165,317223 404426,317304 C 404687,317384 405061,317618 405258,317825 C 406119,318727 408400,317848 408400,316614 C 408400,316384 408670,315914 409000,315569 C 409330,315223 409600,314815 409600,314661 C 409600,314507 409809,314183 410065,313940 C 411502,312581 411435,311766 409857,311368 C 409245,311214 408917,311006 408800,310700 C 408707,310455 408489,310200 408315,310134 C 407798,309935 407953,309632 408792,309204 C 409787,308697 409654,308660 410289,309620 C 410798,310388 410878,310433 411566,310322 C 413920,309944 413944,309944 414329,310327 C 415133,311125 416833,311830 417630,311695 C 418966,311469 419865,312380 419723,313816 C 419515,315929 420582,317679 422415,318228 C 424451,318838 424709,319972 423044,320998 C 421402,322009 421200,322198 421200,322728 C 421200,323008 421380,323466 421600,323745 C 421820,324025 422002,324444 422005,324677 C 422008,324939 422323,325328 422834,325700 C 423287,326030 424013,326593 424448,326950 C 425017,327418 425442,327601 425969,327603 C 426371,327605 426925,327737 427200,327898 C 427475,328058 427982,328324 428327,328488 C 428723,328676 429003,328990 429090,329343 C 429437,330754 432624,332947 433986,332712 C 434378,332645 435150,332520 435700,332435 C 437157,332209 437957,331610 437684,330950 C 437543,330611 435927,329600 435524,329600 C 435346,329600 435016,329416 434792,329192 C 434568,328968 434185,328698 433942,328592 C 433699,328487 433365,328316 433200,328212 C 433035,328109 432665,327975 432379,327915 C 430710,327568 429770,325811 430385,324190 C 430621,323571 430730,322921 430665,322523 C 430455,321231 433398,319378 435163,319689 C 435568,319761 436530,319889 437300,319975 C 438070,320060 438953,320236 439263,320365 C 439573,320494 440273,320600 440819,320600 C 441496,320600 441848,320691 441922,320886 C 442145,321466 444937,321364 445499,320757 C 446277,319914 446267,319623 445446,319253 C 445036,319067 444543,318787 444352,318629 C 443795,318170 441496,318304 440973,318827 C 440656,319144 440415,319210 439930,319110 C 439584,319039 438838,318989 438273,319000 C 437354,319018 435515,318553 434850,318134 C 434402,317852 434585,317242 435400,316300 C 436295,315266 436284,315301 435979,314426 C 435647,313473 435110,313271 434567,313895 C 434326,314173 433975,314400 433788,314400 C 433602,314400 433337,314535 433200,314700 C 432088,316039 428979,313391 429060,311173 C 429105,309935 428815,309400 428100,309400 C 427852,309400 427537,309265 427400,309100 C 427263,308935 427034,308800 426891,308800 C 426748,308800 426363,308575 426036,308300 C 425266,307652 424535,307646 424244,308284 C 423850,309148 419794,309139 419462,308273 C 419408,308134 418947,307957 418437,307880 C 417756,307778 417336,307563 416858,307070 C 416500,306702 416168,306400 416120,306400 C 415817,306400 414200,307220 414200,307374 C 414200,308246 411565,308946 410718,308300 C 410357,308025 409867,307800 409628,307800 C 409390,307800 409025,307694 408817,307564 C 407998,307053 406179,309402 406919,310016 C 407154,310211 407207,310479 407119,311028 C 407051,311449 407087,311830 407200,311900 C 407644,312174 407416,313540 406820,314179 C 406082,314969 405443,314975 404700,314200 C 404384,313870 403929,313600 403690,313600 C 403450,313600 403025,313420 402745,313200 C 402466,312980 402145,312800 402032,312800 C 401576,312800 401593,311949 402071,310750 C 403117,308128 402892,307000 401323,307000 C 400830,307000 400173,306898 399863,306773 C 399553,306648 398940,306473 398500,306385 C 396212,305925 395793,305738 394985,304815 C 393886,303560 393493,303159 392959,302746 C 392149,302120 391017,301600 390464,301600 C 389708,301600 387449,300207 387308,299653 C 387238,299378 386983,299156 386647,299076 C 386346,299005 385965,298834 385800,298697 C 385635,298560 385275,298380 385000,298299 C 384725,298217 384337,297979 384137,297770 C 383838,297456 383605,297412 382800,297519 C 381749,297658 380681,297207 379963,296320 C 379653,295937 379456,295909 377519,295971 L 375412,296038 L 375073,295329 C 374720,294587 374908,294000 375500,294000 C 375638,294000 375863,293865 376000,293700 C 376174,293490 376636,293400 377534,293400 C 378855,293400 380200,292587 380200,291789 C 380200,291641 380463,291245 380784,290910 C 382115,289519 382589,288153 382000,287400 C 381744,287073 381607,286584 381604,285986 C 381600,285136 381541,285032 380774,284530 L 379948,283989 L 379111,284395 C 378347,284764 377884,284800 373846,284800 C 370840,284800 369250,284877 368895,285039 C 368488,285224 368284,285224 367988,285039 C 367778,284907 367429,284800 367212,284800 C 366277,284800 365302,282531 365820,281562 C 365985,281254 365977,281030 365788,280677 C 365572,280273 365588,280145 365898,279802 C 366230,279435 366235,279370 365947,279050 C 365773,278858 365566,278430 365486,278100 C 365406,277770 365084,277172 364770,276771 C 363990,275774 364001,274865 364804,274096 C 365137,273777 365508,273185 365630,272780 C 366077,271287 366589,270901 368131,270893 C 369614,270886 370814,270300 371286,269352 C 371706,268510 372504,268240 373052,268755 C 373313,269000 373675,269200 373858,269200 C 374041,269200 374338,269425 374518,269700 C 374775,270092 375015,270200 375626,270200 C 376055,270200 376579,270309 376792,270441 C 377109,270640 377250,270617 377585,270313 C 378267,269697 379693,270012 380702,271002 C 381149,271441 381647,271801 381808,271802 C 382363,271806 383463,273161 383488,273871 C 383500,274236 383658,274759 383838,275033 C 384052,275360 384103,275631 383986,275816 C 383712,276249 383724,276271 384900,277456 C 385505,278066 386000,278694 386000,278852 C 386000,279409 386714,279834 387430,279702 C 387959,279604 388245,279686 388789,280089 C 389168,280370 389637,280600 389832,280600 C 390603,280600 391556,282676 390900,282928 C 390487,283086 390522,283788 390950,283921 C 391143,283980 391570,284145 391900,284287 C 392345,284478 392913,284500 394100,284372 C 397056,284055 399271,284240 399959,284863 C 400164,285049 400565,285200 400850,285200 C 401136,285200 401637,285425 401964,285700 C 403087,286645 405111,286337 406045,285078 C 407065,283704 408372,282415 408875,282288 C 409169,282215 409520,282007 409656,281827 C 410137,281187 411737,280268 413527,279604 C 413871,279476 414405,279107 414714,278785 C 415022,278463 415399,278200 415552,278200 C 415854,278200 417495,277306 418039,276845 C 418622,276352 418679,275495 418187,274620 C 417648,273661 417776,273200 418581,273200 C 420357,273200 421851,275433 420924,276702 C 420681,277034 420708,277172 421154,277846 C 421831,278869 420718,280600 419383,280600 C 419259,280600 418881,280833 418542,281118 C 418074,281512 417788,281608 417346,281519 C 416580,281366 415422,282278 413371,284650 C 412843,285260 412388,285600 412098,285600 C 410951,285600 410322,288263 411412,288503 C 411737,288574 412096,288805 412209,289016 C 412498,289556 412835,289495 413513,288781 C 413836,288441 414522,287947 415039,287684 C 415621,287387 416214,286862 416598,286302 C 416940,285806 417314,285400 417431,285400 C 417547,285400 417917,285169 418253,284886 C 418677,284529 419004,284408 419324,284488 C 419656,284572 419844,284492 419999,284202 C 420140,283939 420418,283800 420802,283800 C 421209,283800 421492,283646 421718,283300 C 421957,282936 422223,282800 422699,282800 C 423057,282800 423463,282665 423600,282500 C 423737,282335 424013,282200 424213,282200 C 425163,282200 425703,281323 425651,279866 C 425577,277817 427296,275392 428815,275402 C 428972,275403 429354,275110 429664,274752 C 429976,274392 430270,274199 430321,274322 C 430806,275476 431987,275332 432201,274093 C 432341,273287 433200,273279 433200,274084 C 433200,275664 434076,277961 434742,278128 C 435000,278193 435301,278416 435412,278623 C 435537,278857 435830,279000 436183,279000 C 436495,279000 436863,279135 437000,279300 C 437317,279682 437683,279682 438000,279300 C 438170,279096 438624,279000 439424,279000 C 440680,279000 440859,278810 440359,278008 C 440161,277692 440182,277552 440471,277232 C 440680,277001 440874,276367 440944,275684 C 441027,274884 441240,274265 441632,273684 C 441944,273221 442200,272740 442200,272614 C 442200,272061 444461,270258 445388,270072 C 445713,270007 446133,269784 446321,269577 C 446809,269037 447854,269098 448796,269721 C 449601,270254 452195,270293 452514,269778 C 453167,268721 455686,268531 456676,269464 C 457614,270349 459606,270417 460474,269593 C 461245,268861 461262,266225 460500,265563 C 460163,265270 460000,264921 460000,264495 C 460000,264146 459820,263654 459600,263400 C 459372,263137 459200,262652 459200,262269 C 459200,261901 459105,261600 458990,261600 C 458874,261600 458643,261308 458476,260950 C 457807,259519 457573,259252 456556,258769 C 455603,258315 454041,258163 452563,258380 C 452488,258391 452370,258580 452300,258800 C 452130,259334 451419,259316 450465,258753 C 449193,258002 444526,257951 443662,258678 C 443081,259167 442912,259200 440969,259200 C 439165,259200 438866,259248 438664,259572 C 438512,259815 438087,259990 437437,260076 C 436890,260149 436332,260341 436197,260504 C 436062,260667 435711,260800 435418,260800 C 434826,260800 433743,261301 432898,261965 C 432210,262507 431514,262519 430855,262000 C 430488,261712 430043,261600 429260,261600 C 428038,261600 427400,261345 427400,260856 C 427400,260674 427202,260315 426960,260058 C 426559,259631 426541,259514 426752,258745 C 427225,257018 425412,256272 423852,257550 C 422964,258278 422889,258300 421318,258305 C 419460,258311 418383,258794 416861,260305 C 416394,260768 415597,261290 415061,261482 C 414533,261671 413860,261956 413566,262115 C 413206,262310 412547,262387 411534,262352 C 410043,262300 410032,262304 409285,263050 C 408775,263559 408353,263800 407974,263800 C 406866,263800 406368,264712 407100,265400 C 407375,265658 407600,265959 407600,266069 C 407600,266179 407749,266433 407931,266634 C 408239,266975 408239,267025 407931,267366 C 407749,267567 407599,267949 407599,268216 C 407597,269223 407177,270139 406286,271083 L 405365,272058 L 404874,271529 C 404604,271238 404244,271000 404073,271000 C 403903,271000 403528,270815 403241,270589 C 402664,270135 401240,270207 400951,270704 C 400658,271210 398430,271298 397926,270824 C 397207,270149 396283,270063 395551,270605 C 394642,271277 392175,271429 391541,270852 C 391180,270522 390728,270431 389036,270343 C 387546,270266 386874,270148 386620,269918 C 386427,269743 386040,269600 385761,269600 C 385482,269600 385039,269433 384777,269229 C 384515,269025 383971,268797 383569,268724 C 383167,268650 382788,268457 382726,268295 C 382663,268133 382490,268000 382341,268000 C 382192,268000 381852,267764 381585,267475 L 381100,266950 L 378256,267069 C 375823,267171 375388,267143 375241,266880 C 375056,266549 373695,267165 373340,267741 C 373085,268155 372275,268044 371949,267550 C 371785,267303 371413,266862 371120,266571 C 370828,266281 370343,265678 370044,265232 C 369547,264493 367551,263210 366885,263203 C 366767,263201 366458,262975 366200,262700 C 365942,262425 365617,262200 365479,262200 C 365116,262200 364000,260465 364000,259900 C 364000,259636 363843,259331 363650,259223 C 363356,259058 363300,258729 363300,257151 C 363300,254988 362683,253600 361722,253600 C 361462,253600 361139,253467 361004,253305 C 360870,253143 360451,252953 360074,252882 C 359698,252811 359298,252584 359188,252377 C 359039,252100 358763,252000 358143,251999 C 357110,251998 356116,251178 355431,249763 C 355175,249235 354514,248433 353905,247913 C 353233,247339 352783,246777 352703,246411 C 352632,246090 352445,245720 352287,245589 C 352129,245458 352000,245101 352000,244797 C 352000,244382 351696,243945 350801,243071 C 349824,242116 349602,241780 349601,241250 C 349601,240893 349522,240600 349427,240600 C 349332,240600 348785,239836 348212,238901 L 347171,237203 L 347599,236601 C 347835,236271 348089,235999 348164,235999 C 348614,235994 349173,234656 349062,233846 C 348980,233237 349033,232892 349247,232646 C 349559,232287 349847,231322 349797,230800 C 349782,230635 349742,229777 349708,228894 C 349663,227688 349542,227115 349225,226594 C 348992,226212 348801,225755 348801,225579 C 348800,225402 348485,224845 348100,224341 C 347307,223303 347217,222645 347800,222146 C 348020,221958 348200,221678 348200,221523 C 348200,221369 348347,221186 348527,221117 C 348787,221018 348829,220816 348735,220126 C 348546,218753 348876,217937 349928,217170 C 350975,216408 351172,216219 353100,214133 C 355378,211668 356000,210879 356000,210458 C 356000,210036 358132,207200 358449,207200 C 358552,207200 359019,206805 359488,206323 C 359957,205841 360556,205379 360820,205297 C 361084,205215 361795,204758 362400,204282 C 364524,202609 365406,202000 365703,202000 C 365868,202000 366198,201775 366437,201500 C 366676,201225 367076,201000 367324,201000 C 367573,201000 367832,200910 367900,200800 C 368140,200412 369370,200571 369611,201021 C 369788,201351 369962,201418 370409,201328 C 370856,201239 371064,201318 371358,201692 C 371713,202143 371861,202171 374017,202193 C 375273,202205 376660,202223 377100,202231 C 378207,202253 379052,202005 379361,201569 C 379727,201052 380446,201110 381000,201700 C 381323,202044 381683,202200 382153,202200 C 382534,202200 383062,202377 383345,202600 C 383625,202820 383963,203000 384096,203000 C 384229,203000 384501,203180 384700,203400 C 384922,203646 385316,203800 385720,203800 C 386158,203800 386474,203938 386667,204214 C 386929,204588 387139,204624 388829,204590 C 389858,204569 391306,204654 392047,204779 C 393484,205022 394091,204860 394307,204177 C 394364,203999 394588,203692 394805,203495 C 395022,203299 395204,202994 395208,202819 C 395256,200878 398525,199955 401167,201137 C 403006,201959 405315,199759 405070,197417 C 404985,196598 405022,196115 405185,195918 C 405377,195687 405357,195520 405089,195111 C 404839,194730 404775,194310 404841,193504 C 404921,192549 404874,192362 404466,192008 C 404179,191759 404000,191381 404000,191026 C 404000,190709 403865,190337 403700,190200 C 402988,189609 405192,185819 407350,183923 C 407598,183706 407800,183420 407800,183288 C 407800,183157 407937,182935 408104,182796 C 408906,182131 410345,179624 410448,178714 C 410512,178149 410722,177596 410977,177325 C 411210,177077 411400,176687 411400,176459 C 411400,176230 411535,175991 411700,175928 C 411885,175857 412000,175553 412000,175136 C 412000,174764 412100,174173 412222,173822 C 412384,173359 412385,172953 412227,172342 C 412038,171610 412061,171430 412400,170964 C 412615,170670 412849,170066 412919,169624 C 412990,169181 413217,168665 413424,168478 C 414308,167678 413960,166248 412500,164692 C 411785,163930 411200,163184 411200,163035 C 411200,162885 411020,162534 410800,162255 C 410563,161954 410400,161443 410400,161004 C 410400,160541 410263,160138 410037,159934 C 409741,159666 409667,159251 409634,157665 C 409605,156276 409509,155631 409297,155396 C 408664,154698 409509,152173 411028,150223 C 411233,149961 411400,149530 411400,149267 C 411400,149003 411527,148739 411682,148679 C 412001,148557 413600,146302 413600,145975 C 413600,145859 413780,145534 414000,145255 C 414220,144975 414400,144536 414400,144280 C 414400,144019 414576,143720 414800,143600 C 415162,143406 415200,143181 415200,141205 C 415200,139961 415286,138970 415401,138900 C 415511,138831 415546,138555 415478,138285 C 415411,138015 415444,137683 415552,137547 C 415659,137411 415794,136867 415851,136338 C 415914,135744 416116,135203 416377,134925 C 416648,134636 416800,134212 416800,133744 C 416800,133130 417055,132696 418400,131024 C 419463,129703 420000,128864 420000,128525 C 420000,128220 420160,127928 420398,127801 C 420616,127684 420850,127370 420917,127102 C 420984,126835 421165,126512 421320,126384 C 421474,126256 421600,125870 421600,125526 C 421600,125050 421768,124766 422302,124340 C 423555,123340 423649,123059 423169,121756 C 422661,120376 422777,119741 423597,119401 C 423929,119264 424204,119050 424208,118926 C 424220,118607 425215,117500 425734,117230 C 426352,116907 427974,117163 428265,117629 C 428453,117930 428748,118000 429840,118000 C 430959,118000 431252,118072 431586,118431 C 432018,118895 435301,118881 436179,118411 C 436438,118273 436784,118297 437325,118491 C 438969,119083 440202,119400 440858,119400 C 441770,119400 442717,119748 443694,120442 C 444137,120757 444860,121247 445300,121530 C 445740,121814 446306,122238 446557,122473 C 446809,122708 447579,123395 448269,124000 C 449036,124672 449748,125528 450101,126200 C 450644,127234 451073,127857 452007,128967 C 452223,129224 452400,129550 452400,129693 C 452400,129835 452661,130059 452979,130191 C 453834,130546 454786,133211 454647,134861 C 454562,135862 454607,136077 454974,136419 C 455208,136637 455400,136902 455400,137008 C 455400,137114 455602,137200 455848,137200 C 456522,137200 459040,138511 459710,139211 C 460560,140097 460684,144756 459879,145502 C 459616,145746 459400,146081 459400,146246 C 459400,146411 459210,146788 458978,147083 C 458588,147579 458580,147647 458878,147975 C 459055,148171 459200,148437 459200,148567 C 459200,148826 463731,153400 463987,153400 C 464074,153400 464386,153589 464680,153820 C 465049,154111 465367,154201 465712,154115 C 466087,154021 466325,154114 466678,154495 C 466935,154773 467289,155000 467463,155000 C 467899,155000 469551,156140 469911,156689 C 470073,156936 470422,157237 470685,157357 C 470949,157477 471227,157770 471303,158008 C 471378,158246 471656,158760 471920,159149 C 472505,160010 472532,160531 472000,160700 C 471538,160847 471301,161573 471505,162217 C 471612,162553 471531,162750 471179,163016 C 470720,163362 470718,163378 471082,163781 C 471985,164777 471427,169600 470409,169600 C 470312,169600 470075,170027 469883,170550 C 469690,171073 469402,171654 469242,171842 C 469043,172077 468994,172403 469084,172886 C 469172,173354 469113,173787 468909,174183 C 468715,174557 468675,174823 468801,174900 C 469160,175122 469016,176395 468562,177008 C 468088,177650 467959,181020 468404,181168 C 468878,181326 469224,181878 469116,182307 C 469032,182641 469135,182842 469517,183093 C 469963,183385 470014,183526 469907,184165 C 469794,184838 471614,187000 472295,187000 C 472859,187000 474023,188196 473887,188635 C 473792,188938 474289,189486 477000,192065 C 477165,192222 477872,192946 478570,193675 C 479539,194685 479972,195000 480396,195000 C 480701,195000 481063,195135 481200,195300 C 481337,195465 481660,195600 481917,195600 C 482182,195600 482480,195775 482601,196002 C 482719,196223 483657,197235 484685,198252 C 485713,199268 486691,200370 486860,200700 C 487028,201030 487429,201593 487752,201952 C 488075,202310 488479,202895 488650,203252 C 490364,206818 490884,207821 491122,208018 C 491275,208145 491400,208428 491400,208646 C 491400,208864 491625,209219 491900,209436 C 492175,209652 492400,209921 492400,210033 C 492400,210145 492580,210466 492800,210745 C 493045,211057 493200,211557 493200,212034 C 493200,212463 493347,213039 493527,213313 C 493712,213596 493897,214405 493952,215175 L 494049,216537 L 493315,216991 C 492659,217396 492544,217413 492240,217147 C 492053,216983 491540,216737 491100,216601 C 490660,216464 489998,216225 489630,216070 C 489143,215864 488560,215823 487501,215919 C 486089,216047 486027,216034 485571,215509 C 485141,215014 485014,214978 484100,215091 C 483346,215184 482805,215109 481900,214786 C 479612,213970 479371,214001 477877,215312 C 476390,216618 476217,216903 476651,217337 C 476981,217667 476054,219400 475548,219400 C 475293,219400 472400,222350 472400,222609 C 472400,222703 471932,223014 471360,223301 C 470789,223588 470136,224002 469910,224220 C 469685,224438 469239,224823 468919,225074 C 468406,225479 468332,225675 468287,226750 C 468217,228426 466519,231177 465536,231207 C 464768,231231 464144,232992 464249,234839 C 464340,236435 464309,236682 463976,236967 C 463769,237144 463600,237457 463600,237663 C 463600,238121 463053,238851 461550,240397 C 460686,241286 460400,241725 460400,242160 C 460400,242811 459639,244361 459012,244988 C 458785,245215 458600,245577 458600,245793 C 458600,246009 458420,246282 458200,246400 C 457980,246518 457800,246771 457800,246963 C 457800,247154 457673,247492 457518,247714 C 456443,249249 456877,251800 458214,251800 C 458813,251800 460800,249683 460800,249043 C 460800,248685 461760,247189 462149,246940 C 462287,246852 462400,246529 462400,246221 C 462400,245914 462580,245499 462800,245300 C 463020,245101 463200,244769 463200,244562 C 463200,244106 464462,242800 464904,242800 C 465078,242800 465343,242506 465494,242146 C 465644,241786 465954,241322 466183,241115 C 466413,240908 466600,240499 466600,240207 C 466600,239915 466732,239502 466894,239288 C 467062,239066 467190,238456 467194,237862 C 467197,237291 467299,236762 467420,236687 C 467542,236612 467767,236249 467921,235880 C 468085,235488 468471,235073 468851,234881 C 470359,234118 471419,232980 472138,231350 C 472271,231048 472471,230800 472582,230800 C 472693,230800 473030,230373 473332,229850 C 473633,229328 473997,228828 474140,228740 C 474283,228652 474400,228239 474400,227821 C 474400,227316 474534,226941 474800,226700 C 475066,226459 475200,226084 475200,225581 C 475200,225164 475290,224768 475400,224700 C 475510,224632 475600,224309 475600,223982 C 475600,223655 475735,223064 475900,222669 C 476065,222274 476200,221793 476200,221600 C 476200,221407 476335,221137 476500,221000 C 476673,220857 476800,220421 476800,219973 C 476800,217907 480885,217917 481992,219985 C 482158,220296 482430,220353 483702,220345 C 484909,220337 485323,220415 485757,220735 C 486056,220954 486745,221195 487289,221269 C 487846,221344 488462,221577 488702,221801 C 488935,222021 489401,222200 489738,222200 C 490075,222200 490455,222325 490582,222478 C 490708,222631 491214,222857 491706,222981 C 492198,223104 492600,223294 492600,223403 C 492600,223511 492886,223600 493235,223600 C 493960,223600 495924,224845 496107,225421 C 496307,226051 497827,227026 498410,226898 C 498750,226823 499092,226914 499413,227164 C 499681,227373 500320,227606 500834,227682 C 501347,227758 501881,227956 502019,228123 C 502158,228290 502525,228558 502835,228718 C 503146,228879 503400,229133 503400,229283 C 503400,229434 503648,229618 503950,229693 C 504252,229768 504841,230183 505258,230615 C 505675,231048 506319,231528 506689,231682 C 507059,231837 507419,232143 507488,232363 C 507558,232583 507747,232814 507908,232875 C 508068,232937 508200,233222 508200,233508 C 508200,234090 509287,235799 509660,235802 C 510094,235807 512200,238020 512200,238473 C 512200,239858 510042,242550 509118,242317 C 508908,242264 508514,242396 508241,242610 C 507969,242825 507500,243000 507199,243000 C 506533,243000 505074,244483 504898,245338 C 504452,247510 503963,247441 501086,244799 C 500348,244122 499126,243748 497500,243701 C 496840,243682 496014,243597 495665,243511 C 495069,243365 495019,243396 494837,244028 C 494731,244398 494585,244841 494514,245014 C 494425,245231 494549,245404 494913,245569 C 495468,245822 495481,246697 494934,247045 C 494586,247266 492843,247231 492700,247000 C 492343,246423 491782,246801 491918,247527 C 492049,248223 491997,248311 490677,249631 C 488724,251585 488200,252188 488200,252486 C 488200,252629 488011,252987 487779,253281 C 487304,253885 487378,255005 487924,255451 C 488091,255588 488402,255857 488614,256050 C 489391,256755 490215,256411 491944,254660 C 492619,253976 492947,253494 492871,253296 C 492801,253114 492955,252803 493248,252531 C 493520,252279 493778,251982 493821,251871 C 493865,251760 494547,251249 495337,250736 C 496128,250223 496827,249719 496890,249617 C 496953,249514 497266,249373 497586,249303 C 497905,249233 498213,249055 498269,248908 C 498326,248760 498761,248575 499236,248496 C 499711,248417 500326,248237 500602,248096 C 501013,247886 501197,247887 501608,248103 C 501885,248248 502694,248469 503406,248594 C 505246,248917 505400,248980 505400,249420 C 505400,249906 505976,250159 506219,249779 C 506342,249587 506274,249415 505999,249226 C 505442,248842 505492,248080 506100,247682 C 506375,247501 506601,247252 506601,247127 C 506604,246684 507968,245925 508286,246189 C 508483,246352 508690,246366 508937,246234 C 509380,245998 512559,245597 512913,245733 C 513053,245786 513398,245679 513680,245495 C 514069,245240 514422,245191 515146,245291 C 515671,245363 516595,245413 517200,245402 C 518681,245374 519959,245752 520338,246330 C 520735,246936 521000,246929 521000,246312 C 521000,245780 521297,245472 521498,245797 C 521686,246101 522350,246042 522914,245672 C 523368,245375 523485,245373 524193,245651 C 524823,245898 525042,245909 525336,245708 C 525536,245572 525945,245400 526244,245328 C 526602,245241 527011,244850 527444,244183 C 527924,243442 528434,242983 529348,242469 C 530035,242083 530757,241564 530952,241316 C 531148,241067 531531,240746 531804,240602 C 532444,240264 532593,240026 532597,239337 C 532600,238695 532859,238141 533415,237585 C 533627,237373 533800,237117 533800,237015 C 533800,236807 535894,235800 536324,235800 C 536476,235800 536960,236160 537400,236600 C 538341,237541 538842,237601 539503,236850 C 540083,236191 540102,236044 539664,235560 C 539367,235232 539357,235072 539581,234200 C 539720,233656 539775,232941 539702,232611 C 539612,232199 539734,231550 540091,230545 C 540377,229739 540688,228385 540784,227536 C 540879,226688 541076,225849 541222,225673 C 541535,225296 541993,224046 541997,223557 C 541999,223368 542179,223118 542398,223001 C 542962,222699 543400,221753 543400,220835 C 543400,220055 543928,218652 544500,217912 C 544665,217698 544800,217371 544800,217185 C 544800,216998 545025,216699 545300,216518 C 545575,216338 545800,216027 545800,215826 C 545800,215626 545976,215303 546191,215109 C 546477,214849 546550,214600 546464,214172 C 546388,213791 546454,213470 546655,213245 C 546824,213055 547061,212530 547182,212078 C 547750,209943 550202,208558 551070,209883 C 551244,210148 551740,210521 552172,210712 C 552870,211020 553800,212264 553800,212890 C 553800,212970 553994,213193 554231,213385 C 554591,213676 554678,214003 554756,215359 C 554829,216612 554936,217061 555225,217323 C 555431,217509 555600,217881 555600,218149 C 555600,218418 555780,218866 556000,219145 C 556540,219832 556503,220447 555877,221190 C 555390,221770 555364,221900 555494,223114 L 555633,224415 L 556718,225027 C 557314,225364 557869,225748 557951,225882 C 558206,226297 559069,226800 559525,226800 C 559811,226800 560103,227041 560375,227503 C 560603,227890 561032,228298 561328,228410 C 561623,228523 562863,229638 564082,230889 C 565864,232716 566463,233207 567127,233383 C 567581,233504 568065,233737 568201,233901 C 568337,234066 568522,234200 568612,234200 C 569123,234200 570046,235389 569922,235885 C 569638,237016 571123,238122 572082,237493 C 572520,237207 572630,237208 573331,237505 C 573754,237684 574505,237905 575000,237995 C 576306,238233 578400,239045 579223,239633 C 579806,240050 580200,239693 580200,238746 C 580200,238270 580300,237780 580423,237657 C 580546,237534 580748,237259 580873,237045 C 581642,235729 582234,235035 582684,234922 C 582998,234843 583240,234608 583315,234312 C 583382,234046 583608,233674 583818,233484 C 584028,233294 584200,232936 584200,232689 C 584200,232442 584568,231759 585017,231170 L 585835,230100 L 585725,228300 C 585617,226521 585623,226492 586215,225800 L 586813,225100 L 587557,225525 C 587966,225759 588674,226013 589132,226090 C 589590,226167 590121,226403 590313,226615 C 591397,227812 593082,226167 592854,224137 C 592772,223409 592836,223117 593175,222686 C 593476,222304 593600,221862 593600,221175 C 593600,220420 593689,220148 594000,219954 C 594618,219568 594618,211859 594000,211300 C 593344,210706 593527,210243 595016,208735 C 595795,207946 596574,207030 596746,206700 C 596918,206370 597361,205731 597730,205279 C 598284,204601 598401,204289 598406,203479 C 598410,202941 598541,202330 598698,202123 C 598855,201916 599043,201331 599116,200823 C 599189,200315 599370,199761 599519,199591 C 599919,199132 600714,197579 600870,196950 C 600980,196512 601123,196400 601573,196400 C 601892,196400 602303,196218 602516,195983 C 603152,195279 604552,194427 605303,194286 C 606574,194048 607350,195440 606418,196284 C 606208,196474 605976,196870 605902,197165 C 605829,197459 605635,197848 605472,198030 C 605223,198306 605211,198559 605401,199607 C 605796,201785 602589,206400 600681,206400 C 599508,206400 598424,207730 598701,208831 C 598821,209309 598648,209599 597452,210919 C 597206,211191 596949,211632 596882,211899 C 596816,212165 596635,212488 596480,212616 C 596116,212918 596124,213288 596502,213601 C 596668,213739 596858,214193 596925,214610 C 596994,215046 597249,215544 597523,215783 C 598003,216200 598061,216516 598090,218900 C 598105,220101 599015,220150 600207,219016 C 600674,218572 601215,218159 601410,218097 C 601604,218035 601873,217853 602006,217692 C 602140,217532 602401,217400 602586,217400 C 602933,217400 604994,215218 605234,214598 C 605309,214405 605678,214192 606064,214120 C 606447,214048 606870,213857 607004,213695 C 607139,213533 607371,213400 607519,213400 C 607977,213400 608449,212272 608174,211833 C 607608,210927 608706,209736 609661,210221 C 610222,210505 611956,212347 612105,212816 C 612167,213012 612477,213229 612793,213298 C 613109,213368 613568,213599 613814,213812 C 614060,214026 614467,214200 614719,214200 C 614970,214200 615231,214288 615297,214395 C 615363,214502 615766,214683 616193,214798 C 616840,214972 616994,215116 617112,215654 C 617190,216009 617407,216407 617595,216539 C 618099,216892 617922,221790 617373,222691 C 617169,223026 617001,223550 617001,223856 C 617000,224439 614344,227264 613564,227512 C 613364,227575 613148,227839 613082,228099 C 613017,228358 612792,228726 612582,228916 C 612372,229106 612200,229472 612200,229728 C 612200,230050 611953,230358 611400,230724 C 609773,231800 610259,233502 612922,236050 L 614332,237400 L 615975,237400 C 618248,237400 618924,236789 618380,235229 C 618241,234829 617984,234553 617679,234477 C 616521,234186 615644,231984 616411,231290 C 617227,230552 620200,230699 620200,231478 C 620200,231623 620426,231985 620701,232283 C 621204,232825 621322,234984 620906,236026 C 620675,236604 621672,237464 622442,237351 C 622801,237299 623253,237355 623447,237476 C 623709,237639 623903,237632 624199,237447 C 624536,237237 624660,237260 624999,237599 C 625220,237820 625603,238000 625850,238001 C 626455,238002 629094,239042 629559,239463 C 629806,239687 630276,239800 630954,239800 C 631741,239800 632040,239890 632249,240189 C 632399,240402 632967,240807 633511,241087 C 634055,241367 634811,241913 635190,242298 C 635570,242684 636047,243000 636250,243000 C 636453,243000 636772,243270 636959,243601 C 637147,243931 637477,244258 637693,244328 C 638826,244693 640418,246640 640289,247503 L 640165,248331 L 641879,249916 C 642822,250787 643595,251606 643597,251736 C 643599,251866 643863,252160 644185,252389 C 644506,252618 644826,253065 644896,253382 C 644966,253699 645198,254117 645411,254310 C 645977,254822 645896,255143 645000,255947 C 644068,256784 643885,257817 644600,258200 C 645348,258601 644961,259569 643423,261142 C 642952,261624 642600,262177 642600,262435 C 642600,262682 642375,263113 642099,263392 C 639256,266275 639180,266391 639769,266950 C 641766,268846 642289,269281 642593,269303 C 642882,269324 643697,269889 645070,271020 C 645435,271321 644983,272000 644418,272000 C 644112,272000 643699,272180 643500,272400 C 642940,273019 641317,272965 640891,272314 C 640058,271043 638000,271335 638000,272724 C 638000,273222 637799,273400 636900,273700 C 636101,273966 636031,274863 636800,274968 C 637075,275006 637458,275178 637651,275350 C 638045,275702 638609,276040 639500,276457 C 639830,276612 640225,276889 640378,277074 C 640542,277271 640806,277361 641020,277294 C 641257,277218 641473,277323 641642,277595 C 642113,278354 643603,278940 643929,278494 C 644333,277941 644259,277471 643684,276938 C 642296,275650 643928,274645 645875,275588 C 646343,275815 647008,276000 647351,276000 C 647695,276000 648032,276090 648100,276200 C 648305,276531 650139,276447 650272,276100 C 650336,275935 650583,275800 650822,275800 C 651229,275800 651249,275732 651140,274680 C 650985,273174 651218,272600 651985,272600 C 652333,272600 652658,272461 652767,272266 C 652870,272082 653256,271789 653624,271615 C 654429,271235 654594,270673 654018,270270 C 653470,269886 653491,269561 654111,268823 C 654649,268184 654599,267780 653911,267209 C 653559,266917 653497,265765 653803,265194 C 654205,264444 655481,264313 656510,264916 C 657218,265331 657581,265423 658159,265334 C 659028,265200 659203,265315 660353,266776 C 661299,267978 661316,268034 660914,268657 C 660757,268901 660525,269682 660398,270392 C 660248,271231 660015,271832 659734,272105 C 658797,273013 657991,274065 657873,274535 C 657805,274806 657581,275133 657375,275262 C 656449,275841 657981,277400 659476,277400 C 659661,277400 659863,277532 659925,277692 C 659986,277853 660217,278042 660437,278112 C 660657,278181 660965,278522 661121,278869 C 661278,279216 661495,279658 661603,279850 C 661711,280043 661876,280358 661970,280550 C 662063,280743 662341,281003 662589,281128 C 662836,281253 663367,281665 663769,282042 C 664171,282420 664760,282902 665078,283114 C 665396,283326 665782,283590 665936,283700 C 666143,283847 666309,283779 666565,283442 C 667119,282715 669968,282627 670617,283318 C 670876,283594 671298,283800 671604,283800 C 671991,283800 672444,284116 673254,284950 C 676253,288041 677186,288918 678059,289469 C 678366,289662 678698,290032 678796,290290 C 678894,290548 679142,290881 679347,291030 C 679551,291178 679930,291660 680189,292100 C 680722,293006 681814,294113 682345,294284 C 683240,294574 683600,295597 683600,297849 C 683600,300436 683739,300841 685043,302050 C 686456,303360 687600,303324 687600,301969 C 687600,301667 687704,301190 687832,300909 C 688003,300535 688006,300272 687845,299919 C 687686,299569 687687,299240 687848,298713 C 688049,298059 688028,297957 687635,297682 C 687086,297297 687010,295541 687519,294979 C 687813,294654 687803,294532 687401,293463 C 686535,291166 686865,290293 688406,290802 C 689931,291305 690344,292191 689632,293429 C 689152,294262 689078,294998 689436,295356 C 689566,295486 689723,295976 689786,296446 C 689897,297277 689923,297303 690754,297414 C 692148,297600 692335,298865 691145,300055 C 690948,300252 690468,300911 690080,301518 C 689691,302126 689244,302672 689087,302733 C 688661,302896 688738,303369 689300,304036 C 690611,305595 688938,306811 687424,305400 C 686312,304363 686159,304386 685413,305707 C 685070,306316 684589,306891 684344,306984 C 684100,307078 683729,307344 683519,307577 C 683109,308032 681926,308166 681690,307783 C 681616,307664 681183,307395 680728,307186 C 680273,306976 679747,306694 679559,306559 C 679276,306355 679137,306389 678746,306757 C 678487,307001 678036,307200 677744,307200 C 677426,307200 677132,307354 677009,307584 C 676896,307795 676553,308022 676248,308090 C 675942,308157 675424,308434 675096,308705 L 674500,309198 L 674975,309602 C 675237,309824 675687,310063 675975,310134 C 676264,310205 676869,310564 677321,310932 C 677772,311299 678328,311600 678556,311600 C 678784,311600 679148,311825 679364,312100 C 679581,312375 679830,312600 679918,312600 C 680006,312600 680309,312821 680591,313091 C 681086,313566 682404,314376 683369,314799 C 683627,314912 684212,315301 684669,315663 C 685126,316026 685750,316429 686056,316559 C 686361,316690 686663,316932 686727,317098 C 686794,317274 687092,317400 687440,317400 C 687768,317400 688269,317583 688553,317806 C 688881,318064 689330,318200 689785,318180 C 690178,318163 690725,318239 691000,318349 C 692066,318778 694390,318871 694799,318501 C 695318,318031 701416,317982 701959,318444 C 702784,319145 704065,319603 704390,319313 C 704561,319160 705150,318970 705700,318891 C 706250,318811 706939,318578 707231,318373 C 707523,318168 707819,318000 707889,318000 C 707959,318000 708215,317813 708458,317585 C 708923,317147 710179,317168 710727,317622 C 710862,317735 711289,317866 711675,317914 C 712844,318059 713387,318359 713721,319045 C 714079,319780 715726,321200 716220,321200 C 716398,321200 716974,321530 717502,321933 C 719487,323448 720051,323640 722667,323689 L 725034,323733 L 725967,322669 C 727032,321455 727207,321414 728419,322097 C 728903,322371 729435,322653 729600,322723 C 731035,323337 732075,323926 732267,324233 C 732619,324796 734400,324763 734400,324194 C 734400,323970 734268,323737 734108,323675 C 733947,323614 733759,323386 733691,323170 C 733509,322599 732034,321600 731372,321600 C 731020,321600 730708,321448 730554,321200 C 730409,320969 730087,320800 729791,320800 C 729483,320800 728971,320519 728510,320097 C 728088,319710 727508,319336 727221,319266 C 726934,319196 726485,318973 726223,318770 C 725961,318566 725625,318400 725478,318400 C 725330,318400 725062,318175 724882,317900 C 724701,317625 724402,317400 724217,317400 C 724032,317400 723794,317315 723690,317210 C 723337,316858 721581,316000 721213,316000 C 721013,316000 720327,315595 719689,315100 C 719052,314605 718451,314200 718355,314200 C 718258,314200 718048,313885 717887,313500 C 717726,313115 717508,312800 717402,312800 C 717148,312800 716600,311725 716600,311226 C 716600,311010 716446,310564 716258,310237 C 715958,309715 715952,309599 716206,309293 C 716365,309101 716468,308740 716436,308491 C 716403,308242 716472,307979 716588,307907 C 716705,307835 716800,307270 716800,306651 C 716800,305826 716901,305415 717178,305113 C 717386,304886 717656,304224 717778,303643 C 718325,301027 719985,300551 721717,302513 C 723879,304961 724107,305199 724284,305200 C 724385,305200 724989,305737 725625,306394 C 726820,307626 727833,308200 728813,308200 C 729462,308200 729552,308310 730117,309800 C 730452,310684 730676,310968 731259,311248 C 732484,311836 732908,315248 731843,315954 C 731002,316513 731170,316833 733399,318918 C 734292,319753 734414,319808 735032,319646 C 735477,319530 735987,319558 736561,319730 C 737145,319904 738017,319949 739261,319869 C 740964,319759 741128,319781 741481,320175 C 741691,320409 741953,320600 742065,320600 C 742177,320600 742427,320744 742622,320920 C 743084,321338 743400,321122 743400,320388 C 743400,319556 744037,319595 744414,320450 C 744687,321070 745600,321508 745600,321018 C 745600,320205 747514,319874 748619,320497 C 749873,321204 750364,321400 750874,321400 C 751576,321400 753856,322213 754313,322627 C 754542,322834 755032,323003 755413,323007 C 755791,323011 756325,323143 756600,323300 C 756875,323457 757348,323589 757650,323593 C 757953,323597 758383,323783 758606,324006 C 758830,324230 759282,324466 759610,324532 C 759939,324598 760257,324730 760316,324826 C 760375,324922 760586,325000 760785,325000 C 760984,325000 761381,325185 761667,325410 C 762090,325743 762267,325778 762606,325597 C 762836,325474 763280,325430 763593,325498 C 763915,325569 764219,325532 764293,325412 C 764365,325295 764758,325200 765167,325200 C 767059,325200 767441,326802 765877,328178 C 764408,329472 764826,330191 767050,330197 L 768000,330200 L 768000,357100 L 768000,384000 L 384000,384000 L 0,384000 L 0,357500 z M 320860,371872 C 320948,371722 321158,371600 321327,371600 C 321899,371600 321473,371100 320848,371038 C 320380,370992 320170,371082 319998,371404 C 319858,371665 319652,371786 319467,371715 C 319301,371651 318927,371786 318636,372015 L 318108,372430 L 319404,372287 C 320150,372204 320768,372028 320860,371872 z M 327114,371984 C 327389,371681 327641,371598 328045,371679 C 328759,371822 328762,371499 328050,371158 C 327723,371002 327500,370733 327500,370497 C 327500,370032 327249,369807 326724,369803 C 326399,369800 326366,369905 326475,370588 C 326547,371041 326516,371428 326400,371500 C 326103,371684 326158,372400 326469,372400 C 326617,372400 326907,372213 327114,371984 z M 324877,371687 C 325186,370883 324033,369723 323040,369838 C 322171,369938 322248,371075 323129,371161 C 323475,371195 323916,371397 324110,371611 C 324536,372082 324719,372100 324877,371687 z M 307911,371583 C 307985,371463 307955,371275 307844,371164 C 307596,370916 306731,371327 306906,371610 C 307066,371869 307745,371850 307911,371583 z M 309600,371512 C 309600,371353 309516,371172 309414,371109 C 309176,370962 308937,371336 309100,371600 C 309284,371898 309600,371842 309600,371512 z M 317410,371288 C 317552,371117 317968,370852 318334,370699 C 319053,370398 319209,369923 318657,369711 C 318412,369617 318097,369820 317562,370417 C 316488,371617 315042,371700 314231,370610 C 313575,369729 313353,369567 313122,369798 C 312935,369985 313294,370666 313901,371272 C 314357,371728 317034,371741 317410,371288 z M 357634,371269 C 358047,370895 358121,370400 357763,370400 C 357488,370400 356600,371190 356600,371435 C 356600,371720 357252,371615 357634,371269 z M 360563,371250 C 360481,370823 359600,370643 359600,371053 C 359600,371435 359795,371600 360248,371600 C 360503,371600 360607,371484 360563,371250 z M 347533,371267 C 347460,371193 347340,371193 347267,371267 C 347193,371340 347253,371400 347400,371400 C 347547,371400 347607,371340 347533,371267 z M 306400,370721 C 306400,370314 305942,370200 304311,370200 C 303147,370200 302749,370118 302335,369792 C 301781,369356 297885,369175 296139,369505 C 295208,369681 295073,370566 296000,370422 C 297529,370185 300925,370324 301500,370647 C 302303,371098 306400,371160 306400,370721 z M 366900,370600 C 366968,370490 366889,370400 366724,370400 C 366559,370400 366368,370490 366300,370600 C 366232,370710 366311,370800 366476,370800 C 366641,370800 366832,370710 366900,370600 z M 371000,369629 C 371000,368976 369997,368392 369403,368698 C 368611,369108 368642,369285 369550,369539 C 370524,369812 371000,369842 371000,369629 z M 327300,367367 C 328842,367463 329267,366879 328150,366198 C 327702,365924 327143,365801 326350,365801 L 325200,365800 L 325200,366722 L 325200,367645 L 325950,367487 C 326363,367401 326970,367347 327300,367367 z M 330611,366671 L 330812,366142 L 331256,366553 C 332141,367373 333420,367088 334491,365833 C 335486,364667 335507,364349 334579,364534 C 334137,364623 333817,364540 333395,364228 C 332674,363695 332197,363687 331545,364200 C 331266,364420 330948,364600 330840,364600 C 330731,364600 330590,364736 330527,364903 C 330463,365070 330183,365292 329905,365398 C 329397,365591 329247,366169 329521,366884 C 329716,367392 330387,367261 330611,366671 z M 335733,363667 C 335660,363593 335600,363653 335600,363800 C 335600,363947 335660,364007 335733,363933 C 335807,363860 335807,363740 335733,363667 z M 234933,357867 C 234860,357793 234740,357793 234667,357867 C 234593,357940 234653,358000 234800,358000 C 234947,358000 235007,357940 234933,357867 z M 608600,356200 C 608600,356090 608460,356000 608288,356000 C 608117,356000 608032,356090 608100,356200 C 608168,356310 608308,356400 608412,356400 C 608515,356400 608600,356310 608600,356200 z M 118735,353050 C 119582,351987 119502,351464 118375,350683 C 117583,350134 117580,350127 117708,349106 C 117828,348141 117806,348067 117318,347845 C 116331,347395 116661,345200 117716,345200 C 117955,345200 118263,345065 118400,344900 C 118537,344735 118916,344600 119242,344600 C 119601,344600 119968,344436 120170,344187 C 120473,343814 120709,343776 122603,343797 C 123756,343809 125082,343820 125548,343819 C 126186,343819 126448,343916 126606,344211 C 126766,344510 127015,344599 127658,344586 C 128121,344577 129005,344631 129621,344707 C 130536,344819 130794,344784 131021,344513 C 131175,344330 131421,344073 131568,343940 C 131716,343808 132185,343363 132610,342950 C 133097,342478 133575,342200 133898,342200 C 134213,342200 134455,342064 134523,341850 C 134684,341335 134953,340783 135405,340037 C 136047,338977 135601,338647 134681,339500 C 134291,339861 133918,340000 133337,340000 C 132873,340000 132379,340138 132172,340326 C 131894,340577 131355,340657 129822,340676 C 128083,340697 127773,340754 127366,341130 C 126736,341711 121942,341738 121521,341163 C 121056,340527 120216,340486 119672,341073 C 119026,341770 117160,341851 116754,341200 C 116245,340386 115131,340655 113856,341900 C 112583,343143 110883,343502 110414,342626 C 110000,341852 109063,341649 105456,341552 C 103562,341501 101897,341369 101756,341259 C 100855,340552 99208,340568 98609,341289 C 98261,341708 98111,341684 97491,341109 C 97091,340738 96821,340646 96391,340732 C 95947,340821 95545,340665 94563,340023 C 93123,339082 92859,339039 92118,339621 C 91678,339968 91424,340019 90693,339909 C 89899,339790 89750,339833 89311,340307 C 88886,340766 88714,340821 88050,340708 C 87430,340604 87170,340666 86710,341028 C 86189,341438 85915,341479 83603,341494 C 81516,341507 80969,341574 80517,341870 C 80027,342191 79400,342234 74725,342265 C 70106,342296 69419,342342 68948,342650 C 68654,342843 68073,343003 67657,343006 C 66839,343013 65800,343731 65800,344290 C 65800,344720 66766,344693 67255,344250 C 67959,343613 73889,343559 74737,344182 C 75263,344569 75591,344598 79700,344624 C 83674,344650 84146,344689 84579,345028 C 84959,345326 85337,345393 86407,345352 C 87463,345311 87841,345376 88144,345650 C 88682,346136 93407,346174 93804,345695 C 94030,345423 94100,345429 94450,345745 C 94795,346058 95329,346104 98960,346137 C 102960,346173 103089,346187 103414,346618 C 103623,346895 103869,347016 104069,346940 C 104955,346600 106000,347563 106000,348719 C 106000,349442 106926,350186 107836,350194 C 108240,350197 108706,350335 108871,350500 C 109051,350680 109541,350800 110095,350800 C 110818,350800 111129,350911 111528,351310 C 111931,351713 112262,351829 113112,351863 C 113703,351887 114298,352018 114433,352153 C 114569,352289 114919,352400 115210,352400 C 115502,352400 116047,352617 116420,352883 C 117240,353465 118340,353545 118735,353050 z M 715745,353000 C 716149,352683 716557,352600 717715,352600 C 718519,352600 719232,352510 719300,352400 C 719701,351751 715899,351538 715321,352177 C 715133,352384 714714,352607 714390,352672 C 714046,352741 713800,352917 713800,353095 C 713800,353554 715123,353489 715745,353000 z M 122850,352103 C 123471,351557 123544,351243 123090,351068 C 122703,350920 121800,351736 121800,352235 C 121800,352732 122191,352683 122850,352103 z M 686703,350876 C 686490,350551 686227,350397 685953,350438 C 685304,350534 685315,350931 685972,351160 C 686297,351273 686635,351576 686724,351833 L 686885,352300 L 686958,351838 C 686998,351585 686883,351152 686703,350876 z M 689600,350200 C 689600,350090 689510,350000 689400,350000 C 689290,350000 689200,350090 689200,350200 C 689200,350310 689290,350400 689400,350400 C 689510,350400 689600,350310 689600,350200 z M 214200,348312 C 214200,347933 213914,347769 213518,347921 C 213011,348115 213141,348600 213700,348600 C 214002,348600 214200,348486 214200,348312 z M 224600,345112 C 224600,344733 224259,344534 223868,344685 C 223615,344782 223602,344862 223802,345102 C 224117,345482 224600,345488 224600,345112 z M 447733,342667 C 447660,342593 447600,342653 447600,342800 C 447600,342947 447660,343007 447733,342933 C 447807,342860 447807,342740 447733,342667 z M 211362,339595 C 212446,339072 212425,338800 211300,338800 C 210433,338800 210400,338822 210400,339400 C 210400,340113 210324,340097 211362,339595 z M 141800,338550 C 142099,338180 142371,338099 143332,338088 C 144111,338080 144686,337954 145059,337709 C 145711,337281 145704,336693 145047,336714 C 144801,336722 143831,336745 142891,336764 C 141304,336797 141146,336839 140677,337350 C 140399,337653 139996,338085 139781,338312 C 139279,338841 139457,339000 140551,339000 C 141227,339000 141522,338894 141800,338550 z M 153234,337869 C 154037,337143 153321,336358 152150,336680 C 151494,336861 150526,337719 150686,337978 C 150906,338333 152812,338252 153234,337869 z M 127991,333911 C 128660,333104 127467,331882 126510,332395 C 126050,332641 125952,332625 125536,332234 C 125282,331995 124887,331800 124659,331800 C 124430,331800 124191,331665 124128,331500 C 123980,331114 123400,331108 123400,331493 C 123400,331654 123580,331882 123800,332000 C 124033,332124 124200,332419 124200,332703 C 124200,333071 124337,333226 124750,333327 C 125053,333401 125614,333628 125997,333831 C 126833,334273 127662,334307 127991,333911 z M 214294,334010 C 214358,333906 214229,333722 214006,333603 C 213548,333358 213476,332809 213850,332421 C 214052,332211 214024,332175 213700,332232 C 213212,332319 213001,333751 213436,334027 C 213788,334250 214150,334243 214294,334010 z M 447237,325397 C 448008,325392 448382,325030 447916,324740 C 447705,324608 447199,324208 446792,323850 C 446385,323493 445865,323200 445638,323200 C 445410,323200 445168,323110 445100,323000 C 445032,322890 444802,322800 444588,322800 C 443836,322800 444121,323667 445100,324357 C 445669,324759 446000,325143 446000,325403 C 446000,325747 446063,325781 446387,325607 C 446600,325493 446982,325399 447237,325397 z M 437152,324023 C 437643,323358 437565,323200 436749,323200 C 436164,323200 435420,323837 435407,324350 C 435393,324879 436700,324634 437152,324023 z M 460684,324479 C 461044,324340 461119,323297 460784,323090 C 460508,322920 459324,324116 459495,324393 C 459638,324623 460200,324664 460684,324479 z M 451388,323423 C 451499,323216 451826,322987 452115,322914 C 453576,322547 454154,321593 453210,321105 C 451855,320405 449800,321017 449800,322122 C 449800,323216 450981,324184 451388,323423 z M 96533,315067 C 96460,314993 96400,315053 96400,315200 C 96400,315347 96460,315407 96533,315333 C 96607,315260 96607,315140 96533,315067 z M 98300,314800 C 98368,314690 98233,314600 98000,314600 C 97767,314600 97632,314690 97700,314800 C 97768,314910 97903,315000 98000,315000 C 98097,315000 98232,314910 98300,314800 z M 175620,305579 C 176260,304894 176297,304755 175992,304185 C 175736,303706 174400,304841 174400,305537 C 174400,306391 174847,306406 175620,305579 z M 121561,295450 C 121527,294928 121410,294500 121300,294500 C 121190,294500 121073,294928 121039,295450 C 120990,296215 121041,296400 121300,296400 C 121559,296400 121610,296215 121561,295450 z M 200174,294859 C 202784,293415 203313,292726 202426,291924 C 201795,291353 198525,291400 197539,291994 C 196638,292537 194269,292505 193645,291941 C 192947,291311 190800,291944 190800,292780 C 190800,293313 191181,293558 192414,293817 C 193011,293942 193648,294175 193829,294335 C 194010,294494 194757,294833 195490,295089 C 196222,295345 196878,295611 196947,295680 C 197240,295973 198944,295540 200174,294859 z M 465763,290814 C 465825,289949 464865,288600 464189,288600 C 464085,288600 464000,288250 464000,287821 C 464000,287031 464223,286800 464985,286800 C 465179,286800 465501,286620 465700,286400 C 465899,286180 466253,286000 466486,286000 C 466965,286000 467769,285501 468161,284960 C 468305,284762 468627,284600 468876,284600 C 469126,284600 469542,284375 469800,284100 C 470058,283825 470437,283600 470641,283600 C 471267,283600 473004,281759 472868,281240 C 472805,280998 472687,280800 472606,280800 C 472525,280800 472221,280580 471931,280311 L 471403,279822 L 466883,279894 C 462629,279962 462335,279991 461918,280383 C 461674,280612 461265,280800 461009,280800 C 460753,280800 460429,280958 460288,281150 C 460076,281439 459714,281500 458220,281500 C 456568,281500 456380,281540 456093,281950 C 455684,282534 455054,282523 454583,281924 C 454264,281518 454081,281463 453342,281546 C 452571,281633 452436,281585 452126,281112 C 451868,280718 451673,280613 451372,280709 C 451102,280795 450815,280696 450515,280414 C 449814,279756 446056,279644 445797,280274 C 445700,280508 445304,280925 444916,281200 C 444046,281817 443854,283487 444600,283954 C 444888,284133 445000,284420 445000,284976 C 445000,285753 448401,289575 450049,290650 C 450798,291138 451926,291112 452200,290600 C 452327,290362 452619,290200 452920,290200 C 453403,290200 454029,289633 454800,288495 C 455349,287685 456418,286943 457255,286790 C 458640,286537 460086,288582 459100,289400 C 458601,289814 458742,290200 459393,290200 C 459781,290200 460060,290338 460200,290600 C 460367,290912 460622,291001 461357,291004 C 461990,291007 462464,291139 462800,291405 C 463194,291717 463554,291790 464500,291751 L 465700,291700 L 465763,290814 z M 495094,291207 C 495440,290824 495418,290783 494319,289727 C 491433,286954 491346,286423 493446,284396 C 494242,283628 494962,283000 495046,283000 C 495131,283000 495200,282506 495200,281902 C 495200,281020 495279,280754 495600,280554 C 495936,280344 496000,280087 496000,278960 C 496000,277649 496019,277598 496800,276876 C 497694,276048 497788,275632 497200,275100 C 496687,274636 496674,273681 497177,273412 C 497384,273301 497615,272966 497690,272668 C 497765,272369 497970,272020 498146,271891 C 498595,271562 498321,271000 497711,271000 C 497435,271000 496915,270820 496555,270601 C 495650,270049 494095,270049 493800,270600 C 493682,270820 493495,271000 493385,271000 C 492971,271000 490685,272181 490300,272594 C 490080,272830 489698,273230 489450,273484 C 488893,274055 488876,274519 489400,274800 C 489692,274956 489800,275219 489800,275775 C 489800,276392 489894,276579 490300,276764 C 490910,277042 491061,278912 490491,279131 C 490322,279196 490015,279576 489810,279975 C 489605,280374 489246,280880 489013,281100 C 488780,281320 488344,281763 488045,282084 C 487745,282404 487298,282848 487050,283070 C 486802,283291 486600,283579 486600,283709 C 486600,283839 486420,284175 486200,284455 C 485980,284734 485800,285230 485800,285557 C 485800,285947 485649,286251 485362,286442 C 484778,286830 486476,288600 487431,288600 C 487802,288600 488097,288763 488308,289084 C 488482,289350 489014,289750 489489,289974 C 489965,290197 490654,290655 491021,290990 C 491880,291775 494456,291911 495094,291207 z M 201560,289160 C 201972,288748 201826,288198 201129,287537 C 200017,286482 199468,285013 199990,284490 C 200932,283547 199806,281064 198557,281329 C 195888,281895 197980,289388 200810,289398 C 201091,289399 201428,289292 201560,289160 z M 208350,288967 C 209088,288750 209347,288767 210309,289094 C 212433,289816 213638,288408 211786,287369 C 211271,287080 210691,286497 210277,285850 C 209480,284605 209035,284516 207976,285389 C 206532,286579 205905,289757 207200,289319 C 207365,289263 207883,289105 208350,288967 z M 514119,288679 L 514500,287957 L 514000,287631 C 513725,287452 513261,287056 512970,286753 C 512301,286056 510412,285937 509961,286563 C 509818,286763 509543,286985 509350,287057 C 508917,287218 508896,287573 509310,287731 C 509487,287800 509745,287690 509915,287475 C 510195,287120 510265,287160 511251,288250 C 512587,289727 513492,289862 514119,288679 z M 212360,282160 C 212731,281789 212658,281641 211850,281135 C 210343,280189 209114,280295 209238,281359 C 209342,282250 211672,282848 212360,282160 z M 445760,279067 C 445848,278470 445340,278168 444365,278238 C 443267,278317 443193,278801 444234,279094 C 444637,279207 445037,279369 445121,279454 C 445368,279701 445695,279503 445760,279067 z M 509600,247633 C 509600,247373 509362,247200 509169,247319 C 508962,247447 509140,247800 509412,247800 C 509515,247800 509600,247725 509600,247633 z M 455320,191520 C 455379,191365 455736,191181 456114,191111 C 456962,190951 457141,189797 456381,189390 C 456032,189203 455984,189048 456093,188468 C 456246,187654 455962,187200 455300,187200 C 455052,187200 454706,186998 454531,186750 L 454214,186300 L 453607,186953 C 452582,188056 452710,189481 453950,190771 C 454985,191848 455158,191942 455320,191520 z M 229400,101207 C 229400,100366 229146,100104 228200,99970 C 227768,99910 227709,99968 227764,100400 C 227799,100675 227835,101148 227843,101450 C 227871,102496 229400,102257 229400,101207 z"
+ id="path8"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 348128,366700 C 348063,366531 347765,366400 347446,366400 C 346454,366400 345920,365051 346750,364642 C 347429,364307 350385,364598 350611,365021 C 350780,365336 351044,365400 352167,365400 C 354053,365400 354501,365858 353326,366584 C 352452,367124 348326,367216 348128,366700 z"
+ id="path10"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 507933,365909 C 507701,365733 507313,365672 506878,365742 C 506391,365821 506081,365755 505815,365513 C 505459,365191 505392,365196 504612,365594 C 504158,365826 503685,365952 503560,365875 C 503436,365799 502745,365715 502025,365689 C 500883,365649 500663,365576 500301,365121 C 500008,364754 499695,364600 499242,364600 C 498428,364600 498389,364142 499137,363361 C 499862,362604 501049,362861 501950,363969 C 502168,364236 502200,364219 502200,363838 C 502200,363462 502310,363400 502987,363400 C 503420,363400 504023,363305 504326,363190 C 505268,362832 507590,362784 508219,363110 C 509020,363524 509383,363471 509598,362906 C 509966,361936 511410,362177 513025,363477 C 513313,363710 513831,364053 514175,364241 C 515670,365056 514635,365619 511604,365639 C 510196,365648 509354,365743 509057,365927 C 508513,366262 508397,366261 507933,365909 z"
+ id="path12"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 521634,365425 C 521483,365329 521396,365007 521434,364678 C 521524,363889 522297,363756 522624,364474 C 523026,365354 522428,365928 521634,365425 z"
+ id="path14"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 488824,365050 C 488679,364792 488263,364734 486573,364741 C 484110,364751 483469,364347 484177,363230 C 484376,362917 486704,362787 488347,362998 C 489283,363118 489441,363082 489840,362658 C 490397,362065 491075,362124 491167,362773 C 491226,363194 491312,363234 491927,363134 C 492695,363010 493030,363382 492609,363889 C 492425,364111 492445,364282 492697,364668 C 493120,365313 493033,365346 490851,365357 C 489364,365365 488966,365304 488824,365050 z"
+ id="path16"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 587016,365119 C 586828,364892 586674,364856 586503,364998 C 586258,365201 584677,365144 583437,364888 C 583018,364801 582408,364380 581780,363742 L 580787,362732 L 581440,362058 C 582037,361442 582115,361414 582344,361727 C 582700,362214 585195,362243 585728,361767 C 585933,361584 586460,361369 586900,361291 C 587340,361212 587792,361075 587905,360987 C 588456,360554 590137,360549 590537,360978 L 590930,361400 L 592161,360900 C 593465,360371 594114,360288 594594,360592 C 594795,360719 595087,360655 595518,360389 C 596316,359896 596258,359887 597093,360621 C 598721,362050 596755,363964 594851,362803 C 594318,362478 594114,362448 593707,362633 C 593327,362807 593140,362799 592901,362601 C 592486,362256 592372,362412 592251,363487 C 592124,364616 591992,364724 590393,365004 C 587866,365448 587305,365467 587016,365119 z"
+ id="path18"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 426597,363794 C 426434,363691 426108,363605 425873,363603 C 425638,363601 425188,363466 424873,363301 C 424558,363137 424119,363002 423897,363001 C 423675,363001 423169,362826 422773,362613 C 422129,362268 422006,362258 421633,362520 C 421327,362734 421118,362757 420857,362606 C 420661,362493 420251,362312 419946,362204 C 419642,362096 419312,361794 419212,361533 C 418971,360899 416371,361349 415554,362166 C 415115,362605 413937,362438 413196,361831 C 412367,361154 411028,361151 410851,361825 C 410686,362458 409796,362271 408835,361401 C 407793,360459 407731,359742 408682,359634 C 409002,359597 409462,359438 409704,359279 C 410092,359025 410175,359029 410414,359316 C 410932,359941 411570,360034 412190,359576 C 412652,359234 412869,359190 413330,359344 C 413906,359537 415416,358317 416087,357119 C 416491,356396 420730,356482 421426,357228 C 421764,357590 422163,357800 422511,357800 C 422814,357800 423357,358025 423718,358300 C 424078,358575 424462,358800 424571,358800 C 424680,358800 425037,359025 425365,359301 C 425692,359577 426239,359858 426580,359926 C 427279,360066 427405,360508 426800,360700 C 426263,360870 426296,361088 426900,361364 C 427175,361489 427400,361728 427400,361896 C 427400,362342 427952,362267 428100,361800 C 428241,361355 428792,361272 429160,361640 C 429347,361827 429453,361827 429640,361640 C 429772,361508 430209,361400 430610,361400 C 431012,361400 431631,361299 431986,361175 C 432449,361014 432764,361011 433100,361164 C 433458,361327 433623,361313 433795,361106 C 433985,360877 434106,360879 434560,361116 C 434857,361271 435254,361398 435443,361399 C 435632,361399 435882,361580 436000,361800 C 436284,362331 436645,362304 437364,361700 C 438025,361144 438733,361061 439297,361473 C 439910,361921 439369,362994 438527,363001 C 438182,363003 437450,363051 436900,363107 C 435243,363276 433250,363056 432761,362651 C 432209,362192 431064,362278 430625,362810 L 430221,363300 L 429379,362826 C 428560,362365 428529,362362 428219,362727 C 427474,363602 426896,363983 426597,363794 z M 417400,357800 C 417400,357690 417265,357600 417100,357600 C 416935,357600 416800,357690 416800,357800 C 416800,357910 416935,358000 417100,358000 C 417265,358000 417400,357910 417400,357800 z"
+ id="path20"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 599418,360757 C 597679,359342 597936,358900 600500,358900 C 603541,358900 604532,359565 603503,360913 C 602667,362010 600874,361942 599418,360757 z"
+ id="path22"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 428540,360474 C 428267,360200 428406,359973 428808,360036 C 429032,360071 429217,360190 429218,360300 C 429222,360543 428735,360668 428540,360474 z"
+ id="path24"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 430056,359750 C 429196,358639 430569,356741 431768,357383 C 432377,357709 432591,357650 432800,357100 C 433049,356445 433715,356435 433878,357084 C 434006,357595 433860,358200 433608,358200 C 433526,358200 433216,358425 432919,358700 C 432622,358975 432269,359200 432134,359200 C 431999,359200 431735,359380 431546,359600 C 431162,360049 430350,360130 430056,359750 z"
+ id="path26"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 526718,356645 C 526398,356602 525937,356437 525693,356277 C 525450,356118 524767,355931 524175,355862 C 523584,355793 522920,355623 522700,355484 C 522418,355305 520999,355210 517877,355162 C 515103,355119 513350,355013 513177,354876 C 513025,354757 512090,354550 511100,354416 C 509903,354254 509166,354050 508900,353807 C 508680,353606 507960,353289 507300,353103 C 505860,352696 504291,351921 503584,351267 C 503300,351005 502589,350615 502004,350402 C 500549,349870 498820,348804 498430,348200 C 497901,347381 496969,346585 496160,346261 C 494816,345723 495939,343741 497575,343764 C 498050,343770 498472,343654 498620,343476 C 499281,342679 502176,342448 503612,343077 C 503800,343159 504228,343007 504691,342693 C 505380,342226 505489,342204 505765,342479 C 506178,342893 505788,343800 505197,343800 C 504970,343800 504316,344255 503742,344811 L 502700,345822 L 503700,346707 C 504250,347193 504845,347594 505023,347596 C 505201,347598 505561,347761 505823,347958 C 506085,348155 506550,348424 506856,348556 C 507161,348688 507463,348932 507527,349098 C 507591,349264 507844,349400 508090,349400 C 508337,349400 508701,349580 508900,349800 C 509099,350020 509432,350200 509639,350200 C 509847,350200 510260,350376 510558,350591 C 510856,350806 511818,351167 512697,351393 C 513808,351680 514439,351962 514773,352322 C 515213,352796 515342,352828 516324,352706 C 517538,352554 518200,352696 518200,353107 C 518200,353336 518594,353371 520348,353294 C 522534,353199 523698,353392 524121,353921 C 524289,354131 524765,354178 526097,354115 C 527737,354037 528800,354236 528800,354620 C 528800,354705 529199,354835 529687,354908 C 530633,355050 530873,355339 530681,356104 C 530525,356728 528942,356944 526718,356645 z"
+ id="path28"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 621486,355534 C 621243,354901 621778,354151 622407,354244 C 622742,354293 623098,354223 623211,354087 C 623467,353779 624134,353939 624290,354345 C 624477,354834 624033,355197 623401,355070 C 622963,354983 622787,355051 622611,355379 C 622361,355847 621644,355947 621486,355534 z"
+ id="path30"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 623519,352821 C 623160,352425 623101,351885 623396,351703 C 623746,351486 624400,351997 624400,352486 C 624400,353093 623928,353273 623519,352821 z"
+ id="path32"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 272400,342800 C 272400,342690 272490,342600 272600,342600 C 272710,342600 272800,342690 272800,342800 C 272800,342910 272710,343000 272600,343000 C 272490,343000 272400,342910 272400,342800 z"
+ id="path34"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 274592,342690 C 274405,342465 274421,342379 274668,342285 C 275005,342155 275400,342320 275400,342590 C 275400,342905 274829,342976 274592,342690 z"
+ id="path36"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 268850,342206 C 268237,341943 268269,341834 269281,340731 L 270163,339771 L 270932,340257 C 271783,340794 272383,341697 272086,341994 C 271810,342269 269370,342428 268850,342206 z"
+ id="path38"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 348848,333293 C 348489,332651 347211,332363 346657,332798 C 346190,333165 345396,333086 344700,332603 C 344590,332527 343825,332482 343000,332504 C 342045,332530 341344,332448 341070,332281 C 340834,332136 339819,331955 338814,331880 C 336921,331737 336480,331529 337103,331073 C 337408,330850 337430,330726 337239,330306 C 336911,329585 337133,329200 337877,329200 C 338335,329200 338718,328999 339254,328479 C 339987,327767 340013,327759 341448,327829 C 342752,327893 342947,327853 343365,327435 C 343929,326871 345316,326976 345774,327617 C 345937,327844 346286,328000 346631,328000 C 346952,328000 347438,328147 347711,328326 C 348053,328550 348457,328618 349005,328545 C 349808,328437 350171,328506 352676,329241 C 354022,329636 355402,330310 355398,330570 C 355390,330943 353778,332373 353229,332494 C 352883,332570 352479,332805 352331,333016 C 352122,333314 351841,333395 351081,333375 C 350541,333361 349862,333414 349571,333494 C 349174,333602 348993,333552 348848,333293 z"
+ id="path40"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 206048,326168 C 205406,325526 206090,324400 207123,324400 C 207889,324400 209062,325425 208953,326000 C 208878,326395 206418,326538 206048,326168 z"
+ id="path42"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 28872,320700 C 28694,320235 28945,319800 29394,319800 C 29851,319800 29950,320370 29560,320760 C 29238,321082 29011,321062 28872,320700 z"
+ id="path44"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 373639,316030 C 373342,315717 372932,315401 372728,315328 C 372445,315227 372377,315050 372444,314589 C 372493,314255 372458,313936 372367,313879 C 372170,313758 372168,312039 372364,311586 C 372616,311004 375127,308899 376306,308281 C 378065,307360 378393,306001 376896,305833 C 376201,305755 375681,305337 375254,304510 C 375086,304185 374825,303796 374674,303645 C 374233,303205 374344,302321 374900,301837 C 375503,301313 375529,300979 375005,300505 C 374612,300149 374612,300145 375019,299574 C 375494,298906 376262,298813 376855,299350 C 377246,299704 378112,299781 382700,299871 C 385537,299927 387600,301031 387600,302495 C 387600,302700 387743,303027 387918,303220 C 388363,303712 388114,304309 387343,304597 C 386142,305046 385301,305566 385073,306000 C 384772,306577 383576,307799 383311,307803 C 383066,307805 381380,309686 381026,310350 C 380894,310598 380496,310923 380143,311073 C 378844,311623 378633,312108 379365,312864 C 380508,314043 380169,315200 378679,315200 C 378011,315200 377666,315344 377000,315900 C 375863,316850 374465,316904 373639,316030 z"
+ id="path46"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 55350,315184 C 54964,314959 54880,314298 55211,314093 C 55583,313863 56400,314187 56400,314564 C 56400,315239 55926,315519 55350,315184 z"
+ id="path48"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 366475,309203 C 365829,308544 365125,308004 364911,308003 C 363820,307995 363037,306336 363750,305542 C 364085,305169 364081,305140 363650,304852 C 363403,304686 363200,304399 363200,304214 C 363200,304028 363068,303702 362906,303488 C 362466,302907 362536,302511 363204,301795 C 363923,301026 365265,301022 365774,301787 C 365947,302047 366265,302200 366631,302200 C 366952,302200 367447,302353 367732,302539 C 368017,302726 368549,302858 368915,302834 C 369422,302799 369636,302893 369814,303226 C 370020,303610 370398,303999 371360,304814 C 371541,304967 371580,305300 371488,305908 C 371381,306622 371435,306881 371779,307318 C 372526,308268 371870,309800 370716,309800 C 370459,309800 369926,309935 369531,310100 C 368216,310650 367765,310517 366475,309203 z"
+ id="path50"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 27504,306804 C 27306,306586 26835,306350 26457,306279 C 25708,306138 25376,305668 25821,305378 C 26307,305061 28752,305736 29035,306265 C 29509,307152 28227,307603 27504,306804 z"
+ id="path52"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 100933,307067 C 100376,306509 101674,304522 102335,304920 C 102911,305268 102930,306486 102366,306881 C 101899,307209 101170,307303 100933,307067 z"
+ id="path54"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 5036,302550 C 5071,302303 5235,302100 5400,302100 C 5565,302100 5729,302303 5764,302550 C 5813,302896 5729,303000 5400,303000 C 5071,303000 4987,302896 5036,302550 z"
+ id="path56"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 686888,288516 C 686569,288282 686497,287971 686480,286766 C 686454,284827 686458,284845 686017,284705 C 685806,284638 685542,284323 685431,284004 C 685270,283540 685075,283398 684465,283296 C 683238,283092 683200,283060 683200,282228 C 683200,281018 684137,280814 685169,281800 C 685618,282229 685993,282400 686486,282400 C 686866,282400 687232,282490 687300,282600 C 687503,282929 688113,282827 688500,282400 C 689007,281840 689903,281886 690437,282500 C 690676,282775 690968,283002 691086,283003 C 691204,283005 691512,283230 691771,283503 C 692290,284051 692622,284115 693169,283773 C 693688,283449 694723,283966 694639,284508 C 694550,285074 693847,285600 693179,285600 C 691821,285600 690170,286409 689042,287628 C 687916,288844 687545,288997 686888,288516 z"
+ id="path58"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 403164,282500 C 402889,281897 403213,281000 403706,281000 C 404132,281000 405200,281566 405200,281792 C 405200,283002 403639,283544 403164,282500 z"
+ id="path60"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 684210,279146 C 683870,278974 683633,278591 683438,277899 C 682487,274517 681877,273367 680584,272516 C 680153,272232 679461,271777 679047,271505 C 678465,271123 678131,271036 677585,271125 C 676758,271259 675816,270605 675295,269534 C 674479,267858 674417,267840 669328,267816 C 668904,267814 668454,267732 668328,267634 C 668203,267536 667832,267391 667503,267312 C 665333,266792 663597,263397 665673,263734 C 666269,263831 666410,263760 666897,263122 C 667421,262435 668119,262183 668482,262550 C 668563,262633 669141,262790 669765,262900 C 670801,263083 670932,263165 671266,263850 C 671756,264851 672203,264813 673291,263677 L 674176,262753 L 675427,264027 L 676678,265300 L 677933,265259 C 678716,265233 679397,265327 679744,265507 C 680050,265667 680397,265798 680515,265799 C 680633,265799 680942,266025 681200,266300 C 681458,266575 681823,266800 682010,266800 C 682198,266800 682468,266941 682611,267113 C 682762,267296 683043,267382 683287,267321 C 683938,267158 684800,268170 684800,269098 C 684800,269273 684995,269795 685233,270258 C 685471,270721 685685,271505 685709,272000 C 685750,272862 685967,273553 686400,274200 C 686510,274365 686690,274725 686800,275000 C 686909,275275 687110,275656 687247,275847 C 687447,276129 687431,276317 687161,276847 C 686977,277206 686773,277695 686705,277934 C 686347,279208 685319,279707 684210,279146 z"
+ id="path62"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 402714,278886 C 402287,278459 402314,277023 402760,276444 C 403296,275747 404207,275756 404448,276461 C 404981,278014 403672,279844 402714,278886 z"
+ id="path64"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 434118,274138 C 433593,273754 433885,273400 434726,273400 C 435339,273400 435420,273457 435364,273850 C 435287,274389 434660,274534 434118,274138 z"
+ id="path66"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 412750,273439 C 411866,273382 411800,273341 411803,272839 C 411807,272089 411945,271943 413235,271318 C 413859,271016 414419,270640 414478,270484 C 414591,270191 415691,270094 416289,270323 C 417252,270693 417909,273380 417050,273435 C 416058,273499 413719,273501 412750,273439 z"
+ id="path68"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 430967,272508 C 430648,271807 431193,271000 431987,271000 C 432638,271000 433600,271964 433600,272615 C 433600,273273 431273,273179 430967,272508 z"
+ id="path70"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 454917,266367 C 454464,265915 454388,265732 454574,265546 C 454950,265170 455885,265782 455963,266456 C 456045,267159 455680,267128 454917,266367 z"
+ id="path72"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 663300,263222 C 662457,263093 662115,262298 662530,261431 C 662617,261249 662691,260700 662694,260211 C 662708,258083 664603,258606 665339,260940 C 665651,261931 665651,262048 665340,262701 C 664986,263442 664899,263465 663300,263222 z"
+ id="path74"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 641991,244650 C 641527,244128 641027,243418 640881,243074 C 640735,242730 640477,242395 640307,242331 C 639743,242114 640228,240840 641404,239450 C 641967,238785 644200,240474 644200,241564 C 644200,241838 644425,242357 644700,242718 C 646233,244727 643677,246550 641991,244650 z"
+ id="path76"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 210066,241308 C 208341,240558 209769,238628 212075,238594 C 212309,238590 212675,238455 212888,238294 C 213102,238132 213572,238000 213933,238000 C 214295,238000 214885,237820 215245,237601 C 215605,237381 216021,237201 216169,237201 C 216316,237200 216984,236705 217653,236100 C 218321,235495 219010,234997 219184,234993 C 219358,234989 219759,234774 220075,234515 C 220529,234144 220812,234066 221412,234147 C 221993,234225 222303,234148 222714,233825 C 223720,233033 224414,233504 224392,234963 C 224378,235872 222203,237624 221131,237590 C 220331,237564 219177,238033 217985,238868 C 217725,239050 217365,239200 217186,239200 C 217008,239200 216699,239380 216500,239600 C 216301,239820 215896,240000 215600,240000 C 215304,240000 214899,240180 214700,240400 C 214501,240620 214104,240800 213817,240800 C 213513,240800 213192,240966 213046,241200 C 212743,241686 211074,241747 210066,241308 z"
+ id="path78"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 205853,240656 C 205101,240562 204600,239960 204600,239149 C 204600,238312 205078,238271 206500,238985 C 209077,240280 208790,241021 205853,240656 z"
+ id="path80"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 51801,234101 C 51484,233719 52027,232800 52570,232800 C 53065,232800 53879,233704 53732,234090 C 53574,234501 52139,234509 51801,234101 z"
+ id="path82"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 231685,234117 C 231364,233892 231114,233879 230471,234050 C 228986,234447 228581,233654 229323,231801 C 229989,230136 232951,229406 234936,230418 C 235858,230888 236266,230897 236931,230461 C 237422,230139 237463,230141 237724,230499 C 238295,231280 237795,232600 236928,232600 C 236680,232600 236173,232825 235800,233100 C 235427,233375 235041,233600 234943,233600 C 234844,233600 234534,233780 234255,234000 C 233651,234475 232284,234537 231685,234117 z"
+ id="path84"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 642865,231332 C 642005,230911 641600,230330 641600,229515 C 641600,229259 641457,228930 641283,228786 C 641066,228606 641002,228339 641081,227945 C 641165,227524 641068,227197 640722,226734 C 639813,225518 639837,224319 640793,223186 C 641592,222237 641616,222168 641633,220694 C 641646,219619 641740,219089 641956,218872 C 643141,217688 644703,218306 644160,219745 C 643719,220913 644182,221070 645732,220277 C 646458,219904 647194,219600 647365,219600 C 647537,219600 647923,219365 648223,219078 C 648898,218431 649200,218592 649200,219598 C 649200,220455 648909,220740 647148,221605 C 646624,221862 646052,222232 645876,222427 C 645649,222677 645385,222747 644978,222666 C 644379,222546 644231,222751 644630,223150 C 644803,223323 644778,223504 644530,223883 C 644024,224655 644123,225101 645100,226443 C 646282,228067 646324,228887 645280,229960 C 644884,230367 644432,230948 644275,231250 C 643949,231878 643979,231876 642865,231332 z"
+ id="path86"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 218682,230126 C 218532,229735 218737,229400 219126,229400 C 219322,229400 219405,229552 219364,229834 C 219286,230362 218845,230551 218682,230126 z"
+ id="path88"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 498800,218631 C 498800,218231 499389,217600 499762,217600 C 500036,217600 500294,218487 500107,218789 C 499869,219173 498800,219044 498800,218631 z"
+ id="path90"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 649912,216545 C 650110,213843 648921,213585 647179,215951 C 646497,216877 645852,217001 645266,216319 C 644677,215634 644625,214405 645172,214064 C 645392,213926 645600,213480 645682,212968 C 646008,210932 648376,210613 649232,212490 C 649451,212972 650480,213600 651049,213600 C 651704,213600 652059,214405 652329,216503 C 652475,217630 651772,218400 650597,218400 L 649776,218400 L 649912,216545 z"
+ id="path92"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 652210,212350 C 652097,212213 651545,211538 650985,210850 L 649966,209600 L 648592,209728 C 646444,209928 645600,209423 645600,207938 C 645600,206985 646121,206558 646584,207131 C 647473,208228 648417,207954 648919,206452 C 649818,203760 651428,202983 652548,204700 C 652998,205389 653450,205807 654004,206043 L 654808,206387 L 654774,208293 C 654750,209657 654661,210267 654459,210434 C 654304,210563 654046,210981 653886,211364 C 653439,212435 652658,212894 652210,212350 z"
+ id="path94"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 555062,211047 C 554374,210192 554145,207629 554699,207000 C 554844,206835 555062,206328 555183,205873 C 555546,204509 557270,203809 557805,204809 C 557939,205060 558357,205548 558734,205892 C 559373,206478 559508,207200 558979,207200 C 558880,207200 558800,207502 558800,207872 C 558800,208259 558588,208857 558300,209281 C 558025,209686 557800,210156 557800,210324 C 557800,211633 555929,212126 555062,211047 z"
+ id="path96"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 632589,205750 C 632322,205393 631877,204775 631601,204378 C 630972,203472 629825,202472 629300,202371 C 629076,202328 628746,201966 628549,201547 C 628310,201040 628064,200800 627785,200800 C 627106,200800 626640,200439 626500,199802 C 626428,199471 626289,199200 626191,199200 C 626094,199200 625706,198930 625331,198600 C 624907,198228 624427,198000 624066,198000 C 623027,198000 621729,197190 621502,196400 C 621145,195163 621094,195135 619443,195260 C 617340,195419 615455,192655 617011,191693 C 617127,191622 617446,191054 617720,190432 C 617994,189809 618439,189094 618709,188842 C 619028,188545 619200,188164 619200,187759 C 619200,186932 620094,185430 620657,185310 C 620901,185258 621616,185116 622247,184994 C 622877,184873 623442,184694 623502,184597 C 623562,184500 624364,184473 625283,184538 C 626823,184647 626985,184622 627322,184228 C 627524,183993 627881,183800 628117,183800 C 628352,183800 628876,183575 629281,183300 C 630488,182481 632600,183387 632600,184724 C 632600,184883 632743,185233 632919,185500 C 633146,185848 633200,186210 633106,186767 C 632982,187500 633024,187589 633815,188266 C 634996,189277 635400,190024 635400,191197 C 635400,192296 635779,192812 636950,193305 C 637760,193647 637758,193718 636901,195140 C 636516,195778 636201,196421 636201,196568 C 636200,196716 636020,197066 635800,197345 C 635078,198263 635256,199203 636350,200247 C 639230,202993 639392,203536 637484,204046 C 636815,204225 636393,204504 635958,205053 C 634779,206541 633395,206828 632589,205750 z"
+ id="path98"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 588070,203094 C 587978,202855 588075,202623 588367,202387 C 588605,202194 588800,201900 588800,201734 C 588800,201568 589321,200907 589958,200266 C 590595,199625 591966,198155 593004,197000 C 594042,195845 594947,194855 595016,194800 C 595403,194489 595617,193694 595500,193002 C 595374,192253 595395,192219 596385,191571 C 597157,191066 597428,190754 597519,190269 C 597585,189919 597890,189407 598198,189133 C 598506,188859 598868,188289 599003,187867 C 599139,187445 599408,186920 599602,186700 C 599795,186480 600012,186107 600084,185871 C 600287,185199 604180,181436 604817,181296 C 605169,181219 605670,180787 606193,180109 C 607025,179030 607413,178810 608500,178800 C 609394,178791 609568,178591 609637,177496 C 609700,176505 609704,176500 610439,176439 C 610995,176392 611336,176198 611812,175655 L 612446,174934 L 614952,174872 C 616781,174826 617545,174732 617779,174522 C 617970,174350 618318,174276 618637,174338 C 618936,174396 619461,174299 619818,174121 C 620172,173944 620653,173800 620886,173800 C 621120,173800 621518,173655 621770,173478 C 622162,173204 622358,173192 623092,173398 C 623702,173569 624067,173578 624344,173430 C 624738,173219 628530,173063 628717,173250 C 629486,174019 628430,175081 627063,174914 C 626325,174823 626219,174861 626163,175235 C 626128,175468 625965,175727 625800,175810 C 625635,175893 624895,176244 624156,176590 C 623417,176936 622759,177305 622694,177410 C 622449,177805 620782,177620 620203,177133 C 619308,176380 618073,176534 616860,177550 C 615985,178282 615788,178359 614739,178371 C 613306,178388 612264,178571 611560,178927 C 611263,179077 610838,179200 610615,179200 C 610263,179200 610235,179267 610405,179713 C 610512,179995 610600,180794 610600,181489 C 610600,182395 610689,182825 610916,183013 C 611102,183168 611195,183468 611143,183743 C 611077,184088 611204,184318 611627,184619 C 612480,185226 612282,186593 611247,187244 C 610946,187434 610557,187694 610381,187823 C 610126,188012 609941,187968 609447,187603 C 608739,187080 608476,187200 607273,188600 C 606250,189790 606000,190263 606000,191005 C 606000,191910 605039,193268 604076,193725 C 603695,193906 603140,194311 602842,194627 C 602545,194942 602104,195200 601862,195200 C 601620,195200 601305,195368 601161,195573 C 601018,195778 600623,196007 600285,196081 C 599947,196156 599223,196640 598677,197158 C 597574,198204 596198,199200 595856,199200 C 595582,199200 594031,200930 593739,201561 C 593440,202207 591885,203210 591237,203175 C 590942,203159 590139,203214 589453,203298 C 588358,203432 588190,203408 588070,203094 z"
+ id="path100"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 657263,196648 C 656385,196072 655514,190041 656225,189469 C 656925,188907 657368,188958 657718,189640 C 657904,190003 658120,190345 658198,190400 C 658614,190693 658807,191413 658582,191834 C 658381,192210 658420,192319 658875,192651 C 659486,193096 659512,193286 659077,194100 C 658901,194430 658699,195150 658628,195700 C 658497,196724 657953,197101 657263,196648 z"
+ id="path102"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 649336,194591 C 649030,194153 645708,193979 643961,194309 C 642028,194674 639428,192852 640440,191840 C 640790,191490 641133,191545 641575,192019 C 641942,192413 642205,192442 645933,192501 C 648115,192535 650008,192572 650141,192582 C 650273,192592 650441,192916 650514,193302 C 650586,193688 650725,194054 650823,194114 C 650920,194174 651000,194398 651000,194612 C 651000,195174 649733,195158 649336,194591 z"
+ id="path104"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 189327,191385 C 188683,190879 188652,190326 189245,189911 C 190170,189263 191000,189636 191000,190700 C 191000,191815 190259,192119 189327,191385 z"
+ id="path106"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 662650,190868 C 661852,190545 664040,187800 665095,187800 C 665910,187800 667298,186246 667312,185319 C 667330,184108 668254,182708 668830,183016 C 669142,183183 669379,183183 669748,183014 C 670022,182890 670423,182844 670640,182913 C 670897,182994 671192,182889 671488,182611 C 671738,182376 672293,182131 672721,182065 C 673150,181999 673647,181819 673826,181663 C 674029,181488 674345,181429 674662,181508 C 675246,181655 677015,180855 677686,180139 C 677914,179897 678325,179519 678600,179299 C 680152,178060 680514,177017 679799,175845 C 679040,174600 679632,173798 681095,174089 C 681985,174267 683553,173620 684583,172650 C 685079,172183 685579,171792 685693,171783 C 685807,171774 686484,171725 687199,171674 C 687913,171624 688583,171497 688689,171391 C 688999,171081 689602,171172 689747,171550 C 689820,171743 690087,172215 690340,172600 C 691522,174399 692805,175046 694173,174532 C 694683,174341 695269,174146 695476,174099 C 695684,174051 696114,173717 696434,173356 C 698203,171357 699699,170000 700134,170000 C 700390,170000 700600,169921 700600,169824 C 700600,169495 701696,169233 703550,169119 C 705541,168996 705767,169141 705209,170183 C 704904,170754 702293,172800 701870,172800 C 701243,172800 699202,175457 699201,176276 C 699200,176483 699386,176954 699614,177323 C 700070,178061 700064,178773 699600,179017 C 698712,179484 697898,179800 697585,179800 C 697079,179800 696146,180643 695690,181512 C 695333,182193 691864,184200 691044,184200 C 690937,184200 690737,184335 690600,184500 C 690445,184687 690002,184801 689426,184802 C 688149,184806 686501,185275 685618,185887 C 684821,186440 684324,186513 683503,186201 C 682976,186001 681613,186493 681302,186997 C 681233,187109 680788,187200 680313,187200 C 679789,187200 679351,187318 679200,187500 C 678879,187887 677427,187883 676912,187494 C 676698,187332 676266,187200 675951,187200 C 675499,187200 675337,187078 675176,186616 C 675064,186295 674664,185823 674287,185566 C 673911,185310 673602,185033 673601,184950 C 673601,184868 673392,184800 673138,184800 C 672308,184800 671087,186831 671309,187842 C 671660,189440 667600,191905 666600,190700 C 666280,190315 665066,190316 664327,190701 C 663758,190998 663128,191061 662650,190868 z"
+ id="path108"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 639272,189610 C 639207,189286 638984,188867 638777,188679 C 638511,188438 638400,188065 638400,187407 C 638400,186895 638268,186302 638106,186088 C 637651,185486 637745,184963 638451,184182 C 638808,183787 639299,183187 639543,182850 L 639986,182236 L 639579,181718 C 639064,181064 639152,180450 639833,179944 C 641250,178890 642450,180929 641594,182937 C 641340,183531 641354,183600 641811,183980 C 642534,184582 643000,184523 643000,183830 C 643000,183133 643377,182000 643609,182000 C 643702,182000 643896,181756 644039,181458 C 644183,181161 644495,180868 644734,180808 C 644973,180749 645362,180453 645599,180150 C 646147,179449 646419,179457 646962,180192 C 647481,180893 647558,182152 647093,182330 C 646709,182478 646000,183916 646000,184547 C 646000,184806 645782,185237 645515,185504 C 643919,187100 644337,188479 646466,188640 C 647685,188732 648042,188987 647951,189700 C 647882,190242 646526,190376 645993,189894 C 645715,189642 645430,189593 644832,189695 C 644235,189796 643844,189729 643244,189423 L 642449,189017 L 641674,189603 C 640570,190438 639438,190442 639272,189610 z"
+ id="path110"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 595325,189093 C 594967,188160 595549,187263 596133,187848 C 596374,188088 596403,188292 596257,188730 C 596041,189377 595513,189583 595325,189093 z"
+ id="path112"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 654446,185366 C 654076,184996 654150,184307 654605,183896 C 655149,183404 655445,183727 655364,184722 C 655297,185539 654898,185818 654446,185366 z"
+ id="path114"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 708589,183136 C 708210,182771 707630,182154 707300,181765 C 706487,180807 704962,180135 704293,180440 C 703896,180620 703731,180600 703435,180332 C 703233,180148 702737,180000 702328,180000 C 700829,180000 701228,178443 702805,178138 C 703297,178043 703786,177883 703890,177782 C 704144,177538 704945,177550 705100,177800 C 705168,177910 705583,178000 706021,178000 C 706602,178000 706939,178128 707260,178472 C 707502,178732 707903,179008 708152,179086 C 708401,179164 708737,179486 708900,179800 C 709063,180114 709354,180423 709548,180485 C 710074,180655 711400,181936 711400,182274 C 711400,183621 709650,184158 708589,183136 z"
+ id="path116"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 714600,179325 C 714600,178669 716253,176800 716834,176800 C 717474,176800 717550,177111 717174,178188 C 716861,179087 714600,180086 714600,179325 z"
+ id="path118"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 719107,175612 C 718549,174709 720926,172112 721550,172943 C 722013,173561 721860,174766 721250,175303 C 720686,175800 719343,175993 719107,175612 z"
+ id="path120"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 723343,175076 C 723073,174807 723200,174187 723550,174063 C 723743,173995 724060,173802 724255,173634 C 724738,173219 725047,173563 724965,174425 C 724901,175093 723802,175535 723343,175076 z"
+ id="path122"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 653295,174131 C 652700,173726 651019,173364 650380,173504 C 649881,173614 649800,173563 649692,173064 C 649487,172123 649142,171580 648557,171278 C 647829,170901 647818,170173 648531,169611 C 649197,169087 649633,169208 650746,170226 C 651211,170652 651722,171000 651881,171000 C 652041,171000 652295,171123 652445,171274 C 652596,171424 652939,171611 653209,171690 C 655169,172258 655847,173136 654932,173924 C 654303,174464 653865,174520 653295,174131 z"
+ id="path124"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 641607,173813 C 641348,173329 641337,172600 641590,172600 C 641694,172600 642022,172375 642319,172100 C 643124,171354 644200,171883 644200,173026 C 644200,173900 642009,174565 641607,173813 z"
+ id="path126"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 633000,173300 C 632308,173051 632064,172644 632276,172092 C 632409,171744 633000,171931 633000,172321 C 633000,172709 633386,172668 634155,172199 C 634838,171783 635698,171673 635886,171978 C 635947,172076 636245,172216 636548,172289 C 638213,172691 638600,172840 638600,173081 C 638600,173616 634342,173783 633000,173300 z"
+ id="path128"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 725445,172289 C 724856,171877 724866,171125 725463,170853 C 726694,170292 728699,171333 728314,172334 C 728166,172721 726013,172687 725445,172289 z"
+ id="path130"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 639544,171277 C 639242,170975 639405,170225 639800,170100 C 640020,170030 640200,169899 640200,169808 C 640200,169517 640817,169395 641214,169608 C 641597,169812 641769,170877 641450,171065 C 641134,171252 639680,171414 639544,171277 z"
+ id="path132"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 687750,168108 C 687396,167682 687200,167211 687200,166788 C 687200,166427 687071,165989 686914,165815 C 686757,165642 686584,164990 686531,164367 C 686463,163581 686307,163107 686019,162819 C 685572,162372 685598,159625 686055,159046 C 686194,158869 686156,158683 685928,158431 C 685712,158192 685600,157710 685600,157018 C 685600,154979 682907,153223 681926,154623 C 681584,155111 680521,155800 680110,155800 C 679955,155800 679652,156025 679436,156300 C 679197,156604 678839,156800 678523,156800 C 678220,156800 677899,156967 677754,157200 C 677611,157428 677287,157600 677000,157600 C 676713,157600 676389,157772 676246,158000 C 676109,158220 675811,158400 675585,158400 C 674750,158400 673800,159370 673800,160224 C 673800,160651 673871,161000 673957,161000 C 674043,161000 674286,161293 674496,161650 C 674706,162008 674995,162419 675139,162564 C 675282,162710 675400,162943 675400,163083 C 675400,163223 675580,163501 675800,163700 C 676570,164397 675782,166297 674800,166112 C 674525,166060 673892,165941 673393,165847 C 672894,165753 672369,165604 672226,165516 C 672061,165414 671760,165555 671397,165903 C 670942,166339 670692,166429 670163,166351 C 669645,166274 669404,166356 669060,166726 C 668340,167500 666866,167243 666422,166268 C 666128,165624 664849,165073 664359,165379 C 663834,165707 663442,165648 663306,165218 C 663239,165009 663057,164788 662901,164728 C 662746,164668 662424,164233 662187,163760 C 661950,163287 661529,162658 661252,162362 C 660922,162009 660784,161682 660854,161414 C 661310,159673 659205,159437 657297,161016 L 655777,162273 L 655208,161936 C 654895,161751 654464,161600 654250,161600 C 654037,161600 653699,161420 653500,161200 C 653301,160980 652978,160800 652783,160800 C 652588,160800 652305,160677 652155,160526 C 652004,160375 651592,160103 651240,159921 C 650882,159736 650600,159432 650600,159232 C 650600,158494 647792,156000 646961,156000 C 645713,156000 644800,155038 644800,153724 C 644800,152235 642767,149600 641619,149600 C 641386,149600 641042,149420 640854,149200 C 640570,148869 640264,148800 639083,148800 C 637994,148800 637540,148711 637177,148428 C 636667,148030 635755,147788 634560,147734 C 634154,147715 633708,147588 633570,147450 C 633433,147313 633117,147200 632870,147200 C 632622,147200 632348,147087 632260,146949 C 632010,146556 630657,145600 630352,145600 C 630200,145600 629902,145468 629688,145306 C 629475,145145 629132,145010 628927,145006 C 628465,144998 627200,143650 627200,143166 C 627200,142970 627020,142515 626801,142155 C 626581,141795 626401,141174 626401,140774 C 626400,140374 626265,139937 626100,139800 C 625735,139497 625712,139076 626050,138860 C 626188,138772 626508,138403 626763,138040 L 627226,137381 L 626813,136527 C 626284,135434 626291,134842 626841,134256 C 627136,133942 627289,133516 627302,132969 C 627315,132450 627447,132061 627661,131903 C 627848,131767 628000,131460 628000,131220 C 628000,130801 628389,130142 629346,128940 C 629731,128455 629775,128224 629672,127233 C 629564,126197 629602,126028 630076,125465 C 630364,125122 630600,124709 630600,124546 C 630600,124382 630729,124142 630887,124011 C 631642,123384 631444,121816 630417,120295 C 629443,118851 629885,117860 631750,117307 C 631998,117233 632200,117099 632200,117008 C 632200,115897 636876,116213 638189,117413 C 639163,118303 639346,118385 640900,118632 C 643423,119032 643749,119043 644229,118742 C 644932,118302 647137,118509 647422,119042 C 647833,119809 648478,120400 648905,120400 C 649143,120400 649491,120569 649678,120775 C 649864,120982 650323,121200 650697,121261 C 651071,121321 651637,121563 651955,121798 C 652460,122172 652837,122231 654944,122270 C 656621,122301 657455,122396 657681,122584 C 658189,123006 659512,123249 661800,123341 C 662955,123387 663986,123509 664090,123613 C 664397,123915 664842,123830 665325,123377 C 665608,123110 666131,122919 666738,122861 C 667758,122763 668993,122267 669261,121848 C 669350,121710 669733,121466 670113,121308 C 670820,121012 672985,118844 673244,118173 C 673418,117720 673547,117715 674915,118113 C 675922,118406 676800,119171 676800,119756 C 676800,119863 676929,120058 677087,120189 C 677554,120577 678044,119645 677887,118667 C 677767,117911 677796,117857 678731,117159 C 680397,115914 681767,114709 681784,114474 C 681793,114350 681935,114137 682100,114000 C 682297,113836 682400,113390 682400,112695 C 682400,110947 685103,108731 686817,109073 C 687220,109154 687595,109081 687939,108856 C 688826,108275 690999,108302 691888,108904 C 692750,109490 693844,109554 694353,109050 C 695818,107599 696963,107613 698474,109100 C 699088,109705 699677,110200 699781,110200 C 699886,110200 700100,110329 700258,110487 C 700481,110709 700804,110738 701709,110615 C 703873,110321 705295,111769 705171,114137 L 705100,115492 L 705850,115848 C 706412,116114 706600,116324 706600,116687 C 706600,116954 706721,117292 706868,117440 C 707352,117923 707565,118495 707462,119033 C 707383,119447 707500,119685 708003,120131 C 709533,121486 711029,124439 711535,127100 C 711597,127430 711778,127848 711936,128029 C 712557,128739 712532,131813 711898,132565 C 711352,133215 711345,133254 711450,135305 C 711549,137246 711528,137411 711128,137778 C 710893,137995 710130,138696 709434,139336 C 707027,141548 706614,142004 706735,142320 C 706893,142732 705698,143947 704979,144105 C 704445,144222 703453,145647 702675,147417 C 702427,147980 701493,148800 701100,148800 C 700965,148800 700632,148974 700361,149188 C 700090,149401 699646,149631 699375,149699 C 698175,150000 697000,151351 697000,152430 C 697000,153393 696458,154679 695650,155634 C 695440,155882 695402,156250 695504,157066 C 695628,158052 695599,158187 695221,158389 C 694962,158528 694800,158810 694800,159125 C 694800,159948 693848,160800 692928,160800 C 691585,160800 690620,162071 690747,163673 C 690835,164788 690796,164951 690322,165460 C 689944,165866 689800,166236 689800,166803 C 689800,167372 689694,167642 689414,167793 C 689201,167907 688970,168180 688900,168400 C 688722,168962 688388,168877 687750,168108 z"
+ id="path134"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 662602,167303 C 662275,166909 662472,166450 663088,166169 C 663702,165889 664200,166218 664200,166903 C 664200,167599 663081,167879 662602,167303 z"
+ id="path136"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 488746,164848 C 488446,164535 488200,164097 488200,163875 C 488200,163646 487810,163133 487300,162689 C 486759,162218 486400,161736 486400,161480 C 486400,161019 484802,159291 484200,159100 C 484000,159037 483786,158853 483725,158692 C 483663,158532 483444,158400 483237,158400 C 483031,158400 482699,158220 482500,158000 C 482245,157718 481884,157600 481279,157600 C 479732,157600 478199,155673 478176,153700 C 478158,152117 478498,150452 478925,150042 C 479522,149466 479519,149323 478900,148836 C 478625,148619 478400,148245 478400,148003 C 478400,147761 478220,147334 478000,147055 C 477780,146775 477600,146401 477599,146223 C 477599,146045 477417,145603 477196,145239 C 476626,144305 476653,139995 477232,139471 C 477434,139288 477600,139015 477600,138865 C 477600,137272 481381,135734 482800,136750 C 483069,136943 483742,137325 484295,137600 C 484862,137882 485400,138318 485530,138600 C 486433,140560 486600,140989 486600,141341 C 486600,141559 486780,141901 487000,142100 C 487297,142369 487400,142716 487400,143452 C 487400,144213 487514,144578 487893,145029 C 488269,145475 488359,145757 488269,146207 C 488203,146533 488238,146912 488345,147050 C 488671,147470 489200,149334 489200,150063 C 489200,150441 489335,150863 489500,151000 C 489665,151137 489800,151462 489800,151723 C 489800,151983 489980,152309 490200,152446 C 490528,152651 490600,152913 490600,153904 C 490600,154690 490712,155271 490922,155571 C 491122,155857 491202,156240 491133,156586 C 491070,156898 491126,157246 491261,157381 C 491717,157837 491633,163554 491165,163882 C 490952,164031 490709,164411 490626,164727 C 490404,165561 489486,165620 488746,164848 z"
+ id="path138"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 739994,159386 C 739689,158650 739904,158135 740557,158038 C 741170,157946 741493,158652 741158,159351 C 740784,160131 740308,160145 739994,159386 z"
+ id="path140"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 741733,157667 C 741456,157389 741616,156448 742000,156100 C 742220,155901 742400,155569 742400,155363 C 742400,154877 742917,154682 743319,155016 C 743708,155338 743535,156910 743051,157450 C 742740,157798 741988,157922 741733,157667 z"
+ id="path142"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 766953,157401 C 766360,157222 765509,156436 764932,155535 C 764604,155021 764498,154982 763773,155105 C 761786,155440 761716,154096 763605,151850 C 764171,151178 765487,152112 766740,154073 C 767012,154498 767407,154891 767617,154947 C 767944,155032 768000,155234 768000,156323 C 768000,157680 767973,157708 766953,157401 z"
+ id="path144"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 732995,150087 C 732562,148948 732773,148381 733920,147608 C 736027,146185 736734,146389 735804,148151 C 734630,150377 733422,151209 732995,150087 z"
+ id="path146"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 753799,116698 C 753406,116225 754716,114510 756768,112812 C 757672,112064 757990,110593 757306,110330 C 757144,110268 756851,109913 756656,109542 C 756460,109170 756124,108533 755909,108125 C 755435,107225 755731,106512 756795,105988 C 757594,105595 757802,105260 757667,104584 C 757444,103471 758529,102432 759523,102807 C 760233,103075 760983,103953 760993,104527 C 760997,104762 761233,105107 761519,105294 C 761887,105535 762007,105752 761931,106043 C 761788,106587 762725,107752 763431,107907 C 764568,108157 765383,109537 764760,110160 C 764378,110542 762910,110453 762372,110016 C 761945,109669 761867,109662 761558,109940 C 761370,110109 760920,110310 760558,110387 C 759969,110512 759905,110592 759949,111152 C 759976,111496 759909,111833 759799,111900 C 759690,111968 759600,112249 759600,112525 C 759600,113101 757929,114883 756800,115511 C 756415,115725 755804,116147 755443,116450 C 754707,117066 754171,117147 753799,116698 z"
+ id="path148"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 698855,103696 C 698616,103529 698166,103411 697855,103435 C 697543,103459 697178,103410 697043,103326 C 696907,103243 696183,103323 695433,103506 C 693119,104068 692548,103722 693493,102330 C 693772,101919 694000,101417 694000,101215 C 694000,100996 694242,100748 694600,100600 C 694930,100463 695200,100237 695200,100098 C 695200,99423 695909,98970 697138,98859 L 698369,98747 L 699303,99762 C 701640,102298 701286,105399 698855,103696 z"
+ id="path150"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 751478,103268 C 751089,102845 750636,102230 750471,101900 C 749230,99406 749065,99208 748227,99203 C 747933,99201 747303,98783 746567,98101 C 745914,97497 745137,96944 744840,96873 C 743663,96591 741600,95083 741600,94504 C 741600,94366 741411,94014 741181,93721 C 740184,92454 745551,90836 746592,92090 C 746724,92249 747235,92575 747727,92813 C 748745,93306 749217,93916 749386,94957 C 749479,95530 749730,95856 750602,96540 C 756622,101262 757580,103530 753710,103893 L 752186,104035 L 751478,103268 z"
+ id="path152"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 224300,93200 C 224137,92936 224376,92562 224614,92709 C 224857,92859 224855,93400 224612,93400 C 224508,93400 224368,93310 224300,93200 z"
+ id="path154"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 531865,87061 C 530341,86764 531072,84599 532695,84601 C 534616,84603 535211,86198 533549,86892 C 532809,87202 532664,87216 531865,87061 z"
+ id="path156"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 223440,86160 C 222858,85578 223662,83800 224508,83800 C 224996,83800 224912,85926 224413,86193 C 223914,86460 223734,86454 223440,86160 z"
+ id="path158"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 255750,81803 C 255087,81107 255030,80305 255621,79989 C 256463,79538 259026,79647 259750,80164 C 261132,81150 260237,82049 258198,81723 C 257544,81618 257380,81664 257201,81999 C 256904,82554 256400,82485 255750,81803 z"
+ id="path160"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 304872,74900 C 304671,74376 304962,74000 305569,74000 C 306227,74000 306702,74445 306529,74897 C 306372,75306 305029,75308 304872,74900 z"
+ id="path162"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 600400,55870 C 600235,55815 599920,55691 599700,55594 C 599480,55497 598985,55281 598600,55113 C 598215,54945 597738,54694 597539,54554 C 597237,54341 597147,54356 596984,54642 C 596877,54830 596480,55042 596102,55113 C 595724,55184 595310,55367 595183,55521 C 594779,56008 593144,55375 591993,54287 C 591714,54023 591195,53749 590839,53678 C 590070,53524 589000,52285 589000,51548 C 589000,50788 587573,49857 586886,50170 C 586083,50536 585658,50443 585200,49800 C 584614,48977 584100,49034 582510,50101 L 581167,51001 L 579234,51041 C 577595,51075 577258,51139 577025,51460 C 576682,51933 575184,51774 574434,51184 C 573948,50801 573776,50824 573160,51352 C 572668,51774 570322,51888 570004,51505 C 569870,51343 569447,51152 569064,51080 C 568681,51008 568324,50835 568270,50694 C 568216,50554 567866,50382 567492,50312 C 567117,50241 566728,50036 566627,49855 C 566394,49439 564463,49481 563987,49912 C 563565,50294 561041,50305 560495,49928 C 560229,49745 559192,49621 557332,49552 C 554922,49463 554491,49395 553991,49025 C 553604,48739 553120,48600 552513,48600 C 551167,48600 550818,48005 551287,46514 C 551619,45459 551468,44600 550952,44600 C 550868,44600 550636,44436 550436,44236 C 549166,42966 546110,42944 544991,44196 C 544730,44489 544294,44543 542159,44546 L 539635,44551 L 538818,45434 L 538000,46318 L 535750,46276 C 534043,46244 533337,46310 532827,46550 C 532206,46843 532139,46841 531967,46534 C 531724,46100 531034,46107 530546,46549 C 530231,46834 529751,46901 527930,46918 C 518640,47003 514708,47208 514116,47638 C 513636,47986 513435,48025 512988,47857 C 512379,47627 509025,49095 508143,49977 C 508020,50100 507809,50200 507673,50200 C 507537,50200 507173,50311 506863,50447 C 506268,50709 506098,50717 500057,50787 C 495642,50838 494200,50630 493397,49828 C 493107,49538 492516,49129 492085,48920 C 491653,48710 491054,48414 490754,48261 C 490354,48057 490103,48038 489817,48191 C 489233,48504 488576,48444 488113,48037 C 487255,47282 485251,47008 480000,46930 C 477006,46885 476392,46740 475329,45821 C 475124,45644 474629,45500 474229,45500 C 473684,45500 473454,45396 473318,45087 C 473145,44692 472999,44675 470018,44716 C 468137,44742 466639,44671 466242,44536 C 465773,44378 465485,44375 465242,44527 C 465045,44650 463661,44750 461975,44762 C 459366,44782 458971,44830 458323,45213 C 457559,45664 456800,45627 456200,45111 C 455427,44445 453264,43982 452630,44346 C 452057,44675 452000,44671 451145,44244 C 450656,44000 450083,43800 449870,43800 C 449658,43800 449128,43617 448692,43393 C 448213,43147 447713,43032 447426,43103 C 447154,43170 446814,43102 446626,42944 C 445797,42243 444525,42000 441682,42000 C 439525,42000 438787,41932 438488,41706 C 437989,41329 436719,41316 436412,41685 C 436167,41981 433600,42152 427900,42254 C 425748,42292 425233,42360 424912,42650 C 424662,42876 424200,43000 423609,43000 C 423072,43000 422382,43167 421937,43406 C 421083,43863 417545,43958 417029,43537 C 416880,43416 416168,43255 415447,43181 C 414509,43084 414045,42935 413818,42658 C 413531,42309 413274,42278 411200,42334 C 409935,42368 407730,42309 406300,42203 C 403192,41973 400160,41942 398454,42123 C 397344,42240 397170,42209 396854,41836 C 396345,41234 391903,41115 391481,41692 C 391034,42303 383825,42443 382458,41867 C 382012,41679 381001,41528 380000,41500 C 378971,41471 377905,41308 377300,41088 C 376664,40857 375718,40720 374700,40712 C 373820,40706 372988,40627 372850,40538 C 372713,40449 372489,40445 372352,40530 C 371984,40757 368339,40774 368053,40549 C 367916,40442 367646,40427 367453,40514 C 366829,40795 364922,40784 364600,40498 C 364000,39964 362536,39606 361468,39731 C 360559,39836 360403,39800 360169,39425 C 360023,39191 359719,39000 359494,39000 C 359269,39000 358732,38820 358300,38600 C 357868,38380 357223,38200 356865,38200 C 356414,38200 356147,38074 355995,37790 C 355836,37494 355660,37417 355359,37513 C 354958,37640 354119,37451 352563,36883 C 352073,36704 351216,36640 350011,36692 C 348381,36762 348177,36731 347992,36385 C 347858,36135 347573,36000 347180,36000 C 346846,36000 346420,35918 346232,35817 C 346021,35704 345527,35718 344933,35854 L 343975,36073 L 343237,35274 C 342398,34363 340730,32979 340026,32609 C 339684,32430 339009,32399 337605,32500 C 335949,32618 335640,32593 335539,32331 C 335474,32161 335100,31962 334707,31888 C 333966,31749 332000,30144 332000,29678 C 332000,29505 331600,29440 330650,29458 C 329176,29487 328210,29111 327129,28086 C 326584,27569 326490,27550 324990,27653 C 323494,27756 323405,27738 323103,27277 C 322847,26886 322714,26832 322406,26997 C 321833,27304 321216,27243 320516,26810 C 320004,26493 319469,26412 317692,26379 C 315742,26343 315445,26290 315000,25895 C 314632,25567 314132,25414 313104,25315 C 312279,25235 311566,25050 311359,24863 C 311065,24596 310600,24561 308455,24644 C 306784,24708 305781,24667 305551,24523 C 305290,24360 305093,24371 304781,24566 C 304385,24813 302767,24774 301190,24481 C 300840,24415 300501,24539 300113,24872 C 299418,25469 297033,25493 295722,24914 C 294673,24452 288253,24588 287488,25090 C 286960,25436 286149,25493 285637,25221 C 285435,25114 284859,25123 284200,25244 C 283595,25355 282680,25459 282166,25473 C 281483,25493 281096,25628 280726,25975 C 280331,26347 280098,26420 279660,26309 C 279352,26231 278920,26176 278700,26187 C 276148,26312 275745,26365 275604,26594 C 275411,26906 273510,27235 272853,27070 C 272573,27000 272246,27072 272042,27248 C 271579,27648 270480,28000 269695,28000 C 269340,28000 268948,28122 268824,28271 C 268689,28434 267951,28597 266983,28677 C 266095,28751 265172,28940 264932,29097 C 264693,29254 264318,29386 264098,29391 C 262610,29422 261943,29551 261783,29837 C 261648,30079 261241,30164 260102,30192 C 257778,30248 257539,30285 256948,30680 C 256558,30940 256209,31012 255765,30923 C 255004,30771 254015,31295 254379,31659 C 254500,31780 254600,32017 254600,32185 C 254600,32487 256151,33999 256461,34000 C 256737,34000 257408,35742 257282,36131 C 256925,37232 256725,37600 256484,37600 C 256134,37600 255200,39203 255200,39805 C 255200,40063 255002,40485 254760,40743 C 253774,41792 254506,43268 256594,44441 C 257468,44932 257364,45438 256184,46433 C 255274,47201 255181,47353 255289,47895 C 255555,49226 258913,53200 259772,53200 C 260257,53200 262200,54340 262200,54624 C 262200,55728 261044,56043 259352,55400 C 258576,55105 258053,55033 257358,55125 C 256606,55224 256272,55164 255697,54825 C 255301,54591 254785,54400 254549,54400 C 254314,54400 253767,54154 253333,53854 C 252667,53392 252356,53312 251323,53336 C 250352,53359 250026,53286 249742,52983 C 249502,52726 249114,52600 248560,52600 C 247797,52600 246600,51742 246600,51196 C 246600,51124 245832,51053 244893,51039 C 242990,51012 242853,50966 242591,50277 C 242490,50011 242188,49709 241920,49608 C 241652,49506 241351,49277 241252,49099 C 241099,48827 240988,48814 240536,49020 C 238675,49868 236370,47474 237133,45487 C 237491,44554 235278,43469 234503,44197 C 234130,44548 233799,44595 231690,44595 C 230376,44595 228931,44596 228481,44597 C 227914,44599 227550,44476 227300,44200 C 227101,43980 226814,43800 226662,43800 C 226367,43800 225926,43549 224230,42415 C 223642,42022 222922,41576 222630,41425 C 220618,40380 220448,38400 222370,38400 C 222856,38400 223063,38281 223235,37903 C 223622,37053 224362,36714 225900,36681 C 228281,36630 228633,36485 228478,35624 C 228308,34685 228304,34682 227531,34962 C 227168,35093 226681,35200 226448,35200 C 226214,35200 225975,35279 225915,35376 C 225855,35473 225107,35611 224253,35683 C 223399,35755 222160,35938 221500,36090 C 218669,36740 218260,36789 216900,36646 L 215500,36499 L 215518,35636 C 215536,34795 215523,34777 215018,34936 C 213925,35282 211745,35094 211435,34628 C 211279,34392 211034,34200 210890,34200 C 210747,34200 210465,33993 210265,33741 C 209712,33045 209493,32975 208871,33300 C 208557,33464 208184,33598 208043,33599 C 207902,33599 207587,33724 207343,33876 C 206726,34261 205326,34438 204720,34208 C 204298,34047 204105,34106 203571,34555 C 202959,35070 202832,35094 200914,35066 C 199549,35046 198803,35117 198600,35288 C 198225,35602 196696,35983 195900,35960 C 195570,35950 194940,36104 194500,36302 C 193788,36622 192990,36665 187257,36690 C 180907,36717 180807,36724 180344,37159 C 180086,37401 179699,37600 179485,37600 C 179271,37600 178990,37770 178860,37978 C 178724,38196 178301,38403 177862,38466 C 177443,38527 176560,38684 175900,38815 C 175240,38946 173845,39041 172800,39026 C 171755,39010 170376,38999 169736,39001 C 169035,39002 168406,38887 168155,38711 C 167865,38508 167630,38477 167384,38609 C 166961,38835 165066,37989 163150,36719 C 162295,36152 162792,34421 163934,33987 C 164683,33702 164694,33285 163976,32429 C 163426,31775 163241,31671 162875,31810 C 162632,31902 161297,31923 159906,31858 C 157519,31745 157373,31760 157277,32126 C 157167,32549 154165,34213 153529,34205 C 153325,34202 152890,34425 152564,34700 C 152114,35078 151740,35200 151029,35200 C 150512,35200 149903,35330 149675,35490 C 148885,36043 147357,35123 147437,34142 C 147539,32894 144698,32063 143661,33037 C 143226,33445 142987,33476 140047,33504 C 137925,33524 136742,33617 136420,33789 C 136060,33982 135765,33993 135221,33832 C 133949,33458 132870,33396 131772,33637 C 131182,33766 130174,33851 129531,33827 C 128808,33799 128243,33881 128050,34041 C 127846,34210 127109,34301 125919,34303 C 124699,34306 123935,34402 123600,34597 C 123268,34789 122427,34898 121100,34922 C 118604,34966 117285,35157 116984,35519 C 116583,36003 113288,35907 112854,35400 C 112665,35180 112317,35000 112079,35000 C 111821,35000 111434,34720 111116,34303 C 110329,33272 110112,33211 107900,33400 C 106810,33493 105778,33498 105609,33410 C 105439,33322 104805,33336 104200,33442 C 102361,33762 101887,33714 101122,33130 C 100278,32487 96850,32305 94300,32769 C 93530,32909 92495,33072 92000,33131 C 91505,33190 91014,33320 90910,33419 C 90642,33674 89451,33645 89287,33380 C 88932,32805 87731,32584 84851,32562 C 81966,32541 81917,32533 81108,31963 C 80362,31437 80055,31366 77694,31172 C 75961,31030 74991,30862 74770,30667 C 74445,30379 73225,30287 67500,30122 C 65954,30077 65302,29968 64629,29640 C 63846,29259 61921,28889 60000,28750 C 59451,28711 59287,28605 59238,28262 C 59070,27086 57036,26045 55994,26603 C 55735,26742 55184,26736 54257,26585 C 53217,26416 52760,26422 52300,26610 C 51215,27055 49219,27003 48766,26519 C 48400,26128 48361,26123 48177,26450 C 47957,26841 46124,26962 45900,26600 C 45832,26490 45584,26400 45349,26400 C 45114,26400 44563,26153 44125,25850 L 43328,25300 L 39586,25300 C 36389,25300 35790,25252 35472,24969 C 35162,24694 34792,24657 33262,24746 C 31630,24842 31344,24806 30701,24427 C 29567,23758 7765,23755 6915,24424 C 6467,24776 6212,24827 5415,24721 C 4690,24625 4394,24666 4207,24891 C 3942,25211 3468,25313 1350,25508 L 0,25632 L 0,12816 L 0,0 L 384000,0 L 768000,0 L 768000,12476 L 768000,24951 L 767350,25225 C 766877,25424 765724,25494 763124,25484 C 759602,25471 759540,25478 759065,25953 C 758512,26506 756721,26446 756261,25859 C 755910,25410 754277,25270 753845,25652 C 753169,26249 748811,26593 748000,26113 C 746758,25378 746554,25352 745636,25811 C 745077,26090 744393,26246 743732,26245 C 743114,26245 742402,26396 741958,26622 C 741550,26830 741037,27000 740819,27000 C 739603,27000 739535,28520 740700,29669 C 741195,30157 741600,30696 741600,30868 C 741600,31131 741902,31175 743524,31151 C 745062,31128 745494,31185 745677,31435 C 745967,31831 747115,32099 747293,31812 C 747499,31479 747972,31563 748346,32000 C 748535,32220 748844,32400 749033,32400 C 749222,32400 749432,32490 749500,32600 C 749574,32720 750054,32750 750694,32675 C 751644,32563 751795,32597 752031,32975 C 752187,33225 752503,33400 752798,33400 C 753086,33400 753627,33691 754067,34083 C 754489,34458 755101,34876 755427,35011 C 757089,35700 757030,38200 755352,38200 C 755135,38200 754510,38425 753963,38700 C 753415,38975 752651,39200 752265,39200 C 751857,39200 751342,39374 751035,39615 C 750620,39942 750283,40017 749462,39965 C 748643,39914 748362,39976 748159,40254 C 747952,40536 747533,40623 746100,40683 C 745047,40726 743885,40908 743300,41119 C 742464,41422 741640,41483 738271,41491 C 734766,41499 734193,41544 733866,41840 C 733659,42028 733087,42244 732595,42321 C 732103,42397 731485,42627 731223,42830 C 730686,43246 730158,43299 729586,42992 C 729302,42841 728946,42870 728260,43103 C 727706,43291 727030,43376 726611,43309 C 726220,43247 725773,43278 725618,43379 C 725443,43493 725158,43481 724863,43347 C 724515,43188 724327,43193 724155,43365 C 724026,43494 723702,43600 723436,43600 C 723170,43600 722645,43870 722269,44200 C 721894,44530 721387,44801 721143,44801 C 720899,44802 720442,44937 720127,45101 C 719419,45471 719216,45474 718816,45124 C 718164,44553 717659,44554 717126,45128 C 716690,45599 716555,45644 716142,45455 C 715852,45323 715552,45308 715382,45416 C 715227,45514 714735,45595 714288,45597 C 713842,45599 713302,45732 713088,45894 C 712875,46055 712518,46190 712295,46194 C 712071,46197 711672,46352 711408,46537 C 710709,47027 708094,47036 707655,46550 C 707237,46089 706746,46107 706300,46600 C 706101,46820 705738,47000 705493,47000 C 705249,47000 704931,47142 704788,47315 C 704005,48258 702674,48573 701933,47990 C 701536,47678 701322,47628 701038,47780 C 700833,47890 700467,47928 700226,47865 C 699960,47795 699643,47880 699422,48080 C 699029,48436 693047,48926 691964,48691 C 691566,48604 691376,48671 691228,48949 C 691052,49277 690753,49326 688784,49353 C 686642,49381 686514,49407 685981,49918 C 685459,50418 685341,50445 684221,50318 C 683298,50214 682705,50275 681660,50584 C 680225,51007 677596,51049 674181,50701 C 672471,50528 670883,50900 670462,51575 C 670263,51893 670036,51938 668964,51869 C 665477,51647 663877,51727 662964,52169 C 661943,52663 661581,52701 661231,52351 C 661095,52215 660379,52042 659641,51969 C 658904,51895 657895,51744 657400,51634 C 656672,51471 656436,51491 656163,51736 C 655903,51969 655558,52009 654663,51909 C 654023,51837 653029,51781 652454,51784 C 651620,51787 651366,51710 651200,51400 C 651045,51110 650854,51039 650445,51121 C 649967,51217 649828,51117 649329,50329 C 648466,48964 647389,49042 645850,50581 C 644765,51666 644108,51426 644070,49930 C 644035,48516 641996,47324 641117,48203 C 641008,48312 640688,48400 640405,48400 C 638977,48400 638617,49441 639918,49805 C 641020,50114 641399,50704 641024,51528 C 640725,52182 638715,52103 637758,51399 C 637066,50890 636835,50897 636246,51450 C 635558,52095 632192,52050 631486,51387 C 631084,51009 630896,50979 629710,51106 C 628594,51226 628323,51193 627995,50896 C 627629,50564 627544,50563 626553,50871 C 624552,51495 621730,50908 620692,49651 C 620287,49162 617640,49267 616900,49802 C 616556,50050 614125,50768 613600,50776 C 611922,50801 610098,51205 609784,51621 C 609543,51941 609327,52025 608971,51936 C 608620,51847 608420,51922 608242,52207 C 608101,52433 607777,52600 607480,52600 C 607123,52600 606929,52730 606853,53019 C 606779,53304 606217,53690 605103,54221 C 603993,54751 603389,55166 603235,55502 C 603011,55995 601411,56203 600400,55870 z"
+ id="path164"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/applets/clock/set-timezone.c b/applets/clock/set-timezone.c
new file mode 100644
index 00000000..3b4f1e56
--- /dev/null
+++ b/applets/clock/set-timezone.c
@@ -0,0 +1,291 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 David Zeuthen <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/wait.h>
+
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+
+#include "set-timezone.h"
+
+
+static DBusGConnection *
+get_system_bus (void)
+{
+ GError *error;
+ static DBusGConnection *bus = NULL;
+
+ if (bus == NULL) {
+ error = NULL;
+ bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+ if (bus == NULL) {
+ g_warning ("Couldn't connect to system bus: %s",
+ error->message);
+ g_error_free (error);
+ }
+ }
+
+ return bus;
+}
+
+#define CACHE_VALIDITY_SEC 2
+
+typedef void (*CanDoFunc) (gint value);
+
+static void
+notify_can_do (DBusGProxy *proxy,
+ DBusGProxyCall *call,
+ void *user_data)
+{
+ CanDoFunc callback = user_data;
+ GError *error = NULL;
+ gint value;
+
+ if (dbus_g_proxy_end_call (proxy, call,
+ &error,
+ G_TYPE_INT, &value,
+ G_TYPE_INVALID)) {
+ callback (value);
+ }
+}
+
+static void
+refresh_can_do (const gchar *action, CanDoFunc callback)
+{
+ DBusGConnection *bus;
+ DBusGProxy *proxy;
+
+ bus = get_system_bus ();
+ if (bus == NULL)
+ return;
+
+ proxy = dbus_g_proxy_new_for_name (bus,
+ "org.mate.SettingsDaemon.DateTimeMechanism",
+ "/",
+ "org.mate.SettingsDaemon.DateTimeMechanism");
+
+ dbus_g_proxy_begin_call_with_timeout (proxy,
+ action,
+ notify_can_do,
+ callback, NULL,
+ INT_MAX,
+ G_TYPE_INVALID);
+}
+
+static gint settimezone_cache = 0;
+static time_t settimezone_stamp = 0;
+
+static void
+update_can_settimezone (gint res)
+{
+ settimezone_cache = res;
+ time (&settimezone_stamp);
+}
+
+gint
+can_set_system_timezone (void)
+{
+ time_t now;
+
+ time (&now);
+ if (ABS (now - settimezone_stamp) > CACHE_VALIDITY_SEC) {
+ refresh_can_do ("CanSetTimezone", update_can_settimezone);
+ settimezone_stamp = now;
+ }
+
+ return settimezone_cache;
+}
+
+static gint settime_cache = 0;
+static time_t settime_stamp = 0;
+
+static void
+update_can_settime (gint res)
+{
+ settime_cache = res;
+ time (&settime_stamp);
+}
+
+gint
+can_set_system_time (void)
+{
+ time_t now;
+
+ time (&now);
+ if (ABS (now - settime_stamp) > CACHE_VALIDITY_SEC) {
+ refresh_can_do ("CanSetTime", update_can_settime);
+ settime_stamp = now;
+ }
+
+ return settime_cache;
+}
+
+typedef struct {
+ gint ref_count;
+ gchar *call;
+ gint64 time;
+ gchar *filename;
+ GFunc callback;
+ gpointer data;
+ GDestroyNotify notify;
+} SetTimeCallbackData;
+
+static void
+free_data (gpointer d)
+{
+ SetTimeCallbackData *data = d;
+
+ data->ref_count--;
+ if (data->ref_count == 0) {
+ if (data->notify)
+ data->notify (data->data);
+ g_free (data->filename);
+ g_free (data);
+ }
+}
+
+static void
+set_time_notify (DBusGProxy *proxy,
+ DBusGProxyCall *call,
+ void *user_data)
+{
+ SetTimeCallbackData *data = user_data;
+ GError *error = NULL;
+
+ if (dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID)) {
+ if (data->callback)
+ data->callback (data->data, NULL);
+ }
+ else {
+ if (error->domain == DBUS_GERROR &&
+ error->code == DBUS_GERROR_NO_REPLY) {
+ /* these errors happen because dbus doesn't
+ * use monotonic clocks
+ */
+ g_warning ("ignoring no-reply error when setting time");
+ g_error_free (error);
+ if (data->callback)
+ data->callback (data->data, NULL);
+ }
+ else {
+ if (data->callback)
+ data->callback (data->data, error);
+ else
+ g_error_free (error);
+ }
+ }
+}
+
+static void
+set_time_async (SetTimeCallbackData *data)
+{
+ DBusGConnection *bus;
+ DBusGProxy *proxy;
+
+ bus = get_system_bus ();
+ if (bus == NULL)
+ return;
+
+ proxy = dbus_g_proxy_new_for_name (bus,
+ "org.mate.SettingsDaemon.DateTimeMechanism",
+ "/",
+ "org.mate.SettingsDaemon.DateTimeMechanism");
+
+ data->ref_count++;
+ if (strcmp (data->call, "SetTime") == 0)
+ dbus_g_proxy_begin_call_with_timeout (proxy,
+ "SetTime",
+ set_time_notify,
+ data, free_data,
+ INT_MAX,
+ /* parameters: */
+ G_TYPE_INT64, data->time,
+ G_TYPE_INVALID,
+ /* return values: */
+ G_TYPE_INVALID);
+ else
+ dbus_g_proxy_begin_call_with_timeout (proxy,
+ "SetTimezone",
+ set_time_notify,
+ data, free_data,
+ INT_MAX,
+ /* parameters: */
+ G_TYPE_STRING, data->filename,
+ G_TYPE_INVALID,
+ /* return values: */
+ G_TYPE_INVALID);
+}
+
+void
+set_system_time_async (gint64 time,
+ GFunc callback,
+ gpointer d,
+ GDestroyNotify notify)
+{
+ SetTimeCallbackData *data;
+
+ if (time == -1)
+ return;
+
+ data = g_new0 (SetTimeCallbackData, 1);
+ data->ref_count = 1;
+ data->call = "SetTime";
+ data->time = time;
+ data->filename = NULL;
+ data->callback = callback;
+ data->data = d;
+ data->notify = notify;
+
+ set_time_async (data);
+ free_data (data);
+}
+
+void
+set_system_timezone_async (const gchar *filename,
+ GFunc callback,
+ gpointer d,
+ GDestroyNotify notify)
+{
+ SetTimeCallbackData *data;
+
+ if (filename == NULL)
+ return;
+
+ data = g_new0 (SetTimeCallbackData, 1);
+ data->ref_count = 1;
+ data->call = "SetTimezone";
+ data->time = -1;
+ data->filename = g_strdup (filename);
+ data->callback = callback;
+ data->data = d;
+ data->notify = notify;
+
+ set_time_async (data);
+ free_data (data);
+}
diff --git a/applets/clock/set-timezone.h b/applets/clock/set-timezone.h
new file mode 100644
index 00000000..5280b079
--- /dev/null
+++ b/applets/clock/set-timezone.h
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 David Zeuthen <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __SET_SYSTEM_TIMEZONE_H__
+
+#include <glib.h>
+#include <time.h>
+
+gint can_set_system_timezone (void);
+
+gint can_set_system_time (void);
+
+void set_system_time_async (gint64 time,
+ GFunc callback,
+ gpointer data,
+ GDestroyNotify notify);
+
+void set_system_timezone_async (const gchar *filename,
+ GFunc callback,
+ gpointer data,
+ GDestroyNotify notify);
+
+#endif
diff --git a/applets/clock/system-timezone.c b/applets/clock/system-timezone.c
new file mode 100644
index 00000000..336f5a9f
--- /dev/null
+++ b/applets/clock/system-timezone.c
@@ -0,0 +1,1048 @@
+/* System timezone handling
+ *
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * Authors: Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Some code is based on previous code in clock-location.c and on code from
+ * tz.c (shipped with version <= 2.22.0). Those files were under the same
+ * license, with those authors and copyrights:
+ *
+ * clock-location.c:
+ * ================
+ * No header, but most of the work was done (AFAIK) by
+ * Federico Mena Quintero <[email protected]>
+ * Matthias Clasen <[email protected]>
+ *
+ * tz.c:
+ * ====
+ * Copyright (C) 2000-2001 Ximian, Inc.
+ * Copyright (C) 2004 Sun Microsystems, Inc.
+ *
+ * Authors: Hans Petter Jansson <[email protected]>
+ * additional functions by Erwann Chenede <[email protected]>
+ * reworked by Vincent Untz <[email protected]>
+ *
+ * Largely based on Michael Fulbright's work on Anaconda.
+ */
+
+/* FIXME: it'd be nice to filter out the timezones that we might get when
+ * parsing config files that are not in zone.tab. Note that it's also wrong
+ * in some cases: eg, in tzdata2008b, Asia/Calcutta got renamed to
+ * Asia/Kolkata and the old name is not in zone.tab. */
+
+#include <string.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <gio/gio.h>
+
+#include "system-timezone.h"
+
+/* Files that we look at and that should be monitored */
+#define CHECK_NB 5
+#define ETC_TIMEZONE "/etc/timezone"
+#define ETC_TIMEZONE_MAJ "/etc/TIMEZONE"
+#define ETC_RC_CONF "/etc/rc.conf"
+#define ETC_SYSCONFIG_CLOCK "/etc/sysconfig/clock"
+#define ETC_CONF_D_CLOCK "/etc/conf.d/clock"
+#define ETC_LOCALTIME "/etc/localtime"
+
+/* The first 4 characters in a timezone file, from tzfile.h */
+#define TZ_MAGIC "TZif"
+
+static char *files_to_check[CHECK_NB] = {
+ ETC_TIMEZONE,
+ ETC_TIMEZONE_MAJ,
+ ETC_SYSCONFIG_CLOCK,
+ ETC_CONF_D_CLOCK,
+ ETC_LOCALTIME
+};
+
+static GObject *systz_singleton = NULL;
+
+G_DEFINE_TYPE (SystemTimezone, system_timezone, G_TYPE_OBJECT)
+
+typedef struct {
+ char *tz;
+ char *env_tz;
+ GFileMonitor *monitors[CHECK_NB];
+} SystemTimezonePrivate;
+
+enum {
+ CHANGED,
+ LAST_SIGNAL
+};
+
+static guint system_timezone_signals[LAST_SIGNAL] = { 0 };
+
+static GObject *system_timezone_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_properties);
+static void system_timezone_finalize (GObject *obj);
+
+static void system_timezone_monitor_changed (GFileMonitor *handle,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event,
+ gpointer user_data);
+static char *system_timezone_find (void);
+
+#define PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SYSTEM_TIMEZONE_TYPE, SystemTimezonePrivate))
+
+SystemTimezone *
+system_timezone_new (void)
+{
+ return g_object_new (SYSTEM_TIMEZONE_TYPE, NULL);
+}
+
+const char *
+system_timezone_get (SystemTimezone *systz)
+{
+ SystemTimezonePrivate *priv;
+
+ g_return_val_if_fail (IS_SYSTEM_TIMEZONE (systz), NULL);
+
+ priv = PRIVATE (systz);
+ return priv->tz;
+}
+
+const char *
+system_timezone_get_env (SystemTimezone *systz)
+{
+ SystemTimezonePrivate *priv;
+
+ g_return_val_if_fail (IS_SYSTEM_TIMEZONE (systz), NULL);
+
+ priv = PRIVATE (systz);
+ return priv->env_tz;
+}
+
+static void
+system_timezone_class_init (SystemTimezoneClass *class)
+{
+ GObjectClass *g_obj_class = G_OBJECT_CLASS (class);
+
+ g_obj_class->constructor = system_timezone_constructor;
+ g_obj_class->finalize = system_timezone_finalize;
+
+ system_timezone_signals[CHANGED] =
+ g_signal_new ("changed",
+ G_OBJECT_CLASS_TYPE (g_obj_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (SystemTimezoneClass, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1, G_TYPE_STRING);
+
+ g_type_class_add_private (class, sizeof (SystemTimezonePrivate));
+}
+
+static void
+system_timezone_init (SystemTimezone *systz)
+{
+ int i;
+ SystemTimezonePrivate *priv = PRIVATE (systz);
+
+ priv->tz = NULL;
+ priv->env_tz = NULL;
+ for (i = 0; i < CHECK_NB; i++)
+ priv->monitors[i] = NULL;
+}
+
+static GObject *
+system_timezone_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_properties)
+{
+ GObject *obj;
+ SystemTimezonePrivate *priv;
+ int i;
+
+ /* This is a singleton, we don't need to have it per-applet */
+ if (systz_singleton)
+ return g_object_ref (systz_singleton);
+
+ obj = G_OBJECT_CLASS (system_timezone_parent_class)->constructor (
+ type,
+ n_construct_properties,
+ construct_properties);
+
+ priv = PRIVATE (obj);
+
+ priv->tz = system_timezone_find ();
+
+ priv->env_tz = g_strdup (g_getenv ("TZ"));
+
+ for (i = 0; i < CHECK_NB; i++) {
+ GFile *file;
+ GFile *parent;
+ GFileType parent_type;
+
+ file = g_file_new_for_path (files_to_check[i]);
+
+ parent = g_file_get_parent (file);
+ parent_type = g_file_query_file_type (parent, G_FILE_QUERY_INFO_NONE, NULL);
+ g_object_unref (parent);
+
+ /* We don't try to monitor the file if the parent directory
+ * doesn't exist: this means we're on a system where this file
+ * is not useful to determine the system timezone.
+ * Since gio does not monitor file in non-existing directories
+ * in a clever way (as of gio 2.22, it just polls every other
+ * seconds to see if the directory now exists), this avoids
+ * unnecessary wakeups. */
+ if (parent_type == G_FILE_TYPE_DIRECTORY)
+ priv->monitors[i] = g_file_monitor_file (file,
+ G_FILE_MONITOR_NONE,
+ NULL, NULL);
+ g_object_unref (file);
+
+ if (priv->monitors[i])
+ g_signal_connect (G_OBJECT (priv->monitors[i]),
+ "changed",
+ G_CALLBACK (system_timezone_monitor_changed),
+ obj);
+ }
+
+ systz_singleton = obj;
+
+ return systz_singleton;
+}
+
+static void
+system_timezone_finalize (GObject *obj)
+{
+ int i;
+ SystemTimezonePrivate *priv = PRIVATE (obj);
+
+ if (priv->tz) {
+ g_free (priv->tz);
+ priv->tz = NULL;
+ }
+
+ if (priv->env_tz) {
+ g_free (priv->env_tz);
+ priv->env_tz = NULL;
+ }
+
+ for (i = 0; i < CHECK_NB; i++) {
+ if (priv->monitors[i])
+ g_object_unref (priv->monitors[i]);
+ priv->monitors[i] = NULL;
+ }
+
+ G_OBJECT_CLASS (system_timezone_parent_class)->finalize (obj);
+
+ g_assert (obj == systz_singleton);
+
+ systz_singleton = NULL;
+}
+
+static void
+system_timezone_monitor_changed (GFileMonitor *handle,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event,
+ gpointer user_data)
+{
+ SystemTimezonePrivate *priv = PRIVATE (user_data);
+ char *new_tz;
+
+ if (event != G_FILE_MONITOR_EVENT_CHANGED &&
+ event != G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT &&
+ event != G_FILE_MONITOR_EVENT_DELETED &&
+ event != G_FILE_MONITOR_EVENT_CREATED)
+ return;
+
+ new_tz = system_timezone_find ();
+
+ g_assert (priv->tz != NULL && new_tz != NULL);
+
+ if (strcmp (priv->tz, new_tz) != 0) {
+ g_free (priv->tz);
+ priv->tz = new_tz;
+
+ g_signal_emit (G_OBJECT (user_data),
+ system_timezone_signals[CHANGED],
+ 0, priv->tz);
+ } else
+ g_free (new_tz);
+}
+
+
+/*
+ * Code to deal with the system timezone on all distros.
+ * There's no dependency on the SystemTimezone GObject here.
+ *
+ * Here's what we know:
+ *
+ * + /etc/localtime contains the binary data of the timezone.
+ * It can be a symlink to the actual data file, a hard link to the data
+ * file, or just a copy. So we can determine the timezone with this
+ * (reading the symlink, comparing inodes, or comparing content).
+ *
+ * + However, most distributions also have the timezone setting
+ * configured somewhere else. This might be better to read it from there.
+ *
+ * Debian/Ubuntu/Gentoo (new): content of /etc/timezone
+ * Fedora/Mandriva: the ZONE key in /etc/sysconfig/clock
+ * openSUSE: the TIMEZONE key in /etc/sysconfig/clock
+ * Solaris/OpenSolaris: the TZ key in /etc/TIMEZONE
+ * Arch Linux: the TIMEZONE key in /etc/rc.conf
+ * Gentoo (old): the ZONE key in /etc/conf.d/clock
+ *
+ * FIXME: reading the system-tools-backends, it seems there's this too:
+ * Solaris: the TZ key in /etc/default/init
+ * /etc/TIMEZONE seems to be a link to /etc/default/init
+ *
+ * First, some functions to handle those system config files.
+ *
+ */
+
+/* This works for Debian and derivatives (including Ubuntu), and new Gentoo */
+static char *
+system_timezone_read_etc_timezone (void)
+{
+ FILE *etc_timezone;
+ GString *reading;
+ int c;
+
+ etc_timezone = g_fopen (ETC_TIMEZONE, "r");
+ if (!etc_timezone)
+ return NULL;
+
+ reading = g_string_new ("");
+
+ c = fgetc (etc_timezone);
+ /* only get the first line, we'll validate the value later */
+ while (c != EOF && !g_ascii_isspace (c)) {
+ reading = g_string_append_c (reading, c);
+ c = fgetc (etc_timezone);
+ }
+
+ fclose (etc_timezone);
+
+ if (reading->str && reading->str[0] != '\0')
+ return g_string_free (reading, FALSE);
+ else
+ g_string_free (reading, TRUE);
+
+ return NULL;
+}
+
+static gboolean
+system_timezone_write_etc_timezone (const char *tz,
+ GError **error)
+{
+ char *content;
+ GError *our_error;
+ gboolean retval;
+
+ if (!g_file_test (ETC_TIMEZONE, G_FILE_TEST_IS_REGULAR))
+ return TRUE;
+
+ content = g_strdup_printf ("%s\n", tz);
+
+ our_error = NULL;
+ retval = g_file_set_contents (ETC_TIMEZONE, content, -1, &our_error);
+ g_free (content);
+
+ if (!retval) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_GENERAL,
+ ETC_TIMEZONE" cannot be overwritten: %s",
+ our_error->message);
+ g_error_free (our_error);
+ }
+
+ return retval;
+}
+
+
+/* Read a file that looks like a key-file (but there's no need for groups)
+ * and get the last value for a specific key */
+static char *
+system_timezone_read_key_file (const char *filename,
+ const char *key)
+{
+ GIOChannel *channel;
+ char *key_eq;
+ char *line;
+ char *retval;
+
+ if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR))
+ return NULL;
+
+ channel = g_io_channel_new_file (filename, "r", NULL);
+ if (!channel)
+ return NULL;
+
+ key_eq = g_strdup_printf ("%s=", key);
+ retval = NULL;
+
+ while (g_io_channel_read_line (channel, &line, NULL,
+ NULL, NULL) == G_IO_STATUS_NORMAL) {
+ if (g_str_has_prefix (line, key_eq)) {
+ char *value;
+ int len;
+
+ value = line + strlen (key_eq);
+ g_strstrip (value);
+
+ len = strlen (value);
+
+ if (value[0] == '\"') {
+ if (value[len - 1] == '\"') {
+ if (retval)
+ g_free (retval);
+
+ retval = g_strndup (value + 1,
+ len - 2);
+ }
+ } else {
+ if (retval)
+ g_free (retval);
+
+ retval = g_strdup (line + strlen (key_eq));
+ }
+
+ g_strstrip (retval);
+ }
+
+ g_free (line);
+ }
+
+ g_free (key_eq);
+ g_io_channel_unref (channel);
+
+ return retval;
+}
+
+static gboolean
+system_timezone_write_key_file (const char *filename,
+ const char *key,
+ const char *value,
+ GError **error)
+{
+ GError *our_error;
+ char *content;
+ gsize len;
+ char *key_eq;
+ char **lines;
+ gboolean replaced;
+ gboolean retval;
+ int n;
+
+ if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR))
+ return TRUE;
+
+ our_error = NULL;
+
+ if (!g_file_get_contents (filename, &content, &len, &our_error)) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_GENERAL,
+ "%s cannot be read: %s",
+ filename, our_error->message);
+ g_error_free (our_error);
+ return FALSE;
+ }
+
+ lines = g_strsplit (content, "\n", 0);
+ g_free (content);
+
+ key_eq = g_strdup_printf ("%s=", key);
+ replaced = FALSE;
+
+ for (n = 0; lines[n] != NULL; n++) {
+ if (g_str_has_prefix (lines[n], key_eq)) {
+ char *old_value;
+ gboolean use_quotes;
+
+ old_value = lines[n] + strlen (key_eq);
+ g_strstrip (old_value);
+ use_quotes = old_value[0] == '\"';
+
+ g_free (lines[n]);
+
+ if (use_quotes)
+ lines[n] = g_strdup_printf ("%s\"%s\"",
+ key_eq, value);
+ else
+ lines[n] = g_strdup_printf ("%s%s",
+ key_eq, value);
+
+ replaced = TRUE;
+ }
+ }
+
+ g_free (key_eq);
+
+ if (!replaced) {
+ g_strfreev (lines);
+ return TRUE;
+ }
+
+ content = g_strjoinv ("\n", lines);
+ g_strfreev (lines);
+
+ retval = g_file_set_contents (filename, content, -1, &our_error);
+ g_free (content);
+
+ if (!retval) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_GENERAL,
+ "%s cannot be overwritten: %s",
+ filename, our_error->message);
+ g_error_free (our_error);
+ }
+
+ return retval;
+}
+
+/* This works for Solaris/OpenSolaris */
+static char *
+system_timezone_read_etc_TIMEZONE (void)
+{
+ return system_timezone_read_key_file (ETC_TIMEZONE_MAJ,
+ "TZ");
+}
+
+static gboolean
+system_timezone_write_etc_TIMEZONE (const char *tz,
+ GError **error)
+{
+ return system_timezone_write_key_file (ETC_TIMEZONE_MAJ,
+ "TZ", tz, error);
+}
+
+/* This works for Fedora and Mandriva */
+static char *
+system_timezone_read_etc_sysconfig_clock (void)
+{
+ return system_timezone_read_key_file (ETC_SYSCONFIG_CLOCK,
+ "ZONE");
+}
+
+static gboolean
+system_timezone_write_etc_sysconfig_clock (const char *tz,
+ GError **error)
+{
+ return system_timezone_write_key_file (ETC_SYSCONFIG_CLOCK,
+ "ZONE", tz, error);
+}
+
+/* This works for openSUSE */
+static char *
+system_timezone_read_etc_sysconfig_clock_alt (void)
+{
+ return system_timezone_read_key_file (ETC_SYSCONFIG_CLOCK,
+ "TIMEZONE");
+}
+
+static gboolean
+system_timezone_write_etc_sysconfig_clock_alt (const char *tz,
+ GError **error)
+{
+ return system_timezone_write_key_file (ETC_SYSCONFIG_CLOCK,
+ "TIMEZONE", tz, error);
+}
+
+/* This works for old Gentoo */
+static char *
+system_timezone_read_etc_conf_d_clock (void)
+{
+ return system_timezone_read_key_file (ETC_CONF_D_CLOCK,
+ "TIMEZONE");
+}
+
+static gboolean
+system_timezone_write_etc_conf_d_clock (const char *tz,
+ GError **error)
+{
+ return system_timezone_write_key_file (ETC_CONF_D_CLOCK,
+ "TIMEZONE", tz, error);
+}
+
+/* This works for Arch Linux */
+static char *
+system_timezone_read_etc_rc_conf (void)
+{
+ return system_timezone_read_key_file (ETC_RC_CONF,
+ "TIMEZONE");
+}
+
+static gboolean
+system_timezone_write_etc_rc_conf (const char *tz,
+ GError **error)
+{
+ return system_timezone_write_key_file (ETC_RC_CONF,
+ "TIMEZONE", tz, error);
+}
+
+/*
+ *
+ * First, getting the timezone.
+ *
+ */
+
+static char *
+system_timezone_strip_path_if_valid (const char *filename)
+{
+ int skip;
+
+ if (!filename || !g_str_has_prefix (filename, SYSTEM_ZONEINFODIR"/"))
+ return NULL;
+
+ /* Timezone data files also live under posix/ and right/ for some
+ * reason.
+ * FIXME: make sure accepting those files is valid. I think "posix" is
+ * okay, not sure about "right" */
+ if (g_str_has_prefix (filename, SYSTEM_ZONEINFODIR"/posix/"))
+ skip = strlen (SYSTEM_ZONEINFODIR"/posix/");
+ else if (g_str_has_prefix (filename, SYSTEM_ZONEINFODIR"/right/"))
+ skip = strlen (SYSTEM_ZONEINFODIR"/right/");
+ else
+ skip = strlen (SYSTEM_ZONEINFODIR"/");
+
+ return g_strdup (filename + skip);
+}
+
+/* Read the soft symlink from /etc/localtime */
+static char *
+system_timezone_read_etc_localtime_softlink (void)
+{
+ char *file;
+ char *tz;
+
+ if (!g_file_test (ETC_LOCALTIME, G_FILE_TEST_IS_SYMLINK))
+ return NULL;
+
+ file = g_file_read_link (ETC_LOCALTIME, NULL);
+ tz = system_timezone_strip_path_if_valid (file);
+ g_free (file);
+
+ return tz;
+}
+
+typedef gboolean (*CompareFiles) (struct stat *a_stat,
+ struct stat *b_stat,
+ const char *a_content,
+ gsize a_content_len,
+ const char *b_filename);
+
+static char *
+recursive_compare (struct stat *localtime_stat,
+ const char *localtime_content,
+ gsize localtime_content_len,
+ char *file,
+ CompareFiles compare_func)
+{
+ struct stat file_stat;
+
+ if (g_stat (file, &file_stat) != 0)
+ return NULL;
+
+ if (S_ISREG (file_stat.st_mode)) {
+ if (compare_func (localtime_stat,
+ &file_stat,
+ localtime_content,
+ localtime_content_len,
+ file))
+ return system_timezone_strip_path_if_valid (file);
+ else
+ return NULL;
+ } else if (S_ISDIR (file_stat.st_mode)) {
+ GDir *dir = NULL;
+ char *ret = NULL;
+ const char *subfile = NULL;
+ char *subpath = NULL;
+
+ dir = g_dir_open (file, 0, NULL);
+ if (dir == NULL)
+ return NULL;
+
+ while ((subfile = g_dir_read_name (dir)) != NULL) {
+ subpath = g_build_filename (file, subfile, NULL);
+
+ ret = recursive_compare (localtime_stat,
+ localtime_content,
+ localtime_content_len,
+ subpath,
+ compare_func);
+
+ g_free (subpath);
+
+ if (ret != NULL)
+ break;
+ }
+
+ g_dir_close (dir);
+
+ return ret;
+ }
+
+ return NULL;
+}
+
+
+static gboolean
+files_are_identical_inode (struct stat *a_stat,
+ struct stat *b_stat,
+ const char *a_content,
+ gsize a_content_len,
+ const char *b_filename)
+{
+ return (a_stat->st_ino == b_stat->st_ino);
+}
+
+
+/* Determine if /etc/localtime is a hard link to some file, by looking at
+ * the inodes */
+static char *
+system_timezone_read_etc_localtime_hardlink (void)
+{
+ struct stat stat_localtime;
+
+ if (g_stat (ETC_LOCALTIME, &stat_localtime) != 0)
+ return NULL;
+
+ if (!S_ISREG (stat_localtime.st_mode))
+ return NULL;
+
+ return recursive_compare (&stat_localtime,
+ NULL,
+ 0,
+ SYSTEM_ZONEINFODIR,
+ files_are_identical_inode);
+}
+
+static gboolean
+files_are_identical_content (struct stat *a_stat,
+ struct stat *b_stat,
+ const char *a_content,
+ gsize a_content_len,
+ const char *b_filename)
+{
+ char *b_content = NULL;
+ gsize b_content_len = -1;
+ int cmp;
+
+ if (a_stat->st_size != b_stat->st_size)
+ return FALSE;
+
+ if (!g_file_get_contents (b_filename,
+ &b_content, &b_content_len, NULL))
+ return FALSE;
+
+ if (a_content_len != b_content_len) {
+ g_free (b_content);
+ return FALSE;
+ }
+
+ cmp = memcmp (a_content, b_content, a_content_len);
+ g_free (b_content);
+
+ return (cmp == 0);
+}
+
+/* Determine if /etc/localtime is a copy of a timezone file */
+static char *
+system_timezone_read_etc_localtime_content (void)
+{
+ struct stat stat_localtime;
+ char *localtime_content = NULL;
+ gsize localtime_content_len = -1;
+ char *retval;
+
+ if (g_stat (ETC_LOCALTIME, &stat_localtime) != 0)
+ return NULL;
+
+ if (!S_ISREG (stat_localtime.st_mode))
+ return NULL;
+
+ if (!g_file_get_contents (ETC_LOCALTIME,
+ &localtime_content,
+ &localtime_content_len,
+ NULL))
+ return NULL;
+
+ retval = recursive_compare (&stat_localtime,
+ localtime_content,
+ localtime_content_len,
+ SYSTEM_ZONEINFODIR,
+ files_are_identical_content);
+
+ g_free (localtime_content);
+
+ return retval;
+}
+
+typedef char * (*GetSystemTimezone) (void);
+/* The order of the functions here define the priority of the methods used
+ * to find the timezone. First method has higher priority. */
+static GetSystemTimezone get_system_timezone_methods[] = {
+ /* cheap and "more correct" than data from a config file */
+ system_timezone_read_etc_localtime_softlink,
+ /* reading various config files */
+ system_timezone_read_etc_timezone,
+ system_timezone_read_etc_sysconfig_clock,
+ system_timezone_read_etc_sysconfig_clock_alt,
+ system_timezone_read_etc_TIMEZONE,
+ system_timezone_read_etc_rc_conf,
+ /* reading deprecated config files */
+ system_timezone_read_etc_conf_d_clock,
+ /* reading /etc/timezone directly. Expensive since we have to stat
+ * many files */
+ system_timezone_read_etc_localtime_hardlink,
+ system_timezone_read_etc_localtime_content,
+ NULL
+};
+
+static gboolean
+system_timezone_is_valid (const char *tz)
+{
+ const char *c;
+
+ if (!tz)
+ return FALSE;
+
+ for (c = tz; *c != '\0'; c++) {
+ if (!(g_ascii_isalnum (*c) ||
+ *c == '/' || *c == '-' || *c == '_'))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static char *
+system_timezone_find (void)
+{
+ char *tz;
+ int i;
+
+ for (i = 0; get_system_timezone_methods[i] != NULL; i++) {
+ tz = get_system_timezone_methods[i] ();
+
+ if (system_timezone_is_valid (tz))
+ return tz;
+
+ g_free (tz);
+ }
+
+ return g_strdup ("UTC");
+}
+
+/*
+ *
+ * Now, setting the timezone.
+ *
+ */
+
+static gboolean
+system_timezone_is_zone_file_valid (const char *zone_file,
+ GError **error)
+{
+ GError *our_error;
+ GIOChannel *channel;
+ GIOStatus status;
+ char buffer[strlen (TZ_MAGIC)];
+ gsize read;
+
+ /* First, check the zone_file is properly rooted */
+ if (!g_str_has_prefix (zone_file, SYSTEM_ZONEINFODIR"/")) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE,
+ "Timezone file needs to be under "SYSTEM_ZONEINFODIR);
+ return FALSE;
+ }
+
+ /* Second, check it's a regular file that exists */
+ if (!g_file_test (zone_file, G_FILE_TEST_IS_REGULAR)) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE,
+ "No such timezone file %s", zone_file);
+ return FALSE;
+ }
+
+ /* Third, check that it's a tzfile (see tzfile(5)). The file has a 4
+ * bytes header which is TZ_MAGIC.
+ *
+ * TODO: is there glibc API for this? */
+ our_error = NULL;
+ channel = g_io_channel_new_file (zone_file, "r", &our_error);
+ if (!our_error)
+ status = g_io_channel_read_chars (channel,
+ buffer, strlen (TZ_MAGIC),
+ &read, &our_error);
+ if (channel)
+ g_io_channel_unref (channel);
+
+ if (our_error) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE,
+ "Timezone file %s cannot be read: %s",
+ zone_file, our_error->message);
+ g_error_free (our_error);
+ return FALSE;
+ }
+
+ if (read != strlen (TZ_MAGIC) || strncmp (buffer, TZ_MAGIC, strlen (TZ_MAGIC)) != 0) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE,
+ "%s is not a timezone file",
+ zone_file);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+system_timezone_set_etc_timezone (const char *zone_file,
+ GError **error)
+{
+ GError *our_error;
+ char *content;
+ gsize len;
+
+ if (!system_timezone_is_zone_file_valid (zone_file, error))
+ return FALSE;
+
+ /* If /etc/localtime is a symlink, write a symlink */
+ if (g_file_test (ETC_LOCALTIME, G_FILE_TEST_IS_SYMLINK)) {
+ if (g_unlink (ETC_LOCALTIME) == 0 &&
+ symlink (zone_file, ETC_LOCALTIME) == 0)
+ return TRUE;
+
+ /* If we couldn't symlink the file, we'll just fallback on
+ * copying it */
+ }
+
+ /* Else copy the file to /etc/localtime. We explicitly avoid doing
+ * hard links since they break with different partitions */
+ our_error = NULL;
+ if (!g_file_get_contents (zone_file, &content, &len, &our_error)) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_GENERAL,
+ "Timezone file %s cannot be read: %s",
+ zone_file, our_error->message);
+ g_error_free (our_error);
+ return FALSE;
+ }
+
+ if (!g_file_set_contents (ETC_LOCALTIME, content, len, &our_error)) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_GENERAL,
+ ETC_LOCALTIME" cannot be overwritten: %s",
+ our_error->message);
+ g_error_free (our_error);
+ g_free (content);
+ return FALSE;
+ }
+
+ g_free (content);
+
+ return TRUE;
+}
+
+typedef gboolean (*SetSystemTimezone) (const char *tz,
+ GError **error);
+/* The order here does not matter too much: we'll try to change all files
+ * that already have a timezone configured. It matters in case of error,
+ * since the process will be stopped and the last methods won't be called.
+ * So we use the same order as in get_system_timezone_methods */
+static SetSystemTimezone set_system_timezone_methods[] = {
+ /* writing various config files if they exist and have the
+ * setting already present */
+ system_timezone_write_etc_timezone,
+ system_timezone_write_etc_sysconfig_clock,
+ system_timezone_write_etc_sysconfig_clock_alt,
+ system_timezone_write_etc_TIMEZONE,
+ system_timezone_write_etc_rc_conf,
+ /* writing deprecated config files if they exist and have the
+ * setting already present */
+ system_timezone_write_etc_conf_d_clock,
+ NULL
+};
+
+static gboolean
+system_timezone_update_config (const char *tz,
+ GError **error)
+{
+ int i;
+
+ for (i = 0; set_system_timezone_methods[i] != NULL; i++) {
+ if (!set_system_timezone_methods[i] (tz, error))
+ return FALSE;
+ /* FIXME: maybe continue to change all config files if
+ * possible? */
+ }
+
+ return TRUE;
+}
+
+gboolean
+system_timezone_set_from_file (const char *zone_file,
+ GError **error)
+{
+ const char *tz;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ tz = zone_file + strlen (SYSTEM_ZONEINFODIR"/");
+
+ /* FIXME: is it right to return FALSE even when /etc/localtime was
+ * changed but not the config files? */
+ return (system_timezone_set_etc_timezone (zone_file, error) &&
+ system_timezone_update_config (tz, error));
+}
+
+gboolean
+system_timezone_set (const char *tz,
+ GError **error)
+{
+ char *zone_file;
+ gboolean retval;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ zone_file = g_build_filename (SYSTEM_ZONEINFODIR, tz, NULL);
+
+ /* FIXME: is it right to return FALSE even when /etc/localtime was
+ * changed but not the config files? */
+ retval = system_timezone_set_etc_timezone (zone_file, error) &&
+ system_timezone_update_config (tz, error);
+
+ g_free (zone_file);
+
+ return retval;
+}
+
+GQuark
+system_timezone_error_quark (void)
+{
+ static GQuark ret = 0;
+
+ if (ret == 0) {
+ ret = g_quark_from_static_string ("system-timezone-error");
+ }
+
+ return ret;
+}
diff --git a/applets/clock/system-timezone.h b/applets/clock/system-timezone.h
new file mode 100644
index 00000000..c67b5d37
--- /dev/null
+++ b/applets/clock/system-timezone.h
@@ -0,0 +1,87 @@
+/* System timezone handling
+ *
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * Authors: Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __SYSTEM_TIMEZONE_H__
+#define __SYSTEM_TIMEZONE_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef HAVE_SOLARIS
+#define SYSTEM_ZONEINFODIR "/usr/share/lib/zoneinfo/tab"
+#else
+#define SYSTEM_ZONEINFODIR "/usr/share/zoneinfo"
+#endif
+
+
+#define SYSTEM_TIMEZONE_TYPE (system_timezone_get_type ())
+#define SYSTEM_TIMEZONE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SYSTEM_TIMEZONE_TYPE, SystemTimezone))
+#define SYSTEM_TIMEZONE_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), SYSTEM_TIMEZONE_TYPE, SystemTimezoneClass))
+#define IS_SYSTEM_TIMEZONE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SYSTEM_TIMEZONE_TYPE))
+#define IS_SYSTEM_TIMEZONE_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), SYSTEM_TIMEZONE_TYPE))
+#define SYSTEM_TIMEZONE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), SYSTEM_TIMEZONE_TYPE, SystemTimezoneClass))
+
+typedef struct
+{
+ GObject g_object;
+} SystemTimezone;
+
+typedef struct
+{
+ GObjectClass g_object_class;
+
+ void (* changed) (SystemTimezone *systz,
+ const char *tz);
+} SystemTimezoneClass;
+
+GType system_timezone_get_type (void);
+
+SystemTimezone *system_timezone_new (void);
+
+const char *system_timezone_get (SystemTimezone *systz);
+const char *system_timezone_get_env (SystemTimezone *systz);
+
+/* Functions to set the timezone. They won't be used by the applet, but
+ * by a program with more privileges */
+
+#define SYSTEM_TIMEZONE_ERROR system_timezone_error_quark ()
+GQuark system_timezone_error_quark (void);
+
+typedef enum
+{
+ SYSTEM_TIMEZONE_ERROR_GENERAL,
+ SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE,
+ SYSTEM_TIMEZONE_NUM_ERRORS
+} SystemTimezoneError;
+
+gboolean system_timezone_set_from_file (const char *zone_file,
+ GError **error);
+gboolean system_timezone_set (const char *tz,
+ GError **error);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __SYSTEM_TIMEZONE_H__ */
diff --git a/applets/clock/test-system-timezone.c b/applets/clock/test-system-timezone.c
new file mode 100644
index 00000000..42a80611
--- /dev/null
+++ b/applets/clock/test-system-timezone.c
@@ -0,0 +1,122 @@
+/* Test for system timezone handling
+ *
+ * Copyright (C) 2008-2010 Novell, Inc.
+ *
+ * Authors: Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include "system-timezone.h"
+
+static void
+timezone_print (void)
+{
+ SystemTimezone *systz;
+
+ systz = system_timezone_new ();
+ g_print ("Current timezone: %s\n", system_timezone_get (systz));
+ g_object_unref (systz);
+}
+
+static int
+timezone_set (const char *new_tz)
+{
+ GError *error;
+
+ error = NULL;
+ if (!system_timezone_set (new_tz, &error)) {
+ g_printerr ("%s\n", error->message);
+ g_error_free (error);
+ return 1;
+ }
+
+ return 0;
+}
+
+static void
+timezone_changed (SystemTimezone *systz,
+ const char *new_tz,
+ gpointer data)
+{
+ g_print ("Timezone changed to: %s\n", new_tz);
+}
+
+static void
+timezone_monitor (void)
+{
+ SystemTimezone *systz;
+ GMainLoop *mainloop;
+
+ systz = system_timezone_new ();
+ g_signal_connect (systz, "changed",
+ G_CALLBACK (timezone_changed), NULL);
+
+ mainloop = g_main_loop_new (NULL, FALSE);
+ g_main_loop_run (mainloop);
+ g_main_loop_unref (mainloop);
+
+ g_object_unref (systz);
+}
+
+int
+main (int argc,
+ char **argv)
+{
+ int retval;
+
+ gboolean get = FALSE;
+ gboolean monitor = FALSE;
+ char *tz_set = NULL;
+
+ GError *error;
+ GOptionContext *context;
+ GOptionEntry options[] = {
+ { "get", 'g', 0, G_OPTION_ARG_NONE, &get, "Get the current timezone", NULL },
+ { "set", 's', 0, G_OPTION_ARG_STRING, &tz_set, "Set the timezone to TIMEZONE", "TIMEZONE" },
+ { "monitor", 'm', 0, G_OPTION_ARG_NONE, &monitor, "Monitor timezone changes", NULL },
+ { NULL, 0, 0, 0, NULL, NULL, NULL }
+ };
+
+ retval = 0;
+
+ g_type_init ();
+
+ context = g_option_context_new ("");
+ g_option_context_add_main_entries (context, options, NULL);
+
+ error = NULL;
+ if (!g_option_context_parse (context, &argc, &argv, &error)) {
+ g_printerr ("%s\n", error->message);
+ g_error_free (error);
+ g_option_context_free (context);
+
+ return 1;
+ }
+
+ g_option_context_free (context);
+
+ if (get || (!tz_set && !monitor))
+ timezone_print ();
+ else if (tz_set)
+ retval = timezone_set (tz_set);
+ else if (monitor)
+ timezone_monitor ();
+ else
+ g_assert_not_reached ();
+
+ return retval;
+}
diff --git a/applets/fish/Makefile.am b/applets/fish/Makefile.am
new file mode 100644
index 00000000..3d60a0bc
--- /dev/null
+++ b/applets/fish/Makefile.am
@@ -0,0 +1,111 @@
+AM_CPPFLAGS = \
+ $(LIBMATE_PANEL_APPLET_CFLAGS) \
+ $(FISH_CFLAGS) \
+ -I$(srcdir) \
+ -I$(srcdir)/../../libmate-panel-applet \
+ -I$(top_builddir)/libmate-panel-applet \
+ -DMATELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
+ -DFISH_ICONDIR=\""$(fishbitmapsdir)"\" \
+ -DFISH_BUILDERDIR=\""$(uidir)"\" \
+ -DFISH_MENU_UI_DIR=\""$(xmluidir)"\" \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+AM_CFLAGS = $(WARN_CFLAGS)
+
+FISH_SOURCES = fish.c
+
+FISH_LDADD = \
+ ../../libmate-panel-applet/libmate-panel-applet-3.la \
+ $(FISH_LIBS) \
+ $(LIBMATE_PANEL_APPLET_LIBS)
+
+if FISH_INPROCESS
+APPLET_IN_PROCESS = true
+APPLET_LOCATION = $(pkglibdir)/libfish-applet.so
+
+fish_applet_libdir = $(pkglibdir)
+fish_applet_lib_LTLIBRARIES = libfish-applet.la
+libfish_applet_la_SOURCES = $(FISH_SOURCES)
+libfish_applet_la_LIBADD = $(FISH_LDADD)
+libfish_applet_la_LDFLAGS = -module -avoid-version
+libfish_applet_la_CFLAGS = $(AM_CFLAGS)
+else
+APPLET_IN_PROCESS = false
+APPLET_LOCATION = $(libexecdir)/fish-applet
+
+libexec_PROGRAMS = fish-applet
+fish_applet_SOURCES = $(FISH_SOURCES)
+fish_applet_LDADD = $(FISH_LDADD)
+fish_applet_CFLAGS = $(AM_CFLAGS)
+endif
+
+appletdir = $(datadir)/mate-panel/applets
+applet_in_files = org.mate.panel.FishApplet.mate-panel-applet.in
+applet_DATA = $(applet_in_files:.mate-panel-applet.in=.mate-panel-applet)
+
+$(applet_in_files): $(applet_in_files).in Makefile
+ $(AM_V_GEN)sed \
+ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+ -e "s|\@IN_PROCESS\@|$(APPLET_IN_PROCESS)|" \
+ -e "s|\@VERSION\@|$(PACKAGE_VERSION)|" \
+ $< > $@
+
+@PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+
+if !FISH_INPROCESS
+servicedir = $(datadir)/dbus-1/services
+service_in_files = org.mate.panel.applet.FishAppletFactory.service.in
+service_DATA = $(service_in_files:.service.in=.service)
+
+org.mate.panel.applet.FishAppletFactory.service: $(service_in_files)
+ $(AM_V_GEN)sed \
+ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+ $< > $@
+endif
+
+fishbitmapsdir = $(datadir)/mate-panel/pixmaps
+fishbitmaps_DATA = \
+ wanda.png \
+ fishanim.png \
+ oldwanda.png \
+ footguy.png \
+ monkey.png \
+ nyan.png
+
+uidir = $(datadir)/mate-panel/ui
+ui_DATA = fish.ui
+
+xmluidir = $(datadir)/mate-panel/ui
+xmlui_DATA = fish-menu.xml
+
+schemasdir = $(MATECONF_SCHEMA_FILE_DIR)
+schemas_in_files = fish.schemas.in
+schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
+
+@INTLTOOL_SCHEMAS_RULE@
+
+if MATECONF_SCHEMAS_INSTALL
+install-data-local:
+ if test -z "$(DESTDIR)" ; then \
+ for p in $(schemas_DATA) ; do \
+ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(top_builddir)/applets/fish/$$p ; \
+ done \
+ fi
+uninstall-local:
+ for p in $(schema_DATA) ; do \
+ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-uninstall-rule $(top_builddir)/applets/fish/$$p ; \
+ done
+endif
+
+EXTRA_DIST = \
+ wanda.svg \
+ $(fishbitmaps_DATA) \
+ org.mate.panel.FishApplet.mate-panel-applet.in.in \
+ $(service_in_files) \
+ fish.schemas.in \
+ $(ui_DATA) \
+ $(xmlui_DATA)
+
+CLEANFILES = $(schemas_DATA) $(applet_DATA) $(applet_DATA).in $(service_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/applets/fish/fish-menu.xml b/applets/fish/fish-menu.xml
new file mode 100644
index 00000000..914f92eb
--- /dev/null
+++ b/applets/fish/fish-menu.xml
@@ -0,0 +1,4 @@
+<menuitem name="Fish Preferences Item" action="FishPreferences"/>
+<menuitem name="Fish Help Item" action="FishHelp"/>
+<menuitem name="Fish About Item" action="FishAbout"/>
+
diff --git a/applets/fish/fish.c b/applets/fish/fish.c
new file mode 100644
index 00000000..5ce55f61
--- /dev/null
+++ b/applets/fish/fish.c
@@ -0,0 +1,2012 @@
+/* fish.c:
+ *
+ * Copyright (C) 1998-2002 Free Software Foundation, Inc.
+ * Copyright (C) 2002-2005 Vincent Untz
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors:
+ * George Lebl <[email protected]>
+ * Mark McLoughlin <[email protected]>
+ * Vincent Untz <[email protected]>
+ */
+
+#include <config.h>
+
+#include <math.h>
+#include <string.h>
+#include <time.h>
+
+#include <cairo.h>
+
+#include <glib/gi18n.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+#include <mate-panel-applet.h>
+#include <mate-panel-applet-mateconf.h>
+#include <mateconf/mateconf-client.h>
+
+#define FISH_APPLET(o) \
+ (G_TYPE_CHECK_INSTANCE_CAST((o), fish_applet_get_type(), FishApplet))
+#define FISH_IS_APPLET(o) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((o), FISH_TYPE_APPLET))
+
+#define FISH_ICON "mate-panel-fish"
+
+#define N_FISH_PREFS 6
+
+#define LOCKDOWN_COMMANDLINE_KEY "/desktop/mate/lockdown/disable_command_line"
+#define N_FISH_LOCKDOWN 1
+
+#define N_FISH_LISTENERS (N_FISH_PREFS + N_FISH_LOCKDOWN)
+
+typedef struct {
+ MatePanelApplet applet;
+
+ MateConfClient *client;
+
+ char *name;
+ char *image;
+ char *command;
+ int n_frames;
+ gdouble speed;
+ gboolean rotate;
+
+ MatePanelAppletOrient orientation;
+
+ GtkWidget *frame;
+ GtkWidget *drawing_area;
+ GtkRequisition requisition;
+ GdkRectangle prev_allocation;
+ GdkPixmap *pixmap;
+ guint timeout;
+ int current_frame;
+ gboolean in_applet;
+
+ GdkPixbuf *pixbuf;
+
+ GtkWidget *preferences_dialog;
+ GtkWidget *name_entry;
+ GtkWidget *command_label;
+ GtkWidget *command_entry;
+ GtkWidget *preview_image;
+ GtkWidget *image_chooser;
+ GtkWidget *frames_spin;
+ GtkWidget *speed_spin;
+ GtkWidget *rotate_toggle;
+
+ GtkWidget *fortune_dialog;
+ GtkWidget *fortune_view;
+ GtkWidget *fortune_label;
+ GtkWidget *fortune_cmd_label;
+ GtkTextBuffer *fortune_buffer;
+
+ unsigned int source_id;
+ GIOChannel *io_channel;
+
+ gboolean april_fools;
+
+ guint listeners [N_FISH_LISTENERS];
+} FishApplet;
+
+typedef struct {
+ MatePanelAppletClass klass;
+} FishAppletClass;
+
+
+static gboolean load_fish_image (FishApplet *fish);
+static void update_pixmap (FishApplet *fish);
+static void something_fishy_going_on (FishApplet *fish, const char *message);
+static void display_fortune_dialog (FishApplet *fish);
+static void set_tooltip (FishApplet *fish);
+
+static GType fish_applet_get_type (void);
+
+static GObjectClass *parent_class;
+
+static int fools_day = 0;
+static int fools_month = 0;
+static int fools_hour_start = 0;
+static int fools_hour_end = 0;
+
+static char* get_image_path(FishApplet* fish)
+{
+ char *path;
+
+ if (g_path_is_absolute (fish->image))
+ path = g_strdup (fish->image);
+ else
+ path = g_strdup_printf ("%s/%s", FISH_ICONDIR, fish->image);
+
+ return path;
+}
+
+static void show_help(FishApplet* fish, const char* link_id)
+{
+ GError *error = NULL;
+ char *uri;
+#define FISH_HELP_DOC "fish"
+
+ if (link_id)
+ uri = g_strdup_printf ("ghelp:%s?%s", FISH_HELP_DOC, link_id);
+ else
+ uri = g_strdup_printf ("ghelp:%s", FISH_HELP_DOC);
+
+ gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (fish)), uri,
+ gtk_get_current_event_time (), &error);
+
+ g_free (uri);
+
+ if (error &&
+ g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_error_free (error);
+ else if (error) {
+ GtkWidget *dialog;
+ char *primary;
+
+ primary = g_markup_printf_escaped (
+ _("Could not display help document '%s'"),
+ FISH_HELP_DOC);
+ dialog = gtk_message_dialog_new (
+ NULL,
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "%s", primary);
+
+ gtk_message_dialog_format_secondary_text (
+ GTK_MESSAGE_DIALOG (dialog),
+ "%s", error->message);
+
+ g_error_free (error);
+ g_free (primary);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy),
+ NULL);
+
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), FISH_ICON);
+ gtk_window_set_screen (GTK_WINDOW (dialog),
+ gtk_widget_get_screen (GTK_WIDGET (fish)));
+ /* we have no parent window */
+ gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dialog), FALSE);
+ gtk_window_set_title (GTK_WINDOW (dialog),
+ _("Error displaying help document"));
+
+ gtk_widget_show (dialog);
+ }
+}
+
+static void name_value_changed(GtkEntry* entry, FishApplet* fish)
+{
+ const char *text;
+
+ text = gtk_entry_get_text (entry);
+
+ if (!text || !text [0])
+ return;
+
+ mate_panel_applet_mateconf_set_string (
+ MATE_PANEL_APPLET (fish), "name", text, NULL);
+}
+
+static void image_value_changed(GtkFileChooser* chooser, FishApplet* fish)
+{ char *path;
+ char *image;
+ char *path_mateconf;
+
+ path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
+
+ if (!path || !path[0]) {
+ g_free (path);
+ return;
+ }
+
+ path_mateconf = get_image_path (fish);
+ if (!strcmp (path, path_mateconf)) {
+ g_free (path);
+ g_free (path_mateconf);
+ return;
+ }
+ g_free (path_mateconf);
+
+ if (!strncmp (path, FISH_ICONDIR, strlen (FISH_ICONDIR))) {
+ image = path + strlen (FISH_ICONDIR);
+ while (*image && *image == G_DIR_SEPARATOR)
+ image++;
+ } else
+ image = path;
+
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (fish), "image",
+ image, NULL);
+
+ g_free (path);
+}
+
+static void command_value_changed(GtkEntry* entry, FishApplet *fish)
+{
+ const char *text;
+
+ text = gtk_entry_get_text (entry);
+
+ if (!text || !text [0]) {
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (fish),
+ "command", "", NULL);
+ return;
+ }
+
+ if (!strncmp (text, "ps ", 3) ||
+ !strcmp (text, "ps") ||
+ !strncmp (text, "who ", 4) ||
+ !strcmp (text, "who") ||
+ !strcmp (text, "uptime") ||
+ !strncmp (text, "tail ", 5)) {
+ static gboolean message_given = FALSE;
+ char *message;
+ const char *warning_format =
+ _("Warning: The command "
+ "appears to be something actually useful.\n"
+ "Since this is a useless applet, you "
+ "may not want to do this.\n"
+ "We strongly advise you against "
+ "using %s for anything\n"
+ "which would make the applet "
+ "\"practical\" or useful.");
+
+ if ( ! message_given) {
+ message = g_strdup_printf (warning_format, fish->name);
+
+ something_fishy_going_on (fish, message);
+
+ g_free (message);
+
+ message_given = TRUE;
+ }
+ }
+
+ mate_panel_applet_mateconf_set_string (
+ MATE_PANEL_APPLET (fish), "command", text, NULL);
+}
+
+static void n_frames_value_changed(GtkSpinButton* button, FishApplet* fish)
+{
+ mate_panel_applet_mateconf_set_int (
+ MATE_PANEL_APPLET (fish), "frames",
+ gtk_spin_button_get_value_as_int (button), NULL);
+}
+
+static void speed_value_changed (GtkSpinButton* button, FishApplet* fish)
+{
+ mate_panel_applet_mateconf_set_float (
+ MATE_PANEL_APPLET (fish), "speed",
+ gtk_spin_button_get_value (button), NULL);
+}
+
+static void rotate_value_changed(GtkToggleButton* toggle, FishApplet* fish)
+{
+ mate_panel_applet_mateconf_set_bool (
+ MATE_PANEL_APPLET (fish), "rotate",
+ gtk_toggle_button_get_active (toggle), NULL);
+}
+
+static gboolean delete_event(GtkWidget* widget, FishApplet* fish)
+{
+ gtk_widget_hide (widget);
+
+ return TRUE;
+}
+
+static void handle_response(GtkWidget* widget, int id, FishApplet* fish)
+{
+ if (id == GTK_RESPONSE_HELP) {
+ show_help (fish, "fish-settings");
+ return;
+ }
+
+ gtk_widget_hide (fish->preferences_dialog);
+}
+
+static void setup_sensitivity(FishApplet* fish, GtkBuilder* builder, const char* wid, const char* label, const char* label_post, const char* key)
+{
+ MatePanelApplet *applet = (MatePanelApplet *) fish;
+ char *fullkey;
+ GtkWidget *w;
+
+ fullkey = mate_panel_applet_mateconf_get_full_key (applet, key);
+
+ if (mateconf_client_key_is_writable (fish->client, fullkey, NULL)) {
+ g_free (fullkey);
+ return;
+ }
+ g_free (fullkey);
+
+ w = GTK_WIDGET (gtk_builder_get_object (builder, wid));
+ g_assert (w != NULL);
+ gtk_widget_set_sensitive (w, FALSE);
+
+ if (label != NULL) {
+ w = GTK_WIDGET (gtk_builder_get_object (builder, label));
+ g_assert (w != NULL);
+ gtk_widget_set_sensitive (w, FALSE);
+ }
+ if (label_post != NULL) {
+ w = GTK_WIDGET (gtk_builder_get_object (builder, label_post));
+ g_assert (w != NULL);
+ gtk_widget_set_sensitive (w, FALSE);
+ }
+
+}
+
+static void chooser_preview_update(GtkFileChooser* file_chooser, gpointer data)
+{
+ GtkWidget *preview;
+ char *filename;
+ GdkPixbuf *pixbuf;
+ gboolean have_preview;
+
+ preview = GTK_WIDGET (data);
+ filename = gtk_file_chooser_get_preview_filename (file_chooser);
+
+ if (filename == NULL)
+ return;
+
+ pixbuf = gdk_pixbuf_new_from_file_at_size (filename, 128, 128, NULL);
+ have_preview = (pixbuf != NULL);
+ g_free (filename);
+
+ gtk_image_set_from_pixbuf (GTK_IMAGE (preview), pixbuf);
+ if (pixbuf)
+ g_object_unref (pixbuf);
+
+ gtk_file_chooser_set_preview_widget_active (file_chooser,
+ have_preview);
+}
+
+static void display_preferences_dialog(GtkAction* action, FishApplet* fish)
+{
+ GtkBuilder *builder;
+ GError *error;
+ GtkWidget *button;
+ GtkFileFilter *filter;
+ GtkWidget *chooser_preview;
+ char *path;
+
+ if (fish->preferences_dialog) {
+ gtk_window_set_screen (GTK_WINDOW (fish->preferences_dialog),
+ gtk_widget_get_screen (GTK_WIDGET (fish)));
+ gtk_window_present (GTK_WINDOW (fish->preferences_dialog));
+ return;
+ }
+
+ builder = gtk_builder_new ();
+ gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE);
+
+ error = NULL;
+ gtk_builder_add_from_file (builder, FISH_BUILDERDIR "/fish.ui", &error);
+ if (error) {
+ g_warning ("Error loading preferences: %s", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ fish->preferences_dialog = GTK_WIDGET (gtk_builder_get_object (builder, "fish_preferences_dialog"));
+
+ g_object_add_weak_pointer (G_OBJECT (fish->preferences_dialog),
+ (void**) &fish->preferences_dialog);
+
+ gtk_window_set_wmclass (GTK_WINDOW (fish->preferences_dialog),
+ "fish", "Fish");
+ gtk_window_set_icon_name (GTK_WINDOW (fish->preferences_dialog),
+ FISH_ICON);
+ gtk_dialog_set_default_response (
+ GTK_DIALOG (fish->preferences_dialog), GTK_RESPONSE_OK);
+
+ fish->name_entry = GTK_WIDGET (gtk_builder_get_object (builder, "name_entry"));
+ gtk_entry_set_text (GTK_ENTRY (fish->name_entry), fish->name);
+
+ g_signal_connect (fish->name_entry, "changed",
+ G_CALLBACK (name_value_changed), fish);
+
+ setup_sensitivity (fish, builder,
+ "name_entry" /* wid */,
+ "name_label" /* label */,
+ NULL /* label_post */,
+ "name" /* key */);
+
+ fish->preview_image = GTK_WIDGET (gtk_builder_get_object (builder, "preview_image"));
+ if (fish->pixbuf)
+ gtk_image_set_from_pixbuf (GTK_IMAGE (fish->preview_image),
+ fish->pixbuf);
+
+ fish->image_chooser = GTK_WIDGET (gtk_builder_get_object (builder, "image_chooser"));
+ filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, _("Images"));
+ gtk_file_filter_add_pixbuf_formats (filter);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (fish->image_chooser),
+ filter);
+ gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (fish->image_chooser),
+ filter);
+ chooser_preview = gtk_image_new ();
+ gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (fish->image_chooser),
+ chooser_preview);
+ g_signal_connect (fish->image_chooser, "update-preview",
+ G_CALLBACK (chooser_preview_update), chooser_preview);
+ path = get_image_path (fish);
+ gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (fish->image_chooser),
+ path);
+ g_free (path);
+
+ g_signal_connect (fish->image_chooser, "selection-changed",
+ G_CALLBACK (image_value_changed), fish);
+
+ setup_sensitivity (fish, builder,
+ "image_chooser" /* wid */,
+ "image_label" /* label */,
+ NULL /* label_post */,
+ "image" /* key */);
+
+ fish->command_label = GTK_WIDGET (gtk_builder_get_object (builder, "command_label"));
+ fish->command_entry = GTK_WIDGET (gtk_builder_get_object (builder, "command_entry"));
+ gtk_entry_set_text (GTK_ENTRY (fish->command_entry), fish->command);
+
+ g_signal_connect (fish->command_entry, "changed",
+ G_CALLBACK (command_value_changed), fish);
+
+ setup_sensitivity (fish, builder,
+ "command_entry" /* wid */,
+ "command_label" /* label */,
+ NULL /* label_post */,
+ "command" /* key */);
+
+ if (mateconf_client_get_bool (fish->client,
+ LOCKDOWN_COMMANDLINE_KEY,
+ NULL)) {
+ gtk_widget_set_sensitive (fish->command_label, FALSE);
+ gtk_widget_set_sensitive (fish->command_entry, FALSE);
+ }
+
+ fish->frames_spin = GTK_WIDGET (gtk_builder_get_object (builder, "frames_spin"));
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (fish->frames_spin),
+ fish->n_frames);
+
+ g_signal_connect (fish->frames_spin, "value_changed",
+ G_CALLBACK (n_frames_value_changed), fish);
+
+ setup_sensitivity (fish, builder,
+ "frames_spin" /* wid */,
+ "frames_label" /* label */,
+ "frames_post_label" /* label_post */,
+ "frames" /* key */);
+
+ fish->speed_spin = GTK_WIDGET (gtk_builder_get_object (builder, "speed_spin"));
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (fish->speed_spin), fish->speed);
+
+ g_signal_connect (fish->speed_spin, "value_changed",
+ G_CALLBACK (speed_value_changed), fish);
+
+ setup_sensitivity (fish, builder,
+ "speed_spin" /* wid */,
+ "speed_label" /* label */,
+ "speed_post_label" /* label_post */,
+ "speed" /* key */);
+
+ fish->rotate_toggle = GTK_WIDGET (gtk_builder_get_object (builder, "rotate_toggle"));
+ gtk_toggle_button_set_active (
+ GTK_TOGGLE_BUTTON (fish->rotate_toggle), fish->rotate);
+
+ g_signal_connect (fish->rotate_toggle, "toggled",
+ G_CALLBACK (rotate_value_changed), fish);
+
+ setup_sensitivity (fish, builder,
+ "rotate_toggle" /* wid */,
+ NULL /* label */,
+ NULL /* label_post */,
+ "rotate" /* key */);
+
+ g_signal_connect (fish->preferences_dialog, "delete_event",
+ G_CALLBACK (delete_event), fish);
+ g_signal_connect (fish->preferences_dialog, "response",
+ G_CALLBACK (handle_response), fish);
+
+ button = GTK_WIDGET (gtk_builder_get_object (builder, "done_button"));
+ g_signal_connect_swapped (button, "clicked",
+ (GCallback) gtk_widget_hide,
+ fish->preferences_dialog);
+
+ gtk_window_set_screen (GTK_WINDOW (fish->preferences_dialog),
+ gtk_widget_get_screen (GTK_WIDGET (fish)));
+ gtk_window_set_resizable (GTK_WINDOW (fish->preferences_dialog), FALSE);
+ gtk_window_present (GTK_WINDOW (fish->preferences_dialog));
+
+ g_object_unref (builder);
+}
+
+static void display_help_dialog(GtkAction* action, FishApplet* fish)
+{
+ show_help(fish, NULL);
+}
+
+static void display_about_dialog(GtkAction* action, FishApplet* fish)
+{
+ const char* author_format = _("%s the Fish");
+ const char* about_format = _("%s has no use what-so-ever. "
+ "It only takes up disk space and "
+ "compilation time, and if loaded it also "
+ "takes up precious panel space and "
+ "memory. Anybody found using it should be "
+ "promptly sent for a psychiatric "
+ "evaluation.");
+ const char* documenters [] = {
+ "Telsa Gwynne <[email protected]>",
+ "Sun MATE Documentation Team <[email protected]>",
+ NULL
+ };
+
+ char* authors[3];
+ char* descr;
+ char copyright[] = \
+ "Copyright \xc2\xa9 1998-2002 Free Software Foundation, Inc.";
+
+ authors[0] = g_strdup_printf(author_format, fish->name);
+ authors[1] = _("(with minor help from George)");
+ authors[2] = NULL;
+
+ descr = g_strdup_printf(about_format, fish->name);
+
+ gtk_show_about_dialog(NULL,
+ "program-name", _("Fish"),
+ "authors", authors,
+ "comments", descr,
+ "copyright", copyright,
+ "documenters", documenters,
+ "logo-icon-name", FISH_ICON,
+ "translator-credits", _("translator-credits"),
+ "version", VERSION, // "3.4.7.4ac19"
+ "website", "http://matsusoft.com.ar/projects/mate/",
+ NULL);
+
+ g_free(descr);
+ g_free(authors[0]);
+}
+
+static void set_ally_name_desc(GtkWidget* widget, FishApplet* fish)
+{
+ const char *name_format = _("%s the Fish");
+ const char *desc_format = _("%s the Fish, a contemporary oracle");
+ AtkObject *obj;
+ char *desc, *name;
+
+ obj = gtk_widget_get_accessible (widget);
+ /* Return immediately if GAIL is not loaded */
+ if (!GTK_IS_ACCESSIBLE (obj))
+ return;
+
+ name = g_strdup_printf (name_format, fish->name);
+ atk_object_set_name (obj, name);
+ g_free (name);
+
+ desc = g_strdup_printf (desc_format, fish->name);
+ atk_object_set_description (obj, desc);
+ g_free (desc);
+}
+
+static void something_fishy_going_on(FishApplet* fish, const char* message)
+{
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (NULL,
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "%s", message);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy),
+ NULL);
+
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), FISH_ICON);
+ gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+ gtk_window_set_screen (GTK_WINDOW (dialog),
+ gtk_widget_get_screen (GTK_WIDGET (fish)));
+ gtk_widget_show (dialog);
+}
+
+static gboolean locate_fortune_command (FishApplet* fish, int* argcp, char*** argvp)
+{
+ char *prog = NULL;
+
+ if (fish->command
+ && g_shell_parse_argv (fish->command, argcp, argvp, NULL)) {
+ prog = g_find_program_in_path ((*argvp)[0]);
+ if (prog) {
+ g_free (prog);
+ return TRUE;
+ }
+
+ g_strfreev (*argvp);
+ }
+
+ prog = g_find_program_in_path ("fortune");
+ if (prog) {
+ g_free (prog);
+ if (g_shell_parse_argv ("fortune", argcp, argvp, NULL))
+ return FALSE;
+ }
+
+ if (g_file_test ("/usr/games/fortune", G_FILE_TEST_IS_EXECUTABLE)
+ && g_shell_parse_argv ("/usr/games/fortune", argcp, argvp, NULL))
+ return FALSE;
+
+ something_fishy_going_on (fish,
+ _("Unable to locate the command to execute"));
+ *argvp = NULL;
+ return FALSE;
+}
+
+#define FISH_RESPONSE_SPEAK 1
+static inline void fish_close_channel(FishApplet* fish)
+{
+ if (fish->io_channel) {
+ g_io_channel_shutdown (fish->io_channel, TRUE, NULL);
+ g_io_channel_unref (fish->io_channel);
+ }
+ fish->io_channel = NULL;
+}
+
+static void handle_fortune_response(GtkWidget* widget, int id, FishApplet* fish)
+{
+ if (id == FISH_RESPONSE_SPEAK)
+ display_fortune_dialog (fish);
+ else {
+ /* if there is still a pipe, close it: if we hide the widget,
+ * the * output can't be seen */
+ if (fish->source_id)
+ g_source_remove (fish->source_id);
+ fish->source_id = 0;
+ fish_close_channel (fish);
+ gtk_widget_hide (fish->fortune_dialog);
+ }
+}
+
+static void update_fortune_dialog(FishApplet* fish)
+{
+ char *label_text;
+ char *text;
+
+ if (!fish->fortune_dialog || !fish->name)
+ return;
+
+ /* xgettext:no-c-format */
+ text = g_strdup_printf (_("%s the Fish"), fish->name);
+ gtk_window_set_title (GTK_WINDOW (fish->fortune_dialog), text);
+ g_free (text);
+
+ /* xgettext:no-c-format */
+ label_text = g_strdup_printf (_("%s the Fish Says:"), fish->name);
+
+ text = g_strdup_printf ("<big><big>%s</big></big>", label_text);
+ gtk_label_set_markup (GTK_LABEL (fish->fortune_label), text);
+ g_free (text);
+
+ g_free (label_text);
+
+ set_ally_name_desc (fish->fortune_view, fish);
+}
+
+static void insert_fortune_text(FishApplet* fish, const char* text)
+{
+ GtkTextIter iter;
+
+ gtk_text_buffer_get_iter_at_offset (fish->fortune_buffer, &iter, -1);
+
+ gtk_text_buffer_insert_with_tags_by_name (fish->fortune_buffer, &iter,
+ text, -1, "monospace_tag",
+ NULL);
+
+ while (gtk_events_pending ())
+ gtk_main_iteration ();
+}
+
+static void clear_fortune_text(FishApplet* fish)
+{
+ GtkTextIter begin, end;
+
+ gtk_text_buffer_get_iter_at_offset (fish->fortune_buffer, &begin, 0);
+ gtk_text_buffer_get_iter_at_offset (fish->fortune_buffer, &end, -1);
+
+ gtk_text_buffer_delete (fish->fortune_buffer, &begin, &end);
+ gtk_text_buffer_remove_tag_by_name (fish->fortune_buffer,
+ "monospace_tag", &begin, &end);
+
+ /* insert an empty line */
+ insert_fortune_text (fish, "\n");
+}
+
+static gboolean fish_read_output(GIOChannel* source, GIOCondition condition, gpointer data)
+{
+ char output[4096];
+ char *utf8_output;
+ gsize bytes_read;
+ GError *error = NULL;
+ GIOStatus status;
+ FishApplet *fish;
+
+ fish = (FishApplet *) data;
+
+ if (!(condition & G_IO_IN)) {
+ fish->source_id = 0;
+ fish_close_channel (fish);
+ return FALSE;
+ }
+
+ status = g_io_channel_read_chars (source, output, 4096, &bytes_read,
+ &error);
+
+ if (error) {
+ char *message;
+
+ message = g_strdup_printf (_("Unable to read output from command\n\nDetails: %s"),
+ error->message);
+ something_fishy_going_on (fish, message);
+ g_free (message);
+ g_error_free (error);
+ fish->source_id = 0;
+ fish_close_channel (fish);
+ return FALSE;
+ }
+
+ if (status == G_IO_STATUS_AGAIN)
+ return TRUE;
+
+ if (bytes_read > 0) {
+ /* The output is not guarantied to be in UTF-8 format, most
+ * likely it's just in ASCII-7 or in the user locale
+ */
+ if (!g_utf8_validate (output, -1, NULL))
+ utf8_output = g_locale_to_utf8 (output, bytes_read,
+ NULL, NULL, NULL);
+ else
+ utf8_output = g_strndup (output, bytes_read);
+
+ if (utf8_output)
+ insert_fortune_text (fish, utf8_output);
+
+ g_free (utf8_output);
+ }
+
+ if (status == G_IO_STATUS_EOF) {
+ fish->source_id = 0;
+ fish_close_channel (fish);
+ }
+ return (status != G_IO_STATUS_EOF);
+}
+
+static void display_fortune_dialog(FishApplet* fish)
+{
+ GError *error = NULL;
+ gboolean user_command;
+ int output;
+ const char *charset;
+ int argc;
+ char **argv;
+
+ /* if there is still a pipe, close it */
+ if (fish->source_id)
+ g_source_remove (fish->source_id);
+ fish->source_id = 0;
+ fish_close_channel (fish);
+
+ user_command = locate_fortune_command (fish, &argc, &argv);
+ if (!argv)
+ return;
+
+ if (!fish->fortune_dialog) {
+ GtkWidget *scrolled;
+ GtkWidget *vbox;
+ GdkScreen *screen;
+ int screen_width;
+ int screen_height;
+
+ fish->fortune_dialog =
+ gtk_dialog_new_with_buttons (
+ "", NULL, 0,
+ _("_Speak again"), FISH_RESPONSE_SPEAK,
+ GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
+ NULL);
+
+ gtk_window_set_icon_name (GTK_WINDOW (fish->fortune_dialog),
+ FISH_ICON);
+ gtk_dialog_set_has_separator (
+ GTK_DIALOG (fish->fortune_dialog), FALSE);
+
+ gtk_dialog_set_default_response (
+ GTK_DIALOG (fish->fortune_dialog), GTK_RESPONSE_CLOSE);
+
+ g_signal_connect (fish->fortune_dialog, "delete_event",
+ G_CALLBACK (delete_event), fish);
+ g_signal_connect (fish->fortune_dialog, "response",
+ G_CALLBACK (handle_fortune_response), fish);
+
+ gtk_window_set_wmclass (GTK_WINDOW (fish->fortune_dialog), "fish", "Fish");
+
+ screen = gtk_widget_get_screen (GTK_WIDGET (fish));
+
+ screen_width = gdk_screen_get_width (screen);
+ screen_height = gdk_screen_get_height (screen);
+
+ gtk_window_set_default_size (GTK_WINDOW (fish->fortune_dialog),
+ MIN (600, screen_width * 0.9),
+ MIN (350, screen_height * 0.9));
+
+ fish->fortune_view = gtk_text_view_new ();
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (fish->fortune_view), FALSE);
+ gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (fish->fortune_view), FALSE);
+ gtk_text_view_set_left_margin (GTK_TEXT_VIEW (fish->fortune_view), 10);
+ gtk_text_view_set_right_margin (GTK_TEXT_VIEW (fish->fortune_view), 10);
+ fish->fortune_buffer =
+ gtk_text_view_get_buffer (GTK_TEXT_VIEW (fish->fortune_view));
+
+ gtk_text_buffer_create_tag (GTK_TEXT_BUFFER (fish->fortune_buffer),
+ "monospace_tag", "family",
+ "Monospace", NULL);
+
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled),
+ GTK_SHADOW_IN);
+
+ gtk_container_add (GTK_CONTAINER (scrolled), fish->fortune_view);
+
+ fish->fortune_label = gtk_label_new ("");
+ gtk_label_set_ellipsize (GTK_LABEL (fish->fortune_label),
+ PANGO_ELLIPSIZE_MIDDLE);
+ fish->fortune_cmd_label = gtk_label_new ("");
+ gtk_misc_set_alignment (GTK_MISC (fish->fortune_cmd_label),
+ 0, 0.5);
+
+ vbox = gtk_dialog_get_content_area (GTK_DIALOG (fish->fortune_dialog));
+ gtk_box_pack_start (GTK_BOX (vbox),
+ fish->fortune_label,
+ FALSE, FALSE, 6);
+
+ gtk_box_pack_start (GTK_BOX (vbox),
+ scrolled,
+ TRUE, TRUE, 6);
+
+ gtk_box_pack_start (GTK_BOX (vbox),
+ fish->fortune_cmd_label,
+ FALSE, FALSE, 6);
+
+ update_fortune_dialog (fish);
+
+ /* We don't show_all for the dialog since fortune_cmd_label
+ * might need to be hidden
+ * The dialog will be shown with gtk_window_present later */
+ gtk_widget_show (scrolled);
+ gtk_widget_show (fish->fortune_view);
+ gtk_widget_show (fish->fortune_label);
+ }
+
+ if (!user_command) {
+ char *command;
+ char * text;
+
+ command = g_markup_printf_escaped ("<tt>%s</tt>", argv[0]);
+ text = g_strdup_printf (_("The configured command is not "
+ "working and has been replaced by: "
+ "%s"), command);
+ gtk_label_set_markup (GTK_LABEL (fish->fortune_cmd_label),
+ text);
+ g_free (command);
+ g_free (text);
+ gtk_widget_show (fish->fortune_cmd_label);
+ } else {
+ gtk_widget_hide (fish->fortune_cmd_label);
+ }
+
+ clear_fortune_text (fish);
+
+ gdk_spawn_on_screen_with_pipes (gtk_widget_get_screen (GTK_WIDGET (fish)),
+ NULL, argv, NULL,
+ G_SPAWN_SEARCH_PATH|G_SPAWN_STDERR_TO_DEV_NULL,
+ NULL, NULL, NULL, NULL, &output, NULL,
+ &error);
+
+ if (error) {
+ char *message;
+
+ message = g_strdup_printf (_("Unable to execute '%s'\n\nDetails: %s"),
+ argv[0], error->message);
+ something_fishy_going_on (fish, message);
+ g_free (message);
+ g_error_free (error);
+ g_strfreev (argv);
+ return;
+ }
+
+ fish->io_channel = g_io_channel_unix_new (output);
+ /* set the correct encoding if the locale is not using UTF-8 */
+ if (!g_get_charset (&charset))
+ g_io_channel_set_encoding(fish->io_channel, charset, &error);
+ if (error) {
+ char *message;
+
+ message = g_strdup_printf (_("Unable to read from '%s'\n\nDetails: %s"),
+ argv[0], error->message);
+ something_fishy_going_on (fish, message);
+ g_free (message);
+ g_error_free (error);
+ g_strfreev (argv);
+ return;
+ }
+
+ g_strfreev (argv);
+
+ fish->source_id = g_io_add_watch (fish->io_channel,
+ G_IO_IN|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
+ fish_read_output, fish);
+
+ gtk_window_set_screen (GTK_WINDOW (fish->fortune_dialog),
+ gtk_widget_get_screen (GTK_WIDGET (fish)));
+ gtk_window_present (GTK_WINDOW (fish->fortune_dialog));
+}
+
+static void name_changed_notify(MateConfClient* client, guint cnxn_id, MateConfEntry* entry, FishApplet* fish)
+{
+ const char *value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_STRING)
+ return;
+
+ value = mateconf_value_get_string (entry->value);
+
+ if (!value [0] || (fish->name && !strcmp (fish->name, value)))
+ return;
+
+ if (fish->name)
+ g_free (fish->name);
+ fish->name = g_strdup (value);
+
+ update_fortune_dialog (fish);
+ set_tooltip (fish);
+ set_ally_name_desc (GTK_WIDGET (fish), fish);
+
+ if (fish->name_entry &&
+ strcmp (gtk_entry_get_text (GTK_ENTRY (fish->name_entry)), fish->name))
+ gtk_entry_set_text (GTK_ENTRY (fish->name_entry), fish->name);
+}
+
+static void image_changed_notify(MateConfClient* client, guint cnxn_id, MateConfEntry* entry, FishApplet* fish)
+{
+ const char *value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_STRING)
+ return;
+
+ value = mateconf_value_get_string (entry->value);
+
+ if (!value [0] || (fish->image && !strcmp (fish->image, value)))
+ return;
+
+ if (fish->image)
+ g_free (fish->image);
+ fish->image = g_strdup (value);
+
+ load_fish_image (fish);
+ update_pixmap (fish);
+
+ if (fish->image_chooser) {
+ char *path_mateconf;
+ char *path_chooser;
+
+ path_mateconf = get_image_path (fish);
+ path_chooser = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fish->image_chooser));
+ if (strcmp (path_mateconf, path_chooser))
+ gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (fish->image_chooser),
+ path_mateconf);
+
+ g_free (path_mateconf);
+ g_free (path_chooser);
+ }
+}
+
+static void command_changed_notify(MateConfClient* client, guint cnxn_id, MateConfEntry* entry, FishApplet* fish)
+{
+ const char *value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_STRING)
+ return;
+
+ value = mateconf_value_get_string (entry->value);
+
+ if (fish->command && !strcmp (fish->command, value))
+ return;
+
+ if (fish->command)
+ g_free (fish->command);
+ fish->command = g_strdup (value);
+
+ if (fish->command_entry &&
+ strcmp (gtk_entry_get_text (GTK_ENTRY (fish->command_entry)), fish->command))
+ gtk_entry_set_text (GTK_ENTRY (fish->command_entry), fish->command);
+}
+
+static void n_frames_changed_notify(MateConfClient* client, guint cnxn_id, MateConfEntry* entry, FishApplet* fish)
+{
+ int value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_INT)
+ return;
+
+ value = mateconf_value_get_int (entry->value);
+
+ if (fish->n_frames == value)
+ return;
+
+ fish->n_frames = value;
+
+ if (fish->n_frames <= 0)
+ fish->n_frames = 1;
+
+ update_pixmap (fish);
+
+ if (fish->frames_spin &&
+ gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (fish->frames_spin)) != fish->n_frames)
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (fish->frames_spin), fish->n_frames);
+}
+
+static char* get_location(void)
+{
+ static char location [256];
+ char *buffer;
+ FILE *zone;
+ int i, len, count;
+
+ /* Old method : works for glibc < 2.2 */
+ zone = fopen("/etc/timezone", "r");
+ if (zone) {
+ count = fscanf (zone, "%255s", location);
+ fclose (zone);
+ /* if we could read it, we return what we got */
+ if (count == 1)
+ return location;
+ }
+
+ /* New method : works for glibc 2.2 */
+ /* FIXME: this is broken for many distros, see the clock code */
+ buffer = g_file_read_link ("/etc/localtime", NULL);
+ if (!buffer)
+ return NULL;
+
+ len = strlen (buffer);
+ for (i = len, count = 0; (i > 0) && (count != 2); i--)
+ if (buffer [i] == '/')
+ count++;
+
+ if (count != 2) {
+ return NULL;
+ g_free (buffer);
+ }
+
+ memcpy (location, &buffer [i + 2], len - i - 2);
+ g_free (buffer);
+
+ return location;
+}
+
+static void init_fools_day(void)
+{
+ const char *spanish_timezones [] = {
+ "Europe/Madrid",
+ "Africa/Ceuta",
+ "Atlantic/Canary",
+ "America/Mexico_City",
+ "Mexico/BajaSur",
+ "Mexico/BajaNorte",
+ "Mexico/General",
+ NULL
+ };
+ char *location;
+ int i;
+
+ if (!(location = get_location ()))
+ return;
+
+ fools_day = 1; /* 1st */
+ fools_month = 3; /* April */
+ fools_hour_start = 0; /* Midnight */
+ fools_hour_end = 12; /* Apparently jokes should stop at midday */
+
+ for (i = 0; spanish_timezones [i]; i++)
+ if (!g_ascii_strcasecmp (spanish_timezones [i], location)) {
+ /* Hah!, We are in Spain or Mexico
+ * Spanish fool's day is 28th December
+ */
+ fools_day = 28;
+ fools_month = 11;
+ return;
+ }
+}
+
+static void check_april_fools(FishApplet* fish)
+{
+ struct tm *tm;
+ time_t now;
+
+ time (&now);
+ tm = localtime (&now);
+
+ if (fish->april_fools &&
+ (tm->tm_mon != fools_month ||
+ tm->tm_mday != fools_day ||
+ tm->tm_hour >= fools_hour_end)) {
+ fish->april_fools = FALSE;
+ update_pixmap (fish);
+ } else if (tm->tm_mon == fools_month &&
+ tm->tm_mday == fools_day &&
+ tm->tm_hour >= fools_hour_start &&
+ tm->tm_hour <= fools_hour_end) {
+ fish->april_fools = TRUE;
+ update_pixmap (fish);
+ }
+}
+
+static gboolean timeout_handler(gpointer data)
+{
+ FishApplet *fish = (FishApplet *) data;
+
+ check_april_fools (fish);
+
+ if (fish->april_fools)
+ return TRUE;
+
+ fish->current_frame++;
+ if (fish->current_frame >= fish->n_frames)
+ fish->current_frame = 0;
+
+ gtk_widget_queue_draw (fish->drawing_area);
+
+ return TRUE;
+}
+
+static void setup_timeout(FishApplet *fish)
+{
+ if (fish->timeout)
+ g_source_remove (fish->timeout);
+
+ fish->timeout = g_timeout_add (fish->speed * 1000,
+ timeout_handler,
+ fish);
+}
+
+static void speed_changed_notify(MateConfClient* client, guint cnxn_id, MateConfEntry* entry, FishApplet* fish)
+{
+ gdouble value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_FLOAT)
+ return;
+
+ value = mateconf_value_get_float (entry->value);
+
+ if (fish->speed == value)
+ return;
+ fish->speed = value;
+
+ setup_timeout (fish);
+
+ if (fish->speed_spin &&
+ gtk_spin_button_get_value (GTK_SPIN_BUTTON (fish->frames_spin)) != fish->speed)
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (fish->speed_spin), fish->speed);
+}
+
+static void rotate_changed_notify(MateConfClient* client, guint cnxn_id, MateConfEntry* entry, FishApplet* fish)
+{
+ gboolean value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ value = mateconf_value_get_bool (entry->value);
+
+ if (fish->rotate == value)
+ return;
+ fish->rotate = value;
+
+ if (fish->orientation == MATE_PANEL_APPLET_ORIENT_LEFT ||
+ fish->orientation == MATE_PANEL_APPLET_ORIENT_RIGHT)
+ update_pixmap (fish);
+
+ if (fish->rotate_toggle &&
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fish->rotate_toggle)) != fish->rotate)
+ gtk_toggle_button_set_active (
+ GTK_TOGGLE_BUTTON (fish->rotate_toggle), fish->rotate);
+}
+
+static void fish_disable_commande_line_notify(MateConfClient* client, guint cnxn_id, MateConfEntry* entry, FishApplet* fish)
+{
+ gboolean locked_down;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ locked_down = !mateconf_value_get_bool (entry->value);
+
+ if (fish->command_label != NULL)
+ gtk_widget_set_sensitive (fish->command_label, locked_down);
+ if (fish->command_entry != NULL)
+ gtk_widget_set_sensitive (fish->command_entry, locked_down);
+}
+
+static void setup_mateconf(FishApplet* fish)
+{
+ MatePanelApplet *applet = (MatePanelApplet *) fish;
+ char *key;
+ int i = 0;
+
+ key = mate_panel_applet_mateconf_get_full_key (applet, "name");
+ fish->listeners [i++] = mateconf_client_notify_add (
+ fish->client, key,
+ (MateConfClientNotifyFunc) name_changed_notify,
+ fish, NULL, NULL);
+ g_free (key);
+
+ key = mate_panel_applet_mateconf_get_full_key (applet, "image");
+ fish->listeners [i++] = mateconf_client_notify_add (
+ fish->client, key,
+ (MateConfClientNotifyFunc) image_changed_notify,
+ fish, NULL, NULL);
+ g_free (key);
+
+ key = mate_panel_applet_mateconf_get_full_key (applet, "command");
+ fish->listeners [i++] = mateconf_client_notify_add (
+ fish->client, key,
+ (MateConfClientNotifyFunc) command_changed_notify,
+ fish, NULL, NULL);
+ g_free (key);
+
+ key = mate_panel_applet_mateconf_get_full_key (applet, "frames");
+ fish->listeners [i++] = mateconf_client_notify_add (
+ fish->client, key,
+ (MateConfClientNotifyFunc) n_frames_changed_notify,
+ fish, NULL, NULL);
+ g_free (key);
+
+ key = mate_panel_applet_mateconf_get_full_key (applet, "speed");
+ fish->listeners [i++] = mateconf_client_notify_add (
+ fish->client, key,
+ (MateConfClientNotifyFunc) speed_changed_notify,
+ fish, NULL, NULL);
+ g_free (key);
+
+ key = mate_panel_applet_mateconf_get_full_key (applet, "rotate");
+ fish->listeners [i++] = mateconf_client_notify_add (
+ fish->client, key,
+ (MateConfClientNotifyFunc) rotate_changed_notify,
+ fish, NULL, NULL);
+ g_free (key);
+
+ fish->listeners [i++] = mateconf_client_notify_add (
+ fish->client,
+ LOCKDOWN_COMMANDLINE_KEY,
+ (MateConfClientNotifyFunc) fish_disable_commande_line_notify,
+ fish, NULL, NULL);
+
+ g_assert (i == N_FISH_LISTENERS);
+}
+
+static gboolean load_fish_image(FishApplet* fish)
+{
+ GdkPixbuf *pixbuf;
+ GError *error = NULL;
+ char *path = NULL;
+
+ if (!fish->image)
+ return FALSE;
+
+ path = get_image_path (fish);
+
+ pixbuf = gdk_pixbuf_new_from_file (path, &error);
+ if (error) {
+ g_warning ("Cannot load '%s': %s", path, error->message);
+ g_error_free (error);
+ g_free (path);
+ return FALSE;
+ }
+
+ if (fish->pixbuf)
+ g_object_unref (fish->pixbuf);
+ fish->pixbuf = pixbuf;
+
+ if (fish->preview_image)
+ gtk_image_set_from_pixbuf (GTK_IMAGE (fish->preview_image),
+ fish->pixbuf);
+
+ g_free (path);
+
+ return TRUE;
+}
+
+static void update_pixmap(FishApplet* fish)
+{
+ GtkWidget *widget = fish->drawing_area;
+ GtkAllocation allocation;
+ int width = -1;
+ int height = -1;
+ int pixbuf_width = -1;
+ int pixbuf_height = -1;
+ gboolean rotate = FALSE;
+ cairo_t *cr;
+ cairo_matrix_t matrix;
+ cairo_pattern_t *pattern;
+
+ gtk_widget_get_allocation (widget, &allocation);
+
+ if (!gtk_widget_get_realized (widget) ||
+ allocation.width <= 0 ||
+ allocation.height <= 0)
+ return;
+
+ if (!fish->pixbuf && !load_fish_image (fish))
+ return;
+
+ if (fish->rotate &&
+ (fish->orientation == MATE_PANEL_APPLET_ORIENT_LEFT ||
+ fish->orientation == MATE_PANEL_APPLET_ORIENT_RIGHT))
+ rotate = TRUE;
+
+ pixbuf_width = gdk_pixbuf_get_width (fish->pixbuf);
+ pixbuf_height = gdk_pixbuf_get_height (fish->pixbuf);
+
+ if (fish->orientation == MATE_PANEL_APPLET_ORIENT_UP ||
+ fish->orientation == MATE_PANEL_APPLET_ORIENT_DOWN) {
+ height = allocation.height;
+ width = pixbuf_width * ((gdouble) height / pixbuf_height);
+ fish->requisition.width = width / fish->n_frames;
+ fish->requisition.height = height;
+ } else {
+ if (!rotate) {
+ width = allocation.width * fish->n_frames;
+ height = pixbuf_height * ((gdouble) width / pixbuf_width);
+ fish->requisition.width = width;
+ fish->requisition.height = height;
+ } else {
+ width = allocation.width;
+ height = pixbuf_width * ((gdouble) width / pixbuf_height);
+ fish->requisition.width = width;
+ fish->requisition.height = height / fish->n_frames;
+ }
+ }
+
+ g_assert (width != -1 && height != -1);
+
+ if (width == 0 || height == 0)
+ return;
+
+ if (fish->pixmap)
+ g_object_unref (fish->pixmap);
+ fish->pixmap = gdk_pixmap_new (gtk_widget_get_window (widget),
+ width, height, -1);
+
+ gtk_widget_queue_resize (widget);
+
+ g_assert (pixbuf_width != -1 && pixbuf_height != -1);
+
+ cr = gdk_cairo_create (fish->pixmap);
+
+ cairo_set_source_rgb (cr, 1, 1, 1);
+ cairo_paint (cr);
+
+ gdk_cairo_set_source_pixbuf (cr, fish->pixbuf, 0, 0);
+ pattern = cairo_get_source (cr);
+ cairo_pattern_set_filter (pattern, CAIRO_FILTER_BEST);
+
+ cairo_matrix_init_identity (&matrix);
+
+ if (fish->april_fools) {
+ cairo_matrix_translate (&matrix,
+ pixbuf_width - 1, pixbuf_height - 1);
+ cairo_matrix_rotate (&matrix, M_PI);
+ }
+
+ if (rotate) {
+ if (fish->orientation == MATE_PANEL_APPLET_ORIENT_RIGHT) {
+ cairo_matrix_translate (&matrix, pixbuf_width - 1, 0);
+ cairo_matrix_rotate (&matrix, M_PI * 0.5);
+ } else {
+ cairo_matrix_translate (&matrix, 0, pixbuf_height - 1);
+ cairo_matrix_rotate (&matrix, M_PI * 1.5);
+ }
+ cairo_matrix_scale (&matrix,
+ (double) (pixbuf_height - 1) / width,
+ (double) (pixbuf_width - 1) / height);
+ } else {
+ cairo_matrix_scale (&matrix,
+ (double) (pixbuf_width - 1) / width,
+ (double) (pixbuf_height - 1) / height);
+ }
+
+ cairo_pattern_set_matrix (pattern, &matrix);
+
+ cairo_rectangle (cr, 0, 0, width, height);
+ cairo_fill (cr);
+
+ if (fish->april_fools) {
+ cairo_set_source_rgb (cr, 1, 0.5, 0);
+ cairo_paint_with_alpha (cr, 0.25);
+ }
+
+ cairo_destroy (cr);
+}
+
+static gboolean fish_applet_expose_event(GtkWidget* widget, GdkEventExpose* event, FishApplet* fish)
+{
+ GdkWindow *window;
+ GtkStyle *style;
+ GtkStateType state;
+ int width, height;
+ int src_x, src_y;
+
+ g_return_val_if_fail (fish->pixmap != NULL, FALSE);
+
+ g_assert (fish->n_frames > 0);
+
+ window = gtk_widget_get_window (widget);
+ style = gtk_widget_get_style (widget);
+ state = gtk_widget_get_state (widget);
+
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ width = gdk_window_get_width(fish->pixmap);
+ height = gdk_window_get_height(fish->pixmap);
+ #else
+ gdk_drawable_get_size(fish->pixmap, &width, &height);
+ #endif
+
+
+ src_x = event->area.x;
+ src_y = event->area.y;
+
+ if (fish->rotate) {
+ if (fish->orientation == MATE_PANEL_APPLET_ORIENT_RIGHT)
+ src_y += ((height * (fish->n_frames - 1 - fish->current_frame)) / fish->n_frames);
+ else if (fish->orientation == MATE_PANEL_APPLET_ORIENT_LEFT)
+ src_y += ((height * fish->current_frame) / fish->n_frames);
+ else
+ src_x += ((width * fish->current_frame) / fish->n_frames);
+ } else
+ src_x += ((width * fish->current_frame) / fish->n_frames);
+
+ gdk_draw_drawable (window,
+ style->fg_gc [state],
+ fish->pixmap,
+ src_x, src_y,
+ event->area.x, event->area.y,
+ event->area.width, event->area.height);
+
+ return FALSE;
+}
+
+static void fish_applet_size_request(GtkWidget* widget, GtkRequisition* requisition, FishApplet* fish)
+{
+ *requisition = fish->requisition;
+}
+
+static void fish_applet_size_allocate(GtkWidget* widget, GtkAllocation* allocation, FishApplet* fish)
+{
+ GtkAllocation widget_allocation;
+
+ gtk_widget_get_allocation (widget, &widget_allocation);
+
+ if (widget_allocation.width != fish->prev_allocation.width ||
+ widget_allocation.height != fish->prev_allocation.height)
+ update_pixmap (fish);
+
+ fish->prev_allocation = *allocation;
+}
+
+static void fish_applet_realize(GtkWidget* widget, FishApplet* fish)
+{
+ if (!fish->pixmap)
+ update_pixmap (fish);
+}
+
+static void fish_applet_unrealize(GtkWidget* widget, FishApplet* fish)
+{
+ if (fish->pixmap)
+ g_object_unref (fish->pixmap);
+ fish->pixmap = NULL;
+}
+
+static void fish_applet_change_orient(MatePanelApplet* applet, MatePanelAppletOrient orientation)
+{
+ FishApplet *fish = (FishApplet *) applet;
+
+ if (fish->orientation == orientation)
+ return;
+
+ fish->orientation = orientation;
+
+ if (fish->pixmap)
+ update_pixmap (fish);
+}
+
+static void change_water(FishApplet* fish)
+{
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (
+ NULL, 0, GTK_MESSAGE_INFO,
+ GTK_BUTTONS_OK,
+ _("The water needs changing"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ _("Look at today's date!"));
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), FISH_ICON);
+ gtk_window_set_wmclass (GTK_WINDOW (dialog), "fish", "Fish");
+ gtk_window_set_screen (GTK_WINDOW (dialog),
+ gtk_widget_get_screen (GTK_WIDGET (fish)));
+
+ gtk_widget_show_all (dialog);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+}
+
+static gboolean handle_keypress(GtkWidget* widget, GdkEventKey* event, FishApplet* fish)
+{
+ switch (event->keyval) {
+ case GDK_space:
+ case GDK_KP_Space:
+ case GDK_Return:
+ case GDK_KP_Enter:
+ case GDK_ISO_Enter:
+ case GDK_3270_Enter:
+ if (fish->april_fools) {
+ change_water (fish);
+ return TRUE;
+ }
+
+ display_fortune_dialog (fish);
+ break;
+ default:
+ return FALSE;
+ break;
+ }
+
+ return TRUE;
+}
+
+static gboolean fish_enter_notify(GtkWidget* widget, GdkEventCrossing* event)
+{
+ FishApplet *fish;
+ GtkWidget *event_widget;
+
+ fish = FISH_APPLET (widget);
+ event_widget = gtk_get_event_widget ((GdkEvent*) event);
+
+ if ((event_widget == widget) &&
+ (event->detail != GDK_NOTIFY_INFERIOR))
+ fish->in_applet = TRUE;
+
+ return FALSE;
+}
+
+static gboolean fish_leave_notify(GtkWidget* widget, GdkEventCrossing* event)
+{
+ FishApplet *fish;
+ GtkWidget *event_widget;
+
+ fish = FISH_APPLET (widget);
+ event_widget = gtk_get_event_widget ((GdkEvent*) event);
+
+ if ((event_widget == widget) &&
+ (event->detail != GDK_NOTIFY_INFERIOR))
+ fish->in_applet = FALSE;
+
+ return FALSE;
+}
+
+static gboolean handle_button_release(FishApplet* fish, GdkEventButton* event)
+{
+ if (!fish->in_applet || event->button != 1)
+ return FALSE;
+
+ if (fish->april_fools) {
+ change_water (fish);
+ return TRUE;
+ }
+
+ display_fortune_dialog (fish);
+
+ return TRUE;
+}
+
+static void set_tooltip(FishApplet* fish)
+{
+ const char *desc_format = _("%s the Fish, the fortune teller");
+ char *desc;
+
+ desc = g_markup_printf_escaped (desc_format, fish->name);
+ gtk_widget_set_tooltip_markup (GTK_WIDGET (fish), desc);
+ g_free (desc);
+}
+
+static void setup_fish_widget(FishApplet* fish)
+{
+ GtkWidget *widget = (GtkWidget *) fish;
+
+ fish->frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (fish->frame), GTK_SHADOW_IN);
+ gtk_container_add (GTK_CONTAINER (widget), fish->frame);
+
+ fish->drawing_area = gtk_drawing_area_new ();
+ gtk_container_add (GTK_CONTAINER (fish->frame), fish->drawing_area);
+
+ g_signal_connect (fish->drawing_area, "realize",
+ G_CALLBACK (fish_applet_realize), fish);
+ g_signal_connect (fish->drawing_area, "unrealize",
+ G_CALLBACK (fish_applet_unrealize), fish);
+ g_signal_connect (fish->drawing_area, "size-request",
+ G_CALLBACK (fish_applet_size_request), fish);
+ g_signal_connect (fish->drawing_area, "size-allocate",
+ G_CALLBACK (fish_applet_size_allocate), fish);
+ g_signal_connect (fish->drawing_area, "expose-event",
+ G_CALLBACK (fish_applet_expose_event), fish);
+
+ gtk_widget_add_events (widget, GDK_ENTER_NOTIFY_MASK |
+ GDK_LEAVE_NOTIFY_MASK |
+ GDK_BUTTON_RELEASE_MASK);
+
+ g_signal_connect_swapped (widget, "enter_notify_event",
+ G_CALLBACK (fish_enter_notify), fish);
+ g_signal_connect_swapped (widget, "leave_notify_event",
+ G_CALLBACK (fish_leave_notify), fish);
+ g_signal_connect_swapped (widget, "button_release_event",
+ G_CALLBACK (handle_button_release), fish);
+
+ gtk_widget_add_events (fish->drawing_area, GDK_BUTTON_RELEASE_MASK);
+ g_signal_connect_swapped (fish->drawing_area, "button_release_event",
+ G_CALLBACK (handle_button_release), fish);
+
+ load_fish_image (fish);
+
+ update_pixmap (fish);
+
+ setup_timeout (fish);
+
+ set_tooltip (fish);
+ set_ally_name_desc (GTK_WIDGET (fish), fish);
+
+ g_signal_connect (fish, "key_press_event",
+ G_CALLBACK (handle_keypress), fish);
+
+ gtk_widget_show_all (widget);
+}
+
+static const GtkActionEntry fish_menu_verbs[] = {
+ { "FishPreferences", GTK_STOCK_PROPERTIES, N_("_Preferences"),
+ NULL, NULL,
+ G_CALLBACK (display_preferences_dialog) },
+ { "FishHelp", GTK_STOCK_HELP, N_("_Help"),
+ NULL, NULL,
+ G_CALLBACK (display_help_dialog) },
+ { "FishAbout", GTK_STOCK_ABOUT, N_("_About"),
+ NULL, NULL,
+ G_CALLBACK (display_about_dialog) }
+};
+
+static void fish_migrate_to_210(FishApplet* fish)
+{
+ char *new_image;
+
+ g_assert (fish->image);
+
+ if (!strncmp (fish->image, "fish/", 5)) {
+ new_image = g_strdup (fish->image + 5);
+ g_free (fish->image);
+ fish->image = new_image;
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (fish), "image",
+ fish->image, NULL);
+ }
+}
+
+static gboolean fish_applet_fill(FishApplet* fish)
+{
+ MatePanelApplet* applet = (MatePanelApplet*) fish;
+ GtkActionGroup* action_group;
+ gchar* ui_path;
+ GError* error = NULL;
+
+ fish->orientation = mate_panel_applet_get_orient (applet);
+
+ mate_panel_applet_add_preferences(applet, "/schemas/apps/fish_applet/prefs", NULL);
+
+ setup_mateconf(fish);
+
+ fish->name = mate_panel_applet_mateconf_get_string(applet, "name", &error);
+
+ if (error)
+ {
+ g_warning ("Error getting 'name' preference: %s", error->message);
+ g_error_free (error);
+ error = NULL;
+ }
+
+ if (!fish->name)
+ {
+ fish->name = g_strdup ("Wanda"); /* Fallback */
+ }
+
+ fish->image = mate_panel_applet_mateconf_get_string (applet, "image", &error);
+
+ if (error) {
+ g_warning ("Error getting 'image' preference: %s", error->message);
+ g_error_free (error);
+ error = NULL;
+ }
+
+ if (!fish->image)
+ fish->image = g_strdup ("fishanim.png"); /* Fallback */
+
+ fish_migrate_to_210 (fish);
+
+ fish->command = mate_panel_applet_mateconf_get_string (applet, "command", &error);
+
+ if (error) {
+ g_warning ("Error getting 'command' preference: %s", error->message);
+ g_error_free (error);
+ error = NULL;
+ }
+
+ fish->n_frames = mate_panel_applet_mateconf_get_int (applet, "frames", &error);
+
+ if (error) {
+ g_warning ("Error getting 'frames' preference: %s", error->message);
+ g_error_free (error);
+ error = NULL;
+
+ fish->n_frames = 3; /* Fallback */
+ }
+ if (fish->n_frames <= 0)
+ fish->n_frames = 1;
+
+ fish->speed = mate_panel_applet_mateconf_get_float (applet, "speed", &error);
+
+ if (error) {
+ g_warning ("Error getting 'speed' preference: %s", error->message);
+ g_error_free (error);
+ error = NULL;
+
+ fish->speed = 1.0; /* Fallback */
+ }
+
+ fish->rotate = mate_panel_applet_mateconf_get_bool (applet, "rotate", &error);
+
+ if (error) {
+ g_warning ("Error getting 'rotate' preference: %s", error->message);
+ g_error_free (error);
+ error = NULL;
+
+ fish->rotate = FALSE; /* Fallback */
+ }
+
+ action_group = gtk_action_group_new ("Fish Applet Actions");
+ gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
+ gtk_action_group_add_actions (action_group,
+ fish_menu_verbs,
+ G_N_ELEMENTS (fish_menu_verbs),
+ fish);
+ ui_path = g_build_filename (FISH_MENU_UI_DIR, "fish-menu.xml", NULL);
+ mate_panel_applet_setup_menu_from_file (applet, ui_path, action_group);
+ g_free (ui_path);
+
+ if (mate_panel_applet_get_locked_down (applet)) {
+ GtkAction *action;
+
+ action = gtk_action_group_get_action (action_group, "FishPreferences");
+ gtk_action_set_visible (action, FALSE);
+ }
+ g_object_unref (action_group);
+
+ #ifndef FISH_INPROCESS
+ gtk_window_set_default_icon_name(FISH_ICON);
+ #endif
+
+ setup_fish_widget(fish);
+
+ return TRUE;
+}
+
+static gboolean fishy_factory(MatePanelApplet* applet, const char* iid, gpointer data)
+{
+ gboolean retval = FALSE;
+
+ if (!strcmp(iid, "FishApplet"))
+ {
+ retval = fish_applet_fill(FISH_APPLET(applet));
+ }
+
+ return retval;
+}
+
+static void fish_applet_destroy(GtkObject* object)
+{
+ FishApplet* fish = (FishApplet*) object;
+ int i;
+
+ if (fish->timeout)
+ {
+ g_source_remove (fish->timeout);
+ }
+
+ fish->timeout = 0;
+
+ for (i = 0; i < N_FISH_LISTENERS; i++)
+ {
+ if (fish->client && fish->listeners [i] != 0)
+ {
+ mateconf_client_notify_remove(fish->client, fish->listeners [i]);
+ }
+
+ fish->listeners [i] = 0;
+ }
+
+ if (fish->name)
+ g_free (fish->name);
+ fish->name = NULL;
+
+ if (fish->image)
+ g_free (fish->image);
+ fish->image = NULL;
+
+ if (fish->command)
+ g_free (fish->command);
+ fish->command = NULL;
+
+ if (fish->client)
+ g_object_unref (fish->client);
+ fish->client = NULL;
+
+ if (fish->pixmap)
+ g_object_unref (fish->pixmap);
+ fish->pixmap = NULL;
+
+ if (fish->pixbuf)
+ g_object_unref (fish->pixbuf);
+ fish->pixbuf = NULL;
+
+ if (fish->preferences_dialog)
+ gtk_widget_destroy (fish->preferences_dialog);
+ fish->preferences_dialog = NULL;
+
+ if (fish->fortune_dialog)
+ gtk_widget_destroy (fish->fortune_dialog);
+ fish->fortune_dialog = NULL;
+
+ if (fish->source_id)
+ g_source_remove (fish->source_id);
+ fish->source_id = 0;
+
+ fish_close_channel (fish);
+
+ GTK_OBJECT_CLASS (parent_class)->destroy (object);
+}
+
+static void fish_applet_instance_init(FishApplet* fish, FishAppletClass* klass)
+{
+ int i;
+
+ fish->client = mateconf_client_get_default();
+
+ fish->name = NULL;
+ fish->image = NULL;
+ fish->command = NULL;
+ fish->n_frames = 1;
+ fish->speed = 0.0;
+ fish->rotate = FALSE;
+
+ fish->orientation = MATE_PANEL_APPLET_ORIENT_UP;
+
+ fish->frame = NULL;
+ fish->drawing_area = NULL;
+ fish->pixmap = NULL;
+ fish->timeout = 0;
+ fish->current_frame = 0;
+ fish->in_applet = FALSE;
+
+ fish->requisition.width = -1;
+ fish->requisition.height = -1;
+
+ fish->prev_allocation.x = -1;
+ fish->prev_allocation.y = -1;
+ fish->prev_allocation.width = -1;
+ fish->prev_allocation.height = -1;
+
+ fish->pixbuf = NULL;
+
+ fish->preferences_dialog = NULL;
+ fish->name_entry = NULL;
+ fish->command_label = NULL;
+ fish->command_entry = NULL;
+ fish->preview_image = NULL;
+ fish->image_chooser = NULL;
+ fish->frames_spin = NULL;
+ fish->speed_spin = NULL;
+ fish->rotate_toggle = NULL;
+
+ fish->fortune_dialog = NULL;
+ fish->fortune_view = NULL;
+ fish->fortune_label = NULL;
+ fish->fortune_cmd_label = NULL;
+ fish->fortune_buffer = NULL;
+
+ fish->source_id = 0;
+ fish->io_channel = NULL;
+
+ for (i = 0; i < N_FISH_LISTENERS; i++)
+ fish->listeners [i] = 0;
+
+ fish->april_fools = FALSE;
+
+ mate_panel_applet_set_flags (MATE_PANEL_APPLET (fish), MATE_PANEL_APPLET_EXPAND_MINOR);
+
+ mate_panel_applet_set_background_widget(MATE_PANEL_APPLET(fish), GTK_WIDGET(fish));
+}
+
+static void fish_applet_class_init(FishAppletClass* klass)
+{
+ MatePanelAppletClass* applet_class = (MatePanelAppletClass*) klass;
+ GtkObjectClass* gtkobject_class = (GtkObjectClass*) klass;
+
+ parent_class = g_type_class_peek_parent(klass);
+
+ applet_class->change_orient = fish_applet_change_orient;
+
+ gtkobject_class->destroy = fish_applet_destroy;
+
+ init_fools_day();
+}
+
+static GType fish_applet_get_type(void)
+{
+ static GType type = 0;
+
+ if (!type)
+ {
+ static const GTypeInfo info = {
+ sizeof(MatePanelAppletClass),
+ NULL, NULL,
+ (GClassInitFunc) fish_applet_class_init,
+ NULL, NULL,
+ sizeof(FishApplet),
+ 0,
+ (GInstanceInitFunc) fish_applet_instance_init,
+ NULL
+ };
+
+ type = g_type_register_static(PANEL_TYPE_APPLET, "FishApplet", &info, 0);
+ }
+
+ return type;
+}
+
+#ifdef FISH_INPROCESS
+ MATE_PANEL_APPLET_IN_PROCESS_FACTORY("FishAppletFactory", fish_applet_get_type(), "That-stupid-fish", fishy_factory, NULL)
+#else
+ MATE_PANEL_APPLET_OUT_PROCESS_FACTORY("FishAppletFactory", fish_applet_get_type(), "That-stupid-fish", fishy_factory, NULL)
+#endif
diff --git a/applets/fish/fish.schemas.in b/applets/fish/fish.schemas.in
new file mode 100644
index 00000000..3431ac33
--- /dev/null
+++ b/applets/fish/fish.schemas.in
@@ -0,0 +1,91 @@
+<mateconfschemafile>
+ <schemalist>
+
+ <schema>
+ <key>/schemas/apps/fish_applet/prefs/name</key>
+ <owner>fish-applet</owner>
+ <type>string</type>
+ <default>Wanda</default>
+ <locale name="C">
+ <short>The fish's name</short>
+ <long>
+ A fish without a name is a pretty dull fish. Bring your fish to
+ life by naming him.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/fish_applet/prefs/image</key>
+ <owner>fish-applet</owner>
+ <type>string</type>
+ <default>wanda.png</default>
+ <locale name="C">
+ <short>The fish's animation pixmap</short>
+ <long>
+ This key specifies the filename of the pixmap which will be used
+ for the animation displayed in the fish applet relative to the
+ pixmap directory.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/fish_applet/prefs/command</key>
+ <owner>fish-applet</owner>
+ <type>string</type>
+ <default>fortune</default>
+ <locale name="C">
+ <short>Command to execute on click</short>
+ <long>
+ This key specifies the command that will be tried to execute when
+ the fish is clicked.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/fish_applet/prefs/frames</key>
+ <owner>fish-applet</owner>
+ <type>int</type>
+ <default>8</default>
+ <locale name="C">
+ <short>Frames in fish's animation</short>
+ <long>
+ This key specifies the number of frames that will be displayed in
+ the fish's animation.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/fish_applet/prefs/speed</key>
+ <owner>fish-applet</owner>
+ <type>float</type>
+ <default>0.3</default>
+ <locale name="C">
+ <short>Pause per frame</short>
+ <long>
+ This key specifies the number of seconds each frame will be
+ displayed.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/fish_applet/prefs/rotate</key>
+ <owner>fish-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Rotate on vertical panels</short>
+ <long>
+ If true, the fish's animation will be displayed rotated on vertical
+ panels.
+ </long>
+ </locale>
+ </schema>
+
+ </schemalist>
+
+</mateconfschemafile>
diff --git a/applets/fish/fish.ui b/applets/fish/fish.ui
new file mode 100644
index 00000000..0458f810
--- /dev/null
+++ b/applets/fish/fish.ui
@@ -0,0 +1,444 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy toplevel-contextual -->
+ <object class="GtkDialog" id="fish_preferences_dialog">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Fish Preferences</property>
+ <property name="type_hint">dialog</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox2">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkVBox" id="vbox5">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkVBox" id="vbox6">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label13">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">General</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox6">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="label16">
+ <property name="visible">True</property>
+ <property name="label" translatable="no"> </property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox7">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="name_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Name of fish:</property>
+ <property name="use_markup">True</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">name_entry</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="name_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="activates_default">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox3">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="command_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Co_mmand to run when clicked:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">command_entry</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="command_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="activates_default">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox8">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label12">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Animation</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox7">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="label17">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"> </property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox9">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkImage" id="preview_image">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox2">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="image_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">1</property>
+ <property name="ypad">6</property>
+ <property name="label" translatable="yes">_File:</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFileChooserButton" id="image_chooser">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Select an animation</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox8">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox10">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkLabel" id="frames_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Total frames in animation:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">frames_spin</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="speed_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Pause per frame:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">speed_spin</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="table2">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="frames_post_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">frames</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="speed_post_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">seconds</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="speed_spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">adjustment2</property>
+ <property name="climb_rate">0.10000000149</property>
+ <property name="digits">1</property>
+ <property name="numeric">True</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="frames_spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">adjustment1</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="rotate_toggle">
+ <property name="label" translatable="yes">_Rotate on vertical panels</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area2">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkButton" id="help_button">
+ <property name="label">gtk-help</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="done_button">
+ <property name="label">gtk-close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-11">help_button</action-widget>
+ <action-widget response="-5">done_button</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkAdjustment" id="adjustment1">
+ <property name="value">3</property>
+ <property name="lower">1</property>
+ <property name="upper">255</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">5</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment2">
+ <property name="value">1</property>
+ <property name="lower">0.10000000000000001</property>
+ <property name="upper">10</property>
+ <property name="step_increment">0.10000000000000001</property>
+ <property name="page_increment">1</property>
+ </object>
+</interface>
diff --git a/applets/fish/fishanim.png b/applets/fish/fishanim.png
new file mode 100644
index 00000000..e55aec2f
--- /dev/null
+++ b/applets/fish/fishanim.png
Binary files differ
diff --git a/applets/fish/footguy.png b/applets/fish/footguy.png
new file mode 100644
index 00000000..e1d5f21c
--- /dev/null
+++ b/applets/fish/footguy.png
Binary files differ
diff --git a/applets/fish/monkey.png b/applets/fish/monkey.png
new file mode 100644
index 00000000..d5e8c0a1
--- /dev/null
+++ b/applets/fish/monkey.png
Binary files differ
diff --git a/applets/fish/nyan.png b/applets/fish/nyan.png
new file mode 100644
index 00000000..5c3bf903
--- /dev/null
+++ b/applets/fish/nyan.png
Binary files differ
diff --git a/applets/fish/oldwanda.png b/applets/fish/oldwanda.png
new file mode 100644
index 00000000..d093ceff
--- /dev/null
+++ b/applets/fish/oldwanda.png
Binary files differ
diff --git a/applets/fish/org.mate.panel.FishApplet.mate-panel-applet.in.in b/applets/fish/org.mate.panel.FishApplet.mate-panel-applet.in.in
new file mode 100644
index 00000000..ca52df11
--- /dev/null
+++ b/applets/fish/org.mate.panel.FishApplet.mate-panel-applet.in.in
@@ -0,0 +1,17 @@
+[Applet Factory]
+Id=FishAppletFactory
+InProcess=@IN_PROCESS@
+Location=@LOCATION@
+_Name=Wanda Factory
+_Description=From Whence That Stupid Fish Came
+
+[FishApplet]
+_Name=Fish
+_Description=Display a swimming fish or another animated creature
+Icon=mate-panel-fish
+MateComponentId=OAFIID:MATE_FishApplet;
+X-MATE-Bugzilla-Bugzilla=MATE
+X-MATE-Bugzilla-Product=mate-panel
+X-MATE-Bugzilla-Component=fish
+X-MATE-Bugzilla-Version=@VERSION@
+X-MATE-Bugzilla-OtherBinaries=fish-applet-2
diff --git a/applets/fish/org.mate.panel.applet.FishAppletFactory.service.in b/applets/fish/org.mate.panel.applet.FishAppletFactory.service.in
new file mode 100644
index 00000000..cb4028d7
--- /dev/null
+++ b/applets/fish/org.mate.panel.applet.FishAppletFactory.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.mate.panel.applet.FishAppletFactory
+Exec=@LOCATION@
diff --git a/applets/fish/wanda.png b/applets/fish/wanda.png
new file mode 100644
index 00000000..d56a4d4a
--- /dev/null
+++ b/applets/fish/wanda.png
Binary files differ
diff --git a/applets/fish/wanda.svg b/applets/fish/wanda.svg
new file mode 100644
index 00000000..6239e72c
--- /dev/null
+++ b/applets/fish/wanda.svg
@@ -0,0 +1,3724 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="288"
+ height="22"
+ id="svg1307"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docbase="/home/ulisse/Desktop/wanda/32x32"
+ sodipodi:docname="wanda.svg"
+ inkscape:export-filename="/home/ulisse/Desktop/wanda.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ version="1.0">
+ <defs
+ id="defs1309">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3219">
+ <stop
+ style="stop-color:#407cd3;stop-opacity:1"
+ offset="0"
+ id="stop3221" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:0"
+ offset="1"
+ id="stop3223" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4300">
+ <stop
+ id="stop4302"
+ offset="0"
+ style="stop-color:black;stop-opacity:0" />
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0.5"
+ id="stop4304" />
+ <stop
+ id="stop4306"
+ offset="1"
+ style="stop-color:black;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3140">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3142" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3144" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3031">
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="0"
+ id="stop3033" />
+ <stop
+ id="stop3041"
+ offset="0.5"
+ style="stop-color:white;stop-opacity:1;" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3035" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3007">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3009" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3011" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2999">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3001" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3003" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2991">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop2993" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop2995" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2957">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2959" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2961" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2949">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2951" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2953" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2938">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2940" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2942" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2908">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop2910" />
+ <stop
+ id="stop2916"
+ offset="0.45945945"
+ style="stop-color:#a0a0a0;stop-opacity:1;" />
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="1"
+ id="stop2912" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2879">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop2881" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop2883" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2851">
+ <stop
+ style="stop-color:#b15700;stop-opacity:1;"
+ offset="0"
+ id="stop2853" />
+ <stop
+ style="stop-color:#b15700;stop-opacity:0;"
+ offset="1"
+ id="stop2855" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2841">
+ <stop
+ style="stop-color:#b15700;stop-opacity:1;"
+ offset="0"
+ id="stop2843" />
+ <stop
+ style="stop-color:#ffaf61;stop-opacity:1;"
+ offset="1"
+ id="stop2845" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2822">
+ <stop
+ style="stop-color:#fed9a2;stop-opacity:1;"
+ offset="0"
+ id="stop2824" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:1;"
+ offset="1"
+ id="stop2826" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2814">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2816" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2818" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2806">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop2808" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop2810" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2953">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2955" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2957" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2927">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop2929" />
+ <stop
+ style="stop-color:#c4c4bd;stop-opacity:1;"
+ offset="1"
+ id="stop2931" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2215">
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:1;"
+ offset="0"
+ id="stop2217" />
+ <stop
+ style="stop-color:#f57900"
+ offset="1"
+ id="stop2219" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="linearGradient2896"
+ gradientUnits="userSpaceOnUse"
+ x1="15.819157"
+ y1="18.416809"
+ x2="18.834814"
+ y2="27.884321"
+ gradientTransform="matrix(0.65317,0,0,0.677917,2.535262,-5.885943)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2927"
+ id="radialGradient2933"
+ cx="12.509563"
+ cy="18.175413"
+ fx="12.509563"
+ fy="18.175413"
+ r="3.0691423"
+ gradientTransform="matrix(0.774722,0,0,0.78676,2.558566,3.937224)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2953"
+ id="linearGradient2959"
+ x1="10.519532"
+ y1="15.218751"
+ x2="10.601563"
+ y2="16.440104"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2806"
+ id="linearGradient2812"
+ x1="15"
+ y1="30.188313"
+ x2="14.75"
+ y2="24.563313"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.719559,0,0,0.717877,1.366921,-4.783521)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2814"
+ id="linearGradient2820"
+ x1="9.089674"
+ y1="19.5"
+ x2="9.5766888"
+ y2="22.928572"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="radialGradient2828"
+ cx="13.600359"
+ cy="14.214091"
+ fx="13.600359"
+ fy="14.214091"
+ r="3.6818285"
+ gradientTransform="matrix(0.673036,0,0,0.834892,2.166538,-6.204559)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2841"
+ id="linearGradient2847"
+ x1="11.44949"
+ y1="17.084051"
+ x2="11.646118"
+ y2="23.565865"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2851"
+ id="linearGradient2857"
+ x1="20.506096"
+ y1="26.123884"
+ x2="22.804193"
+ y2="23.516428"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.671463,2.166538,-3.544657)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2879"
+ id="radialGradient2885"
+ cx="20.152544"
+ cy="33.636894"
+ fx="20.152544"
+ fy="33.636894"
+ r="15.291184"
+ gradientTransform="matrix(1,0,0,0.257225,0,24.98463)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2908"
+ id="linearGradient2914"
+ x1="11"
+ y1="8.96875"
+ x2="10.5625"
+ y2="12.28125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.065193,0,0,1.062703,-2.157454,-8.432517)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient2936"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.643287,8.434448e-2,-8.896863e-2,0.675386,6.624351,-5.55093)"
+ x1="27.423513"
+ y1="15.167804"
+ x2="34.511864"
+ y2="14.907785" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient2944"
+ x1="20.96875"
+ y1="18.626238"
+ x2="23.21875"
+ y2="34.31374"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2949"
+ id="linearGradient2955"
+ x1="12.573617"
+ y1="21.924866"
+ x2="12.573617"
+ y2="19.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2957"
+ id="linearGradient2963"
+ x1="25.530855"
+ y1="32.304909"
+ x2="21.204615"
+ y2="27.437946"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2991"
+ id="linearGradient3023"
+ gradientUnits="userSpaceOnUse"
+ x1="35.53125"
+ y1="20.71875"
+ x2="42.4375"
+ y2="20.71875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2999"
+ id="linearGradient3025"
+ gradientUnits="userSpaceOnUse"
+ x1="36.625"
+ y1="21.796875"
+ x2="42.59375"
+ y2="21.796875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3007"
+ id="linearGradient3027"
+ gradientUnits="userSpaceOnUse"
+ x1="38.34375"
+ y1="23.203125"
+ x2="43.125"
+ y2="23.203125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3031"
+ id="linearGradient3037"
+ x1="44.03125"
+ y1="22.0625"
+ x2="37.59375"
+ y2="22.21875"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.671463,2.166538,-3.544657)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient3138"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65111,0,0,0.635315,2.303275,-6.311035)"
+ x1="26.247757"
+ y1="38.03194"
+ x2="23.782515"
+ y2="36.457325" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3140"
+ id="linearGradient3146"
+ x1="19.203779"
+ y1="18.359375"
+ x2="16.761021"
+ y2="15.921875"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2879"
+ id="radialGradient2023"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.257225,0,24.98463)"
+ cx="20.152544"
+ cy="33.636894"
+ fx="20.152544"
+ fy="33.636894"
+ r="15.291184" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient2025"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.643287,8.434448e-2,-8.896863e-2,0.675386,36.55157,0.884929)"
+ x1="27.423513"
+ y1="15.167804"
+ x2="34.511864"
+ y2="14.907785" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3031"
+ id="linearGradient2027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.671463,32.09376,2.891209)"
+ x1="44.03125"
+ y1="22.0625"
+ x2="37.59375"
+ y2="22.21875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="linearGradient2029"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65317,0,0,0.677917,32.46248,0.549919)"
+ x1="15.819157"
+ y1="18.416809"
+ x2="18.834814"
+ y2="27.884321" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient2031"
+ gradientUnits="userSpaceOnUse"
+ x1="20.96875"
+ y1="18.626238"
+ x2="23.21875"
+ y2="34.31374" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2927"
+ id="radialGradient2033"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.774722,0,0,0.78676,2.558566,3.937224)"
+ cx="12.509563"
+ cy="18.175413"
+ fx="12.509563"
+ fy="18.175413"
+ r="3.0691423" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2841"
+ id="linearGradient2035"
+ gradientUnits="userSpaceOnUse"
+ x1="11.44949"
+ y1="17.084051"
+ x2="11.646118"
+ y2="23.565865" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2814"
+ id="linearGradient2037"
+ gradientUnits="userSpaceOnUse"
+ x1="9.089674"
+ y1="19.5"
+ x2="9.5766888"
+ y2="22.928572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2806"
+ id="linearGradient2039"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.719559,0,0,0.717877,31.29414,1.652339)"
+ x1="15"
+ y1="30.188313"
+ x2="14.75"
+ y2="24.563313" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient2041"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65111,0,0,0.635315,32.23049,0.124829)"
+ x1="26.247757"
+ y1="38.03194"
+ x2="23.782515"
+ y2="36.457325" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2953"
+ id="linearGradient2043"
+ gradientUnits="userSpaceOnUse"
+ x1="10.519532"
+ y1="15.218751"
+ x2="10.601563"
+ y2="16.440104" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="radialGradient2045"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.834892,32.09376,0.231309)"
+ cx="13.600359"
+ cy="14.214091"
+ fx="13.600359"
+ fy="14.214091"
+ r="3.6818285" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2851"
+ id="linearGradient2047"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.671463,32.09376,2.891209)"
+ x1="20.506096"
+ y1="26.123884"
+ x2="22.804193"
+ y2="23.516428" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2908"
+ id="linearGradient2049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.065193,0,0,1.062703,27.76977,-1.996651)"
+ x1="11"
+ y1="8.96875"
+ x2="10.5625"
+ y2="12.28125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2949"
+ id="linearGradient2051"
+ gradientUnits="userSpaceOnUse"
+ x1="12.573617"
+ y1="21.924866"
+ x2="12.573617"
+ y2="19.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2991"
+ id="linearGradient2053"
+ gradientUnits="userSpaceOnUse"
+ x1="35.53125"
+ y1="20.71875"
+ x2="42.4375"
+ y2="20.71875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2999"
+ id="linearGradient2055"
+ gradientUnits="userSpaceOnUse"
+ x1="36.625"
+ y1="21.796875"
+ x2="42.59375"
+ y2="21.796875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3007"
+ id="linearGradient2057"
+ gradientUnits="userSpaceOnUse"
+ x1="38.34375"
+ y1="23.203125"
+ x2="43.125"
+ y2="23.203125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3140"
+ id="linearGradient2059"
+ gradientUnits="userSpaceOnUse"
+ x1="17.703779"
+ y1="24.234375"
+ x2="15.261021"
+ y2="22.046875" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2879"
+ id="radialGradient2113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.257225,0,24.98463)"
+ cx="20.152544"
+ cy="33.636894"
+ fx="20.152544"
+ fy="33.636894"
+ r="15.291184" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient2115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.643287,8.434448e-2,-8.896863e-2,0.675386,36.62435,0.449074)"
+ x1="27.423513"
+ y1="15.167804"
+ x2="34.511864"
+ y2="14.907785" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3031"
+ id="linearGradient2117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.671463,32.16654,2.455347)"
+ x1="44.03125"
+ y1="22.0625"
+ x2="37.59375"
+ y2="22.21875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="linearGradient2119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65317,0,0,0.677917,32.53526,0.114061)"
+ x1="15.819157"
+ y1="18.416809"
+ x2="18.834814"
+ y2="27.884321" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient2121"
+ gradientUnits="userSpaceOnUse"
+ x1="20.96875"
+ y1="18.626238"
+ x2="23.21875"
+ y2="34.31374" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2927"
+ id="radialGradient2123"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.774722,0,0,0.78676,2.558566,3.937224)"
+ cx="12.509563"
+ cy="18.175413"
+ fx="12.509563"
+ fy="18.175413"
+ r="3.0691423" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2841"
+ id="linearGradient2125"
+ gradientUnits="userSpaceOnUse"
+ x1="11.44949"
+ y1="17.084051"
+ x2="11.646118"
+ y2="23.565865" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2814"
+ id="linearGradient2127"
+ gradientUnits="userSpaceOnUse"
+ x1="9.089674"
+ y1="19.5"
+ x2="9.5766888"
+ y2="22.928572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2806"
+ id="linearGradient2129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.719559,0,0,0.717877,31.36692,1.216483)"
+ x1="15"
+ y1="30.188313"
+ x2="14.75"
+ y2="24.563313" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient2131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65111,0,0,0.635315,32.30327,-0.311031)"
+ x1="26.247757"
+ y1="38.03194"
+ x2="23.782515"
+ y2="36.457325" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2953"
+ id="linearGradient2133"
+ gradientUnits="userSpaceOnUse"
+ x1="10.519532"
+ y1="15.218751"
+ x2="10.601563"
+ y2="16.440104" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="radialGradient2135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.834892,32.16654,-0.204555)"
+ cx="13.600359"
+ cy="14.214091"
+ fx="13.600359"
+ fy="14.214091"
+ r="3.6818285" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2851"
+ id="linearGradient2137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.671463,32.16654,2.455347)"
+ x1="20.506096"
+ y1="26.123884"
+ x2="22.804193"
+ y2="23.516428" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2908"
+ id="linearGradient2139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.065193,0,0,1.062703,27.84255,-2.432513)"
+ x1="11"
+ y1="8.96875"
+ x2="10.5625"
+ y2="12.28125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2949"
+ id="linearGradient2141"
+ gradientUnits="userSpaceOnUse"
+ x1="12.573617"
+ y1="21.924866"
+ x2="12.573617"
+ y2="19.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2991"
+ id="linearGradient2143"
+ gradientUnits="userSpaceOnUse"
+ x1="35.53125"
+ y1="20.71875"
+ x2="42.4375"
+ y2="20.71875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2999"
+ id="linearGradient2145"
+ gradientUnits="userSpaceOnUse"
+ x1="36.625"
+ y1="21.796875"
+ x2="42.59375"
+ y2="21.796875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3007"
+ id="linearGradient2147"
+ gradientUnits="userSpaceOnUse"
+ x1="38.34375"
+ y1="23.203125"
+ x2="43.125"
+ y2="23.203125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3140"
+ id="linearGradient2149"
+ gradientUnits="userSpaceOnUse"
+ x1="17.703779"
+ y1="24.234375"
+ x2="15.261021"
+ y2="22.046875" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2879"
+ id="radialGradient2204"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.257225,0,24.98463)"
+ cx="20.152544"
+ cy="33.636894"
+ fx="20.152544"
+ fy="33.636894"
+ r="15.291184" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3031"
+ id="linearGradient2208"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.671463,37.16654,-3.544657)"
+ x1="46.60183"
+ y1="21.643639"
+ x2="34.947159"
+ y2="21.194866" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="linearGradient2210"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65317,0,0,0.677917,37.53526,-5.885943)"
+ x1="15.819157"
+ y1="18.416809"
+ x2="18.834814"
+ y2="27.884321" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2806"
+ id="linearGradient2220"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.719559,0,0,0.717877,36.36692,-4.783521)"
+ x1="15"
+ y1="30.188313"
+ x2="14.75"
+ y2="24.563313" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2851"
+ id="linearGradient2228"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.671463,37.16654,-3.544657)"
+ x1="20.506096"
+ y1="26.123884"
+ x2="22.804193"
+ y2="23.516428" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2991"
+ id="linearGradient2234"
+ gradientUnits="userSpaceOnUse"
+ x1="35.53125"
+ y1="20.71875"
+ x2="42.4375"
+ y2="20.71875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2999"
+ id="linearGradient2236"
+ gradientUnits="userSpaceOnUse"
+ x1="36.625"
+ y1="21.796875"
+ x2="42.59375"
+ y2="21.796875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3007"
+ id="linearGradient2238"
+ gradientUnits="userSpaceOnUse"
+ x1="38.34375"
+ y1="23.203125"
+ x2="43.125"
+ y2="23.203125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient2282"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.643287,8.434448e-2,-8.896863e-2,0.675386,41.62435,-5.55093)"
+ x1="27.423513"
+ y1="15.167804"
+ x2="34.511864"
+ y2="14.907785" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient3178"
+ x1="54.281754"
+ y1="18.985201"
+ x2="56.438499"
+ y2="33.85733"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient4067"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65111,0,0,0.635315,37.30327,-6.311035)"
+ x1="26.247757"
+ y1="38.03194"
+ x2="23.782515"
+ y2="36.457325" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3140"
+ id="linearGradient4075"
+ x1="49.516277"
+ y1="23.96875"
+ x2="47.240696"
+ y2="21.78125"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2879"
+ id="radialGradient4129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.257225,0,24.98463)"
+ cx="20.152544"
+ cy="33.636894"
+ fx="20.152544"
+ fy="33.636894"
+ r="15.291184" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="linearGradient4135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65317,0,0,0.677917,146.5353,-5.885943)"
+ x1="15.819157"
+ y1="18.416809"
+ x2="18.834814"
+ y2="27.884321" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2927"
+ id="radialGradient4139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.774722,0,0,0.78676,2.558566,3.937224)"
+ cx="12.509563"
+ cy="18.175413"
+ fx="12.509563"
+ fy="18.175413"
+ r="3.0691423" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2841"
+ id="linearGradient4141"
+ gradientUnits="userSpaceOnUse"
+ x1="11.44949"
+ y1="17.084051"
+ x2="11.646118"
+ y2="23.565865" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2814"
+ id="linearGradient4143"
+ gradientUnits="userSpaceOnUse"
+ x1="9.089674"
+ y1="19.5"
+ x2="9.5766888"
+ y2="22.928572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2806"
+ id="linearGradient4145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.719559,0,0,0.717877,145.3669,-4.783521)"
+ x1="15"
+ y1="30.188313"
+ x2="14.75"
+ y2="24.563313" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient4147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65111,0,0,0.635315,146.3033,-6.311035)"
+ x1="26.247757"
+ y1="38.03194"
+ x2="23.782515"
+ y2="36.457325" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2953"
+ id="linearGradient4149"
+ gradientUnits="userSpaceOnUse"
+ x1="10.519532"
+ y1="15.218751"
+ x2="10.601563"
+ y2="16.440104" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="radialGradient4151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.834892,146.1665,-6.204559)"
+ cx="13.600359"
+ cy="14.214091"
+ fx="13.600359"
+ fy="14.214091"
+ r="3.6818285" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2851"
+ id="linearGradient4153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.671463,146.1665,-3.544657)"
+ x1="20.506096"
+ y1="26.123884"
+ x2="22.804193"
+ y2="23.516428" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2908"
+ id="linearGradient4155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.065193,0,0,1.062703,141.8426,-8.432517)"
+ x1="11"
+ y1="8.96875"
+ x2="10.5625"
+ y2="12.28125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2949"
+ id="linearGradient4157"
+ gradientUnits="userSpaceOnUse"
+ x1="12.573617"
+ y1="21.924866"
+ x2="12.573617"
+ y2="19.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2991"
+ id="linearGradient4159"
+ gradientUnits="userSpaceOnUse"
+ x1="35.53125"
+ y1="20.71875"
+ x2="42.4375"
+ y2="20.71875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2999"
+ id="linearGradient4161"
+ gradientUnits="userSpaceOnUse"
+ x1="36.625"
+ y1="21.796875"
+ x2="42.59375"
+ y2="21.796875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3007"
+ id="linearGradient4163"
+ gradientUnits="userSpaceOnUse"
+ x1="38.34375"
+ y1="23.203125"
+ x2="43.125"
+ y2="23.203125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3140"
+ id="linearGradient4165"
+ gradientUnits="userSpaceOnUse"
+ x1="19.203779"
+ y1="18.234375"
+ x2="16.573521"
+ y2="15.734375" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2879"
+ id="radialGradient4217"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.257225,0,24.98463)"
+ cx="20.152544"
+ cy="33.636894"
+ fx="20.152544"
+ fy="33.636894"
+ r="15.291184" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="linearGradient4223"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.611374,0,0,0.730235,111.533,-7.526961)"
+ x1="15.819157"
+ y1="18.416809"
+ x2="18.834814"
+ y2="27.884321" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2927"
+ id="radialGradient4227"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.774722,0,0,0.78676,2.558566,3.937224)"
+ cx="12.509563"
+ cy="18.175413"
+ fx="12.509563"
+ fy="18.175413"
+ r="3.0691423" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2841"
+ id="linearGradient4229"
+ gradientUnits="userSpaceOnUse"
+ x1="11.44949"
+ y1="17.084051"
+ x2="11.646118"
+ y2="23.565865" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2814"
+ id="linearGradient4231"
+ gradientUnits="userSpaceOnUse"
+ x1="9.089674"
+ y1="19.5"
+ x2="9.5766888"
+ y2="22.928572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2806"
+ id="linearGradient4233"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673514,0,0,0.773279,110.4394,-6.33946)"
+ x1="15"
+ y1="30.188313"
+ x2="14.75"
+ y2="24.563313" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2953"
+ id="linearGradient4237"
+ gradientUnits="userSpaceOnUse"
+ x1="10.519532"
+ y1="15.218751"
+ x2="10.601563"
+ y2="16.440104" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="radialGradient4239"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.834892,64.16654,-0.204555)"
+ cx="13.600359"
+ cy="14.214091"
+ fx="13.600359"
+ fy="14.214091"
+ r="3.6818285" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2851"
+ id="linearGradient4241"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.629968,0,0,0.723283,111.2986,-5.009045)"
+ x1="20.506096"
+ y1="26.123884"
+ x2="22.804193"
+ y2="23.516428" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2908"
+ id="linearGradient4243"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.065193,0,0,1.062703,59.84255,-2.432513)"
+ x1="11"
+ y1="8.96875"
+ x2="10.5625"
+ y2="12.28125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2949"
+ id="linearGradient4245"
+ gradientUnits="userSpaceOnUse"
+ x1="12.573617"
+ y1="21.924866"
+ x2="12.573617"
+ y2="19.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2991"
+ id="linearGradient4247"
+ gradientUnits="userSpaceOnUse"
+ x1="35.53125"
+ y1="20.71875"
+ x2="42.4375"
+ y2="20.71875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2999"
+ id="linearGradient4249"
+ gradientUnits="userSpaceOnUse"
+ x1="36.625"
+ y1="21.796875"
+ x2="42.59375"
+ y2="21.796875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3007"
+ id="linearGradient4251"
+ gradientUnits="userSpaceOnUse"
+ x1="38.34375"
+ y1="23.203125"
+ x2="43.125"
+ y2="23.203125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient4288"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.602123,9.085377e-2,-8.327553e-2,0.727509,115.3604,-7.166094)"
+ x1="27.423513"
+ y1="15.167804"
+ x2="40.21788"
+ y2="13.709221" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient4296"
+ x1="86.655144"
+ y1="19.123735"
+ x2="89.284859"
+ y2="33.822628"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient4316"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.643287,8.434448e-2,-8.896863e-2,0.675386,150.6243,-5.55093)"
+ x1="27.423513"
+ y1="15.167804"
+ x2="34.511864"
+ y2="14.907785" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient4324"
+ x1="118.5625"
+ y1="18.922701"
+ x2="120.37185"
+ y2="35.172703"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2879"
+ id="radialGradient3298"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.257225,0,24.98463)"
+ cx="20.152544"
+ cy="33.636894"
+ fx="20.152544"
+ fy="33.636894"
+ r="15.291184" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3031"
+ id="linearGradient3302"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.671463,73.16654,-3.544657)"
+ x1="46.60183"
+ y1="21.643639"
+ x2="34.947159"
+ y2="21.194866" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="linearGradient3304"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65317,0,0,0.677917,73.53526,-5.885943)"
+ x1="15.819157"
+ y1="18.416809"
+ x2="18.834814"
+ y2="27.884321" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient3306"
+ gradientUnits="userSpaceOnUse"
+ x1="54.281754"
+ y1="18.985201"
+ x2="56.438499"
+ y2="33.85733" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2927"
+ id="radialGradient3308"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.774722,0,0,0.78676,2.558566,3.937224)"
+ cx="12.509563"
+ cy="18.175413"
+ fx="12.509563"
+ fy="18.175413"
+ r="3.0691423" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2841"
+ id="linearGradient3310"
+ gradientUnits="userSpaceOnUse"
+ x1="11.44949"
+ y1="17.084051"
+ x2="11.646118"
+ y2="23.565865" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2814"
+ id="linearGradient3312"
+ gradientUnits="userSpaceOnUse"
+ x1="9.089674"
+ y1="19.5"
+ x2="9.5766888"
+ y2="22.928572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2806"
+ id="linearGradient3314"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.719559,0,0,0.717877,72.36692,-4.783521)"
+ x1="15"
+ y1="30.188313"
+ x2="14.75"
+ y2="24.563313" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2953"
+ id="linearGradient3318"
+ gradientUnits="userSpaceOnUse"
+ x1="10.519532"
+ y1="15.218751"
+ x2="10.601563"
+ y2="16.440104" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="radialGradient3320"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.834892,73.16654,-6.204559)"
+ cx="13.600359"
+ cy="14.214091"
+ fx="13.600359"
+ fy="14.214091"
+ r="3.6818285" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2851"
+ id="linearGradient3322"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.671463,73.16654,-3.544657)"
+ x1="20.506096"
+ y1="26.123884"
+ x2="22.804193"
+ y2="23.516428" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2908"
+ id="linearGradient3324"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.065193,0,0,1.062703,68.84255,-8.432517)"
+ x1="11"
+ y1="8.96875"
+ x2="10.5625"
+ y2="12.28125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2949"
+ id="linearGradient3326"
+ gradientUnits="userSpaceOnUse"
+ x1="12.573617"
+ y1="21.924866"
+ x2="12.573617"
+ y2="19.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2991"
+ id="linearGradient3328"
+ gradientUnits="userSpaceOnUse"
+ x1="35.53125"
+ y1="20.71875"
+ x2="42.4375"
+ y2="20.71875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2999"
+ id="linearGradient3330"
+ gradientUnits="userSpaceOnUse"
+ x1="36.625"
+ y1="21.796875"
+ x2="42.59375"
+ y2="21.796875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3007"
+ id="linearGradient3332"
+ gradientUnits="userSpaceOnUse"
+ x1="38.34375"
+ y1="23.203125"
+ x2="43.125"
+ y2="23.203125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3140"
+ id="linearGradient3334"
+ gradientUnits="userSpaceOnUse"
+ x1="49.516277"
+ y1="23.96875"
+ x2="47.240696"
+ y2="21.78125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient3338"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.643287,8.434448e-2,-8.896863e-2,0.675386,77.62435,-5.55093)"
+ x1="27.423513"
+ y1="15.167804"
+ x2="34.511864"
+ y2="14.907785" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient3346"
+ x1="96.6875"
+ y1="13.169855"
+ x2="98.412621"
+ y2="27.732355"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient3350"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65111,0,0,0.635315,73.30327,-6.311035)"
+ x1="26.247757"
+ y1="38.03194"
+ x2="23.782515"
+ y2="36.457325" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient3358"
+ x1="91.391281"
+ y1="17.75"
+ x2="88.512932"
+ y2="15.625"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2879"
+ id="radialGradient3410"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.257225,0,24.98463)"
+ cx="20.152544"
+ cy="33.636894"
+ fx="20.152544"
+ fy="33.636894"
+ r="15.291184" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient3412"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.643287,8.434448e-2,-8.896863e-2,0.675386,221.6868,-5.55093)"
+ x1="27.423513"
+ y1="15.167804"
+ x2="34.511864"
+ y2="14.907785" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="linearGradient3416"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65317,0,0,0.677917,217.5978,-5.885943)"
+ x1="15.819157"
+ y1="18.416809"
+ x2="18.834814"
+ y2="27.884321" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient3418"
+ gradientUnits="userSpaceOnUse"
+ x1="96.6875"
+ y1="13.169855"
+ x2="98.412621"
+ y2="27.732355" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2927"
+ id="radialGradient3420"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.774722,0,0,0.78676,2.558566,3.937224)"
+ cx="12.509563"
+ cy="18.175413"
+ fx="12.509563"
+ fy="18.175413"
+ r="3.0691423" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2841"
+ id="linearGradient3422"
+ gradientUnits="userSpaceOnUse"
+ x1="11.44949"
+ y1="17.084051"
+ x2="11.646118"
+ y2="23.565865" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2814"
+ id="linearGradient3424"
+ gradientUnits="userSpaceOnUse"
+ x1="9.089674"
+ y1="19.5"
+ x2="9.5766888"
+ y2="22.928572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2806"
+ id="linearGradient3426"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.719559,0,0,0.717877,216.4294,-4.783521)"
+ x1="15"
+ y1="30.188313"
+ x2="14.75"
+ y2="24.563313" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient3428"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65111,0,0,0.635315,217.3658,-6.311035)"
+ x1="26.247757"
+ y1="38.03194"
+ x2="23.782515"
+ y2="36.457325" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2953"
+ id="linearGradient3430"
+ gradientUnits="userSpaceOnUse"
+ x1="10.519532"
+ y1="15.218751"
+ x2="10.601563"
+ y2="16.440104" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="radialGradient3432"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.834892,217.229,-6.204559)"
+ cx="13.600359"
+ cy="14.214091"
+ fx="13.600359"
+ fy="14.214091"
+ r="3.6818285" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2851"
+ id="linearGradient3434"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.671463,217.229,-3.544657)"
+ x1="20.506096"
+ y1="26.123884"
+ x2="22.804193"
+ y2="23.516428" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2908"
+ id="linearGradient3436"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.065193,0,0,1.062703,212.9051,-8.432517)"
+ x1="11"
+ y1="8.96875"
+ x2="10.5625"
+ y2="12.28125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2949"
+ id="linearGradient3438"
+ gradientUnits="userSpaceOnUse"
+ x1="12.573617"
+ y1="21.924866"
+ x2="12.573617"
+ y2="19.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2991"
+ id="linearGradient3440"
+ gradientUnits="userSpaceOnUse"
+ x1="35.53125"
+ y1="20.71875"
+ x2="42.4375"
+ y2="20.71875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2999"
+ id="linearGradient3442"
+ gradientUnits="userSpaceOnUse"
+ x1="36.625"
+ y1="21.796875"
+ x2="42.59375"
+ y2="21.796875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3007"
+ id="linearGradient3444"
+ gradientUnits="userSpaceOnUse"
+ x1="38.34375"
+ y1="23.203125"
+ x2="43.125"
+ y2="23.203125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient3446"
+ gradientUnits="userSpaceOnUse"
+ x1="91.391281"
+ y1="17.75"
+ x2="88.512932"
+ y2="15.625" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3219"
+ id="linearGradient3225"
+ x1="20.165108"
+ y1="0"
+ x2="20.081213"
+ y2="22"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient3229"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.609445,0,0,0.684345,111.404,-7.968581)"
+ x1="26.247757"
+ y1="38.03194"
+ x2="23.782515"
+ y2="36.457325" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient4122"
+ x1="123.55182"
+ y1="19.244724"
+ x2="123.02632"
+ y2="16.062744"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2879"
+ id="radialGradient4174"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.257225,0,24.98463)"
+ cx="20.152544"
+ cy="33.636894"
+ fx="20.152544"
+ fy="33.636894"
+ r="15.291184" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient4176"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.602123,9.085377e-2,-8.327553e-2,0.727509,259.3604,-7.166094)"
+ x1="27.423513"
+ y1="15.167804"
+ x2="40.21788"
+ y2="13.709221" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="linearGradient4178"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.611374,0,0,0.730235,255.533,-7.526961)"
+ x1="15.819157"
+ y1="18.416809"
+ x2="18.834814"
+ y2="27.884321" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient4180"
+ gradientUnits="userSpaceOnUse"
+ x1="86.655144"
+ y1="19.123735"
+ x2="89.284859"
+ y2="33.822628" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2806"
+ id="linearGradient4182"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673514,0,0,0.773279,254.4394,-6.33946)"
+ x1="15"
+ y1="30.188313"
+ x2="14.75"
+ y2="24.563313" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient4184"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.609445,0,0,0.684345,254.4043,-7.968581)"
+ x1="26.247757"
+ y1="38.03194"
+ x2="23.782515"
+ y2="36.457325" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2851"
+ id="linearGradient4186"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.629968,0,0,0.723283,254.2989,-5.009045)"
+ x1="20.506096"
+ y1="26.123884"
+ x2="22.804193"
+ y2="23.516428" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2927"
+ id="radialGradient4188"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.774722,0,0,0.78676,2.558566,3.937224)"
+ cx="12.509563"
+ cy="18.175413"
+ fx="12.509563"
+ fy="18.175413"
+ r="3.0691423" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2841"
+ id="linearGradient4190"
+ gradientUnits="userSpaceOnUse"
+ x1="11.44949"
+ y1="17.084051"
+ x2="11.646118"
+ y2="23.565865" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2814"
+ id="linearGradient4192"
+ gradientUnits="userSpaceOnUse"
+ x1="9.089674"
+ y1="19.5"
+ x2="9.5766888"
+ y2="22.928572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2953"
+ id="linearGradient4194"
+ gradientUnits="userSpaceOnUse"
+ x1="10.519532"
+ y1="15.218751"
+ x2="10.601563"
+ y2="16.440104" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="radialGradient4196"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.834892,64.16654,-0.204555)"
+ cx="13.600359"
+ cy="14.214091"
+ fx="13.600359"
+ fy="14.214091"
+ r="3.6818285" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2908"
+ id="linearGradient4198"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.065193,0,0,1.062703,59.84255,-2.432513)"
+ x1="11"
+ y1="8.96875"
+ x2="10.5625"
+ y2="12.28125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2949"
+ id="linearGradient4200"
+ gradientUnits="userSpaceOnUse"
+ x1="12.573617"
+ y1="21.924866"
+ x2="12.573617"
+ y2="19.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2991"
+ id="linearGradient4202"
+ gradientUnits="userSpaceOnUse"
+ x1="35.53125"
+ y1="20.71875"
+ x2="42.4375"
+ y2="20.71875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2999"
+ id="linearGradient4204"
+ gradientUnits="userSpaceOnUse"
+ x1="36.625"
+ y1="21.796875"
+ x2="42.59375"
+ y2="21.796875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3007"
+ id="linearGradient4206"
+ gradientUnits="userSpaceOnUse"
+ x1="38.34375"
+ y1="23.203125"
+ x2="43.125"
+ y2="23.203125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient4208"
+ gradientUnits="userSpaceOnUse"
+ x1="123.55182"
+ y1="19.244724"
+ x2="123.02632"
+ y2="16.062744" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2927"
+ id="radialGradient4256"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.774722,0,0,0.78676,2.558566,3.937224)"
+ cx="12.509563"
+ cy="18.175413"
+ fx="12.509563"
+ fy="18.175413"
+ r="3.0691423" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2841"
+ id="linearGradient4258"
+ gradientUnits="userSpaceOnUse"
+ x1="11.44949"
+ y1="17.084051"
+ x2="11.646118"
+ y2="23.565865" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2814"
+ id="linearGradient4260"
+ gradientUnits="userSpaceOnUse"
+ x1="9.089674"
+ y1="19.5"
+ x2="9.5766888"
+ y2="22.928572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2953"
+ id="linearGradient4262"
+ gradientUnits="userSpaceOnUse"
+ x1="10.519532"
+ y1="15.218751"
+ x2="10.601563"
+ y2="16.440104" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="radialGradient4264"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.834892,181.1665,-6.204559)"
+ cx="13.600359"
+ cy="14.214091"
+ fx="13.600359"
+ fy="14.214091"
+ r="3.6818285" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2908"
+ id="linearGradient4266"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.065193,0,0,1.062703,176.8425,-8.432517)"
+ x1="11"
+ y1="8.96875"
+ x2="10.5625"
+ y2="12.28125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2949"
+ id="linearGradient4268"
+ gradientUnits="userSpaceOnUse"
+ x1="12.573617"
+ y1="21.924866"
+ x2="12.573617"
+ y2="19.5" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2879"
+ id="radialGradient4333"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.257225,0,24.98463)"
+ cx="20.152544"
+ cy="33.636894"
+ fx="20.152544"
+ fy="33.636894"
+ r="15.291184" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient4335"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.643287,8.434448e-2,-8.896863e-2,0.675386,185.6243,-5.55093)"
+ x1="27.423513"
+ y1="15.167804"
+ x2="34.511864"
+ y2="14.907785" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="linearGradient4339"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65317,0,0,0.677917,181.5353,-5.885943)"
+ x1="15.819157"
+ y1="18.416809"
+ x2="18.834814"
+ y2="27.884321" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient4341"
+ gradientUnits="userSpaceOnUse"
+ x1="54.281754"
+ y1="18.985201"
+ x2="56.438499"
+ y2="33.85733" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2806"
+ id="linearGradient4343"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.719559,0,0,0.717877,180.3669,-4.783521)"
+ x1="15"
+ y1="30.188313"
+ x2="14.75"
+ y2="24.563313" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2851"
+ id="linearGradient4347"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.671463,181.1665,-3.544657)"
+ x1="20.506096"
+ y1="26.123884"
+ x2="22.804193"
+ y2="23.516428" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2991"
+ id="linearGradient4349"
+ gradientUnits="userSpaceOnUse"
+ x1="35.53125"
+ y1="20.71875"
+ x2="42.4375"
+ y2="20.71875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2999"
+ id="linearGradient4351"
+ gradientUnits="userSpaceOnUse"
+ x1="36.625"
+ y1="21.796875"
+ x2="42.59375"
+ y2="21.796875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3007"
+ id="linearGradient4353"
+ gradientUnits="userSpaceOnUse"
+ x1="38.34375"
+ y1="23.203125"
+ x2="43.125"
+ y2="23.203125" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2927"
+ id="radialGradient4357"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.774722,0,0,0.78676,2.558566,3.937224)"
+ cx="12.509563"
+ cy="18.175413"
+ fx="12.509563"
+ fy="18.175413"
+ r="3.0691423" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2841"
+ id="linearGradient4359"
+ gradientUnits="userSpaceOnUse"
+ x1="11.44949"
+ y1="17.084051"
+ x2="11.646118"
+ y2="23.565865" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2814"
+ id="linearGradient4361"
+ gradientUnits="userSpaceOnUse"
+ x1="9.089674"
+ y1="19.5"
+ x2="9.5766888"
+ y2="22.928572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2953"
+ id="linearGradient4363"
+ gradientUnits="userSpaceOnUse"
+ x1="10.519532"
+ y1="15.218751"
+ x2="10.601563"
+ y2="16.440104" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="radialGradient4365"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.834892,181.1665,-6.204559)"
+ cx="13.600359"
+ cy="14.214091"
+ fx="13.600359"
+ fy="14.214091"
+ r="3.6818285" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2908"
+ id="linearGradient4367"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.065193,0,0,1.062703,176.8425,-8.432517)"
+ x1="11"
+ y1="8.96875"
+ x2="10.5625"
+ y2="12.28125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2949"
+ id="linearGradient4369"
+ gradientUnits="userSpaceOnUse"
+ x1="12.573617"
+ y1="21.924866"
+ x2="12.573617"
+ y2="19.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient4375"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.65111,0,0,0.635315,181.3037,-6.311035)"
+ x1="26.247757"
+ y1="38.03194"
+ x2="23.782515"
+ y2="36.457325" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3140"
+ id="linearGradient4377"
+ gradientUnits="userSpaceOnUse"
+ x1="49.516277"
+ y1="23.96875"
+ x2="47.240696"
+ y2="21.78125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient4391"
+ x1="135.90663"
+ y1="11.535613"
+ x2="135.66415"
+ y2="6.1439233"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2879"
+ id="radialGradient4447"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.257225,0,24.98463)"
+ cx="20.152544"
+ cy="33.636894"
+ fx="20.152544"
+ fy="33.636894"
+ r="15.291184" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="linearGradient4451"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.611374,0,0,0.730235,255.533,-7.526961)"
+ x1="15.819157"
+ y1="18.416809"
+ x2="18.834814"
+ y2="27.884321" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient4453"
+ gradientUnits="userSpaceOnUse"
+ x1="86.655144"
+ y1="19.123735"
+ x2="89.284859"
+ y2="33.822628" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2806"
+ id="linearGradient4455"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673514,0,0,0.773279,254.4394,-6.33946)"
+ x1="15"
+ y1="30.188313"
+ x2="14.75"
+ y2="24.563313" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient4457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.609445,0,0,0.684345,255.404,-7.968581)"
+ x1="26.247757"
+ y1="38.03194"
+ x2="23.782515"
+ y2="36.457325" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2851"
+ id="linearGradient4459"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.629968,0,0,0.723283,255.2986,-5.009045)"
+ x1="20.506096"
+ y1="26.123884"
+ x2="22.804193"
+ y2="23.516428" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2927"
+ id="radialGradient4461"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.774722,0,0,0.78676,2.558566,3.937224)"
+ cx="12.509563"
+ cy="18.175413"
+ fx="12.509563"
+ fy="18.175413"
+ r="3.0691423" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2841"
+ id="linearGradient4463"
+ gradientUnits="userSpaceOnUse"
+ x1="11.44949"
+ y1="17.084051"
+ x2="11.646118"
+ y2="23.565865" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2814"
+ id="linearGradient4465"
+ gradientUnits="userSpaceOnUse"
+ x1="9.089674"
+ y1="19.5"
+ x2="9.5766888"
+ y2="22.928572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2953"
+ id="linearGradient4467"
+ gradientUnits="userSpaceOnUse"
+ x1="10.519532"
+ y1="15.218751"
+ x2="10.601563"
+ y2="16.440104" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2822"
+ id="radialGradient4469"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.673036,0,0,0.834892,64.16654,-0.204555)"
+ cx="13.600359"
+ cy="14.214091"
+ fx="13.600359"
+ fy="14.214091"
+ r="3.6818285" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2908"
+ id="linearGradient4471"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.065193,0,0,1.062703,59.84255,-2.432513)"
+ x1="11"
+ y1="8.96875"
+ x2="10.5625"
+ y2="12.28125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2949"
+ id="linearGradient4473"
+ gradientUnits="userSpaceOnUse"
+ x1="12.573617"
+ y1="21.924866"
+ x2="12.573617"
+ y2="19.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2991"
+ id="linearGradient4475"
+ gradientUnits="userSpaceOnUse"
+ x1="35.53125"
+ y1="20.71875"
+ x2="42.4375"
+ y2="20.71875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2999"
+ id="linearGradient4477"
+ gradientUnits="userSpaceOnUse"
+ x1="36.625"
+ y1="21.796875"
+ x2="42.59375"
+ y2="21.796875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3007"
+ id="linearGradient4479"
+ gradientUnits="userSpaceOnUse"
+ x1="38.34375"
+ y1="23.203125"
+ x2="43.125"
+ y2="23.203125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient4481"
+ gradientUnits="userSpaceOnUse"
+ x1="123.55182"
+ y1="19.244724"
+ x2="123.02632"
+ y2="16.062744" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient4483"
+ gradientUnits="userSpaceOnUse"
+ x1="135.90663"
+ y1="11.535613"
+ x2="135.66415"
+ y2="6.1439233" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2215"
+ id="linearGradient4487"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.602123,9.085377e-2,-8.327553e-2,0.727509,259.3604,-7.166094)"
+ x1="27.423513"
+ y1="15.167804"
+ x2="40.21788"
+ y2="13.709221" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2938"
+ id="linearGradient4495"
+ x1="276.56677"
+ y1="12.953103"
+ x2="276.74847"
+ y2="26.03458"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666"
+ borderopacity="1"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.9999996"
+ inkscape:cx="258.90522"
+ inkscape:cy="3.5799146"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:grid-points="true"
+ gridspacingx="0.5px"
+ gridspacingy="0.5px"
+ gridempspacing="2"
+ inkscape:window-width="1159"
+ inkscape:window-height="922"
+ inkscape:window-x="111"
+ inkscape:window-y="30"
+ fill="#f57900"
+ inkscape:showpageshadow="false"
+ width="360px"
+ height="22px"
+ showguides="true"
+ inkscape:guide-bbox="true">
+ <sodipodi:guide
+ orientation="vertical"
+ position="36.000002"
+ id="guide4308" />
+ <sodipodi:guide
+ orientation="vertical"
+ position="72.000003"
+ id="guide2237" />
+ <sodipodi:guide
+ orientation="vertical"
+ position="108"
+ id="guide2239" />
+ <sodipodi:guide
+ orientation="vertical"
+ position="144.00001"
+ id="guide2241" />
+ <sodipodi:guide
+ orientation="vertical"
+ position="180.00001"
+ id="guide2243" />
+ <sodipodi:guide
+ orientation="vertical"
+ position="216.00001"
+ id="guide3244" />
+ <sodipodi:guide
+ orientation="vertical"
+ position="252.00001"
+ id="guide3246" />
+ <sodipodi:guide
+ orientation="vertical"
+ position="288.00001"
+ id="guide3448" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata1312">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Ulisse Perusin</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:title>wanda</dc:title>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title>Lapo Calamandrei
+Jakub Steiner</dc:title>
+ </cc:Agent>
+ </dc:contributor>
+ <dc:description>fish, superstar</dc:description>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/SourceCode" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="sea"
+ sodipodi:insensitive="true">
+ <rect
+ style="opacity:0.73984674;fill:url(#linearGradient3225);fill-opacity:1;stroke:none;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3216"
+ width="288"
+ height="22"
+ x="0"
+ y="0" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.29381445;color:black;fill:url(#radialGradient4333);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4281"
+ sodipodi:cx="20.152544"
+ sodipodi:cy="33.636894"
+ sodipodi:rx="15.291184"
+ sodipodi:ry="3.9332814"
+ d="M 35.443728 33.636894 A 15.291184 3.9332814 0 1 1 4.8613596,33.636894 A 15.291184 3.9332814 0 1 1 35.443728 33.636894 z"
+ transform="matrix(0.685582,0,0,1.016961,181.7004,-16.20742)" />
+ <path
+ style="fill:url(#linearGradient4335);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 191,2.4634374 C 187.39407,2.6098452 183,5.4999962 181,9.999996 C 181.75,13.999996 187.30945,18.677658 192.5,18 C 197.26287,17.378179 200,15 204.8125,11.999996 C 210.33677,14.776589 213.3125,14.499996 213.3125,14.499996 C 211.875,9.562496 214.5,10.749996 213.5,5.9374963 C 209.8125,7.3749962 209.3125,7.9999962 204.70734,8.5167822 C 203.98385,7.9843592 201.3731,7.1905082 200.60045,6.6531882 C 201.02194,5.3710932 203.13411,4.39695 204.5,3.5 C 200.8125,2.6874999 199.00265,3.5116766 197,4.5 C 195.22084,3.5490546 193.28292,2.6190489 191.73613,2.4844206 C 191.49283,2.463244 191.2404,2.453677 191,2.4634374 z "
+ id="path4283"
+ sodipodi:nodetypes="ccscccccccsc" />
+ <path
+ style="opacity:0.943299;color:black;fill:url(#linearGradient4339);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 202.81916,8.6207192 C 195.22509,6.5803052 189.24913,16.546053 181.70252,10.071565 C 183.34554,5.3560202 188.58373,2.2723946 192,2.9999962 C 194.20648,3.4699358 195.22074,3.831133 196.5,4.5 C 198.81331,5.709518 200.09728,7.0097332 202.81916,8.6207192 z "
+ id="path4287"
+ sodipodi:nodetypes="ccssc" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.95008469"
+ inkscape:original="M 47 2.46875 C 43.394074 2.6151579 39 5.5000002 37 10 C 37.75 14 43.30945 18.677658 48.5 18 C 53.262867 17.378179 56 15.000004 60.8125 12 C 66.33677 14.776593 69.3125 14.5 69.3125 14.5 C 67.875 9.5624998 70.5 10.75 69.5 5.9375 C 65.8125 7.375 65.323912 8.014464 60.71875 8.53125 C 59.995261 7.9988274 57.366397 7.19357 56.59375 6.65625 C 57.015236 5.374155 59.134111 4.39695 60.5 3.5 C 56.8125 2.6874999 55.002652 3.5116766 53 4.5 C 51.220837 3.5490546 49.296791 2.6346283 47.75 2.5 C 47.506692 2.4788235 47.240395 2.4589896 47 2.46875 z "
+ xlink:href="#path2155"
+ style="opacity:0.45899999;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4341);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4289"
+ inkscape:href="#path2155"
+ d="M 47.03125,3.40625 C 43.979015,3.5301769 39.980376,6.1081119 38.0625,10.09375 C 38.465505,11.692295 39.781188,13.606555 41.65625,15 C 43.635526,16.470891 46.101158,17.359364 48.375,17.0625 C 52.875855,16.474886 55.445956,14.221194 60.3125,11.1875 C 60.59772,11.012808 60.95378,11.000939 61.25,11.15625 C 63.939665,12.508122 65.967145,13.083089 67.3125,13.34375 C 67.951276,13.467512 67.908906,13.41879 68.21875,13.4375 C 67.956555,11.778112 68.057338,10.594787 68.34375,9.84375 C 68.618461,9.1233979 68.750878,8.4283719 68.65625,7.28125 C 66.146796,8.328522 64.823934,9.0185915 60.8125,9.46875 C 60.578078,9.4896819 60.344229,9.422868 60.15625,9.28125 C 60.052788,9.2051115 59.155633,8.8033455 58.3125,8.46875 C 57.469367,8.1341545 56.680841,7.8675114 56.0625,7.4375 C 55.718345,7.2036437 55.566378,6.7730715 55.6875,6.375 C 56.000817,5.4219389 56.742681,4.812386 57.5,4.28125 C 55.960926,4.3559777 54.702346,4.7041172 53.40625,5.34375 C 53.140423,5.4754712 52.828327,5.4754712 52.5625,5.34375 C 50.811166,4.407679 48.900613,3.5458058 47.65625,3.4375 C 47.421548,3.4170725 47.191099,3.3997599 47.03125,3.40625 z "
+ transform="translate(144,0)" />
+ <path
+ style="fill:#b15700;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 183.1189,13.570786 C 185.31535,16.204968 188.5,12.999996 192,12.499996 C 188.5,12.499996 185.43264,15.237591 182.21102,11.816439 L 183.1189,13.570786 z "
+ id="path4291"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:0.31443296;color:black;fill:url(#linearGradient4343);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 182.97532,12.535279 C 182.97532,12.535279 185.58368,17.267079 191,17.5 C 197.71919,17.793507 203,11.999996 203,11.999996 L 182.97532,12.535279 z "
+ id="path4293"
+ sodipodi:nodetypes="cscc" />
+ <path
+ style="opacity:1;color:black;fill:url(#linearGradient4347);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 191.87447,16.459575 L 196.03867,12.245759 L 197.40691,12.423808 L 191.87447,16.459575 z "
+ id="path4297"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:0.79381445;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 198.09753,4.5350723 C 199.00239,4.1238346 199.62676,4.0915896 201,4 C 199.72893,4.3746923 199.43195,4.5566723 198.54973,5.0491613 C 197.99928,5.3564443 197.59932,4.7614973 198.09753,4.5350723 z "
+ id="path4299"
+ sodipodi:nodetypes="ccss" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path4301"
+ d="M 184.10214,14.595387 C 186.00653,16.475972 187.68597,14.118691 190,12.999996 C 188.05609,13.119724 185.23526,16.597447 182.74312,12.842818 L 184.10214,14.595387 z "
+ style="opacity:0.74226804;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ id="g4303"
+ transform="matrix(0.790123,0,0,0.952165,177.9259,-8.933107)">
+ <path
+ id="path4305"
+ d="M 42.4375,20.34375 L 42.4375,21.09375 C 40.672788,21.424936 37.889437,20.621802 35.53125,20.34375 C 37.83716,20.359058 40.281614,20.928538 42.4375,20.34375 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient4349);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path4307"
+ d="M 42.40625,21.78125 L 42.59375,22.46875 C 40.604167,22.823591 38.614583,21.661518 36.625,21.125 C 38.552083,21.370176 40.479167,22.279933 42.40625,21.78125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient4351);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path4309"
+ d="M 42.8125,23.3125 L 43.125,23.90625 L 38.34375,22.5 L 42.8125,23.3125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient4353);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <g
+ id="g4313"
+ transform="translate(-0.5,-5.557563e-3)">
+ <path
+ transform="matrix(1.101332,0,0,1.007195,175.7517,-11.77008)"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ sodipodi:ry="3"
+ sodipodi:rx="2.75"
+ sodipodi:cy="19.5"
+ sodipodi:cx="12.25"
+ id="path4315"
+ style="color:black;fill:url(#radialGradient4357);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4359);stroke-width:0.9494763;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.788277,0,0,0.720875,179.5866,-6.186833)"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ sodipodi:ry="3"
+ sodipodi:rx="2.75"
+ sodipodi:cy="19.5"
+ sodipodi:cx="12.25"
+ id="path4317"
+ style="color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4361);stroke-width:1.3265723;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccsc"
+ id="path4319"
+ d="M 190.26287,4.7495012 C 189.36375,4.3772652 188.30762,4.7175332 187.48513,5.0599352 C 190.63438,4.9566222 191.95826,9.8636492 191.95826,9.8636492 C 193.02814,7.6686612 192.13678,5.5253002 190.26287,4.7495012 z "
+ style="color:black;fill:black;fill-opacity:0.40217393;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ transform="matrix(0.504779,0,0,0.507247,175.3662,-4.913061)"
+ d="M 28 24.5 A 2 2 0 1 1 24,24.5 A 2 2 0 1 1 28 24.5 z"
+ sodipodi:ry="2"
+ sodipodi:rx="2"
+ sodipodi:cy="24.5"
+ sodipodi:cx="26"
+ id="path4321"
+ style="color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:1.97624171;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.864603,0,0,1.293872,179.2866,-13.25719)"
+ d="M 12.21875 15.65625 A 1.5625 0.875 0 1 1 9.09375,15.65625 A 1.5625 0.875 0 1 1 12.21875 15.65625 z"
+ sodipodi:ry="0.875"
+ sodipodi:rx="1.5625"
+ sodipodi:cy="15.65625"
+ sodipodi:cx="10.65625"
+ id="path4323"
+ style="opacity:1;color:black;fill:url(#linearGradient4363);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ style="color:black;fill:url(#radialGradient4365);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 190.50083,4.5714542 C 189.60171,4.1992172 188.54557,4.5394852 187.72309,4.8818872 C 190.87233,4.7785742 192.19621,9.6856012 192.19621,9.6856012 C 193.26609,7.4906132 192.37474,5.3472522 190.50083,4.5714542 z "
+ id="path4325"
+ sodipodi:nodetypes="ccsc" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ id="path4327"
+ d="M 187.4279,5.7811442 C 184.23232,4.5191842 184,-0.52865893 184,-0.52865893 C 184,-0.52865893 184.23232,3.3236422 187.89392,4.7848592 C 185.76812,2.4836417 187.33056,1.6469648 187.5,-3.8252839e-06 C 187.6044,2.362952 187.5,3.4999962 189.22541,5.1833732 C 188.33409,3.7209402 189.91149,2.1365822 190,0.99999615 C 190.16255,2.369665 189.27745,4.7731032 190.2906,6.3124962 C 189.26693,5.9275472 188.27572,5.6397772 187.4279,5.7811442 z "
+ style="opacity:1;color:black;fill:url(#linearGradient4367);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:1;color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 189.65785,6.1180942 C 189.10012,4.8533702 190.19955,3.7223434 190.19955,3.7223434 C 190.19955,3.7223434 189.41515,4.8411272 190.16572,6.1282592 C 189.97882,5.0622622 190.29507,4.7377432 190.80646,4.3155992 C 190.33961,5.1409272 190.20309,5.4671402 190.59252,6.6189112 C 190.60987,5.8404302 190.9108,5.6138932 191.22379,5.1997792 C 190.94983,5.7646052 190.92353,6.6622362 190.93401,7.4999962 C 190.54776,7.0133312 190.20327,6.4988912 189.65785,6.1180942 z "
+ id="path4329"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.29896904;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4369);stroke-width:0.68422097;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4331"
+ sodipodi:cx="12.25"
+ sodipodi:cy="19.5"
+ sodipodi:rx="2.75"
+ sodipodi:ry="3"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ transform="matrix(1.528265,0,0,1.397683,170.4663,-19.44231)" />
+ </g>
+ <path
+ style="fill:url(#linearGradient4375);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 193.67476,15.289672 L 201.5004,18.5 C 203.4304,16.661712 201.60206,15.270631 201.0004,14.4375 L 194.97698,14.019042 L 193.67476,15.289672 z "
+ id="path4371"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.9061048"
+ inkscape:original="M 50.96875 14.03125 L 49.6875 15.28125 L 57.5 18.5 C 59.429995 16.661712 57.601664 15.270631 57 14.4375 L 50.96875 14.03125 z "
+ xlink:href="#path2175"
+ style="opacity:0.34500002;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4377);stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4373"
+ inkscape:href="#path2175"
+ d="M 51.3125,14.96875 L 57.1875,17.375 C 57.255933,17.256126 57.418244,17.085431 57.4375,17 C 57.480827,16.807781 57.466062,16.650791 57.375,16.4375 C 57.234705,16.108892 56.834481,15.723099 56.5,15.3125 L 51.3125,14.96875 z "
+ transform="translate(144.0004,0)" />
+ </g>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.29381445;color:black;fill:url(#radialGradient2885);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path2877"
+ sodipodi:cx="20.152544"
+ sodipodi:cy="33.636894"
+ sodipodi:rx="15.291184"
+ sodipodi:ry="3.9332814"
+ d="M 35.443728 33.636894 A 15.291184 3.9332814 0 1 1 4.8613596,33.636894 A 15.291184 3.9332814 0 1 1 35.443728 33.636894 z"
+ transform="matrix(0.685582,0,0,1.016961,2.700435,-16.20742)" />
+ <path
+ style="opacity:1;color:black;fill:#bd7102;fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 30.5,4.9999962 L 30.223726,11.395396 L 32.495223,6.8630202 L 30.5,4.9999962 z "
+ id="path3043"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient2936);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 11.504913,2.2134374 C 7.8989871,2.3598452 4.5,5.7499962 2.5,10.249996 C 3.25,14.249996 8.0810821,18.871617 13.271632,18.193959 C 18.034499,17.572138 19.634784,15.306655 23.956079,11.75211 C 29.480349,14.528703 33,14.333046 33,14.333046 C 30.544203,11.440854 35.711252,7.0563512 31,4.9999962 C 32.913634,7.6990042 28.68242,9.5862162 23.850917,8.2688962 C 23.127426,7.7364732 22.3731,7.1905082 21.600453,6.6531882 C 21.521938,5.1210932 22.946611,3.7094466 24,2.4999962 C 19,2.4999962 18,2.9999962 17.309848,3.9883196 C 15.530685,3.0373742 13.787837,2.3690489 12.241046,2.2344206 C 11.997739,2.213244 11.745308,2.203677 11.504913,2.2134374 z "
+ id="path2192"
+ sodipodi:nodetypes="ccscccccccsc" />
+ <path
+ style="opacity:0.35567011;color:black;fill:url(#linearGradient3037);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 31.548759,7.6394022 C 31.435066,10.292184 31.219252,11.598237 31.801147,13.304873 C 29.710168,13.567187 27.766243,13.179361 25.848987,12.318661 L 27.405382,9.6328082 C 28.68643,9.6262762 30.382776,8.9904912 31.548759,7.6394022 z "
+ id="path3029"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="opacity:0.943299;color:black;fill:url(#linearGradient2896);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 23.81916,8.6207192 C 16.225094,6.5803052 11.061632,16.858553 3.5150167,10.384065 C 5.1580378,5.6685202 8.9165411,1.8604182 12.33281,2.5880199 C 14.539292,3.0579595 16.094834,3.6409212 17.374097,4.3097882 C 19.687403,5.5193062 21.09728,7.0097332 23.81916,8.6207192 z "
+ id="path2223"
+ sodipodi:nodetypes="ccssc" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.90655917"
+ inkscape:original="M 11.5 2.21875 C 7.8940738 2.3651579 4.5 5.7500002 2.5 10.25 C 3.25 14.25 8.0907001 18.865158 13.28125 18.1875 C 18.044117 17.56568 19.647455 15.304545 23.96875 11.75 C 29.49302 14.526593 33 14.34375 33 14.34375 C 30.544203 11.451558 35.711252 7.056355 31 5 C 32.913634 7.699008 28.675253 9.59857 23.84375 8.28125 C 23.120258 7.7488271 22.366397 7.19357 21.59375 6.65625 C 21.515236 5.124155 22.946611 3.7094504 24 2.5 C 19 2.5 18.002652 3.0116766 17.3125 4 C 15.533336 3.0490546 13.796791 2.3846283 12.25 2.25 C 12.006693 2.2288235 11.740395 2.2089896 11.5 2.21875 z "
+ xlink:href="#path2192"
+ style="opacity:0.45876291;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2944);stroke-width:1.00000036;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2934"
+ inkscape:href="#path2192"
+ d="M 11.53125,3.125 C 8.5406753,3.2464234 5.4286976,6.1976815 3.5,10.34375 C 3.889614,12.005046 5.0621112,13.899876 6.78125,15.28125 C 8.5828842,16.728912 10.858809,17.581195 13.15625,17.28125 C 15.410763,16.98691 16.831681,16.369658 18.28125,15.34375 C 19.730819,14.317842 21.21525,12.864739 23.40625,11.0625 C 23.677202,10.835579 24.055321,10.78679 24.375,10.9375 C 27.061224,12.287643 29.229728,12.901184 30.71875,13.1875 C 31.26419,13.29238 31.186951,13.246913 31.53125,13.28125 C 31.428052,12.810354 31.37189,12.321696 31.40625,11.875 C 31.482551,10.883044 31.780487,9.9729541 31.96875,9.15625 C 32.142132,8.4041034 32.19201,7.816359 32.09375,7.34375 C 31.741594,8.0741189 31.093832,8.6135009 30.3125,8.96875 C 28.604759,9.7452107 26.181101,9.8616969 23.59375,9.15625 C 23.491435,9.1213505 23.396185,9.0684342 23.3125,9 C 22.588796,8.4674212 21.821728,7.934238 21.0625,7.40625 C 20.831383,7.2390072 20.69246,6.9727382 20.6875,6.6875 C 20.633102,5.6259971 21.088778,4.7159166 21.625,3.9375 C 21.72412,3.7936112 21.832431,3.6994775 21.9375,3.5625 C 21.008194,3.623477 19.737082,3.630676 19.28125,3.75 C 18.471345,3.9620104 18.33226,4.1449435 18.0625,4.53125 C 17.798444,4.9172345 17.284129,5.0390461 16.875,4.8125 C 15.157292,3.8944023 13.504745,3.2736192 12.15625,3.15625 C 11.921155,3.1357882 11.694789,3.1183601 11.53125,3.125 z "
+ transform="translate(0.152311,-0.123565)" />
+ <path
+ sodipodi:type="arc"
+ style="color:black;fill:url(#radialGradient2933);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2847);stroke-width:0.9494763;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path2180"
+ sodipodi:cx="12.25"
+ sodipodi:cy="19.5"
+ sodipodi:rx="2.75"
+ sodipodi:ry="3"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ transform="matrix(1.101332,0,0,1.007195,-3.248347,-11.77008)" />
+ <path
+ sodipodi:type="arc"
+ style="color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2820);stroke-width:1.3265723;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path2917"
+ sodipodi:cx="12.25"
+ sodipodi:cy="19.5"
+ sodipodi:rx="2.75"
+ sodipodi:ry="3"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ transform="matrix(0.788277,0,0,0.720875,0.586578,-6.186833)" />
+ <path
+ style="fill:#b15700;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 4.339868,13.349815 C 6.5363241,15.983997 9.1202941,13.125761 12.621818,12.350816 C 8.9279131,12.439294 6.6536071,15.060814 3.4319901,11.639662 L 4.339868,13.349815 z "
+ id="path2182"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="color:black;fill:black;fill-opacity:0.40217393;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 11.262873,4.7495012 C 10.363755,4.3772652 9.3076191,4.7175332 8.4851341,5.0599352 C 11.634378,4.9566222 12.958258,9.8636492 12.958258,9.8636492 C 14.028136,7.6686612 13.136783,5.5253002 11.262873,4.7495012 z "
+ id="path2201"
+ sodipodi:nodetypes="ccsc" />
+ <path
+ sodipodi:type="arc"
+ style="color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:1.97624171;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path2221"
+ sodipodi:cx="26"
+ sodipodi:cy="24.5"
+ sodipodi:rx="2"
+ sodipodi:ry="2"
+ d="M 28 24.5 A 2 2 0 1 1 24,24.5 A 2 2 0 1 1 28 24.5 z"
+ transform="matrix(0.504779,0,0,0.507247,-3.633812,-4.913061)" />
+ <path
+ style="opacity:0.31443296;color:black;fill:url(#linearGradient2812);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 3.9753222,12.535279 C 3.9753222,12.535279 6.4625191,17.663234 11.878841,17.896155 C 18.598032,18.189662 23.493361,11.189258 23.493361,11.189258 L 3.9753222,12.535279 z "
+ id="path1917"
+ sodipodi:nodetypes="cscc" />
+ <path
+ style="fill:url(#linearGradient3138);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 14.674361,15.289672 L 18.585375,20.564137 C 21.51537,18.975849 21.185459,16.560303 20.208795,15.289672 L 15.976581,14.019042 L 14.674361,15.289672 z "
+ id="path2190"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;color:black;fill:url(#linearGradient2959);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path2935"
+ sodipodi:cx="10.65625"
+ sodipodi:cy="15.65625"
+ sodipodi:rx="1.5625"
+ sodipodi:ry="0.875"
+ d="M 12.21875 15.65625 A 1.5625 0.875 0 1 1 9.09375,15.65625 A 1.5625 0.875 0 1 1 12.21875 15.65625 z"
+ transform="matrix(0.864603,0,0,1.293872,0.286574,-13.25719)" />
+ <path
+ sodipodi:nodetypes="ccsc"
+ id="path2830"
+ d="M 11.500826,4.5714542 C 10.601708,4.1992172 9.5455731,4.5394852 8.7230881,4.8818872 C 11.872331,4.7785742 13.196211,9.6856012 13.196211,9.6856012 C 14.266089,7.4906132 13.374737,5.3472522 11.500826,4.5714542 z "
+ style="color:black;fill:url(#radialGradient2828);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:1;color:black;fill:url(#linearGradient2857);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 12.874472,16.459575 L 17.03867,12.245759 L 18.406906,12.423808 L 12.874472,16.459575 z "
+ id="path2849"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:1;color:black;fill:url(#linearGradient2914);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 8.4278985,5.7811442 C 5.2323197,4.5191842 4.5,-0.52865893 4.5,-0.52865893 C 4.5,-0.52865893 5.2323197,3.3236422 8.89392,4.7848592 C 6.7681207,2.4836417 7.8305642,1.6469647 8,-3.9252839e-06 C 8.1044055,2.3629519 8.5,3.4999962 10.225411,5.1833732 C 9.3340933,3.7209402 10.411486,2.1365821 10.5,0.99999605 C 10.662548,2.3696649 10.277446,4.7731032 11.290604,6.3124962 C 10.266929,5.9275472 9.2757229,5.6397772 8.4278985,5.7811442 z "
+ id="path2901"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ id="path2903"
+ d="M 10.657852,6.1180942 C 10.100118,4.8533702 11.199546,3.7223434 11.199546,3.7223434 C 11.199546,3.7223434 10.415146,4.8411272 11.165719,6.1282592 C 10.97882,5.0622622 11.295074,4.7377432 11.80646,4.3155992 C 11.339609,5.1409272 11.203095,5.4671402 11.592525,6.6189112 C 11.609867,5.8404302 11.910803,5.6138932 12.22379,5.1997792 C 11.949828,5.7646052 11.923533,6.6622362 11.934007,7.4999962 C 11.54776,7.0133312 11.203273,6.4988912 10.657852,6.1180942 z "
+ style="opacity:1;color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:0.79381445;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 18.908305,4.2506112 C 19.813158,3.8393735 20.43753,3.8071285 21.810772,3.7155389 C 20.5397,4.0902312 20.242721,4.2722112 19.360501,4.7647002 C 18.810048,5.0719832 18.410096,4.4770362 18.908305,4.2506112 z "
+ id="path2930"
+ sodipodi:nodetypes="ccss" />
+ <path
+ transform="matrix(1.528265,0,0,1.397683,-8.53375,-19.44231)"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ sodipodi:ry="3"
+ sodipodi:rx="2.75"
+ sodipodi:cy="19.5"
+ sodipodi:cx="12.25"
+ id="path2947"
+ style="opacity:0.29896904;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2955);stroke-width:0.68422097;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path2887"
+ d="M 5.1463301,14.41861 C 7.0507211,16.299195 8.1190991,14.303444 10.433124,13.184749 C 8.4892191,13.304477 6.4120331,16.243893 4.0082904,12.666041 L 5.1463301,14.41861 z "
+ style="opacity:0.74226804;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ id="g3015"
+ transform="matrix(0.673036,0,0,0.671463,2.376862,-3.499709)">
+ <path
+ id="path2977"
+ d="M 42.4375,20.34375 L 42.4375,21.09375 C 40.672788,21.424936 37.889437,20.621802 35.53125,20.34375 C 37.83716,20.359058 40.281614,20.928538 42.4375,20.34375 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient3023);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path2979"
+ d="M 42.40625,21.78125 L 42.59375,22.46875 C 40.604167,22.823591 38.614583,21.661518 36.625,21.125 C 38.552083,21.370176 40.479167,22.279933 42.40625,21.78125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient3025);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path2981"
+ d="M 42.8125,23.3125 L 43.125,23.90625 L 38.34375,22.5 L 42.8125,23.3125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient3027);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.29381445;color:black;fill:url(#radialGradient2204);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path2151"
+ sodipodi:cx="20.152544"
+ sodipodi:cy="33.636894"
+ sodipodi:rx="15.291184"
+ sodipodi:ry="3.9332814"
+ d="M 35.443728 33.636894 A 15.291184 3.9332814 0 1 1 4.8613596,33.636894 A 15.291184 3.9332814 0 1 1 35.443728 33.636894 z"
+ transform="matrix(0.685582,0,0,1.016961,37.70043,-16.20742)" />
+ <path
+ style="fill:url(#linearGradient2282);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 47,2.4634374 C 43.394074,2.6098452 39,5.4999962 37,9.999996 C 37.75,13.999996 43.30945,18.677658 48.5,18 C 53.262867,17.378179 56,15 60.8125,11.999996 C 66.33677,14.776589 69.3125,14.499996 69.3125,14.499996 C 67.875,9.562496 70.5,10.749996 69.5,5.9374963 C 65.8125,7.3749962 65.3125,7.9999962 60.707338,8.5167822 C 59.983847,7.9843592 57.3731,7.1905082 56.600453,6.6531882 C 57.021938,5.3710932 59.134111,4.39695 60.5,3.5 C 56.8125,2.6874999 55.002652,3.5116766 53,4.5 C 51.220837,3.5490546 49.282924,2.6190489 47.736133,2.4844206 C 47.492826,2.463244 47.240395,2.453677 47,2.4634374 z "
+ id="path2155"
+ sodipodi:nodetypes="ccscccccccsc" />
+ <path
+ style="opacity:0.31999996;color:black;fill:url(#linearGradient2208);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 69,6.7644023 C 68.886307,9.4171843 67.906752,12.10586 68.488647,13.812496 C 66.393236,13.535821 62.969814,12.770132 60.875,11.499996 L 62,8.8124962 C 63.737048,8.5383867 68.146276,7.2498454 69,6.7644023 z "
+ id="path2157"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="opacity:0.943299;color:black;fill:url(#linearGradient2210);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 58.81916,8.6207192 C 51.225094,6.5803052 45.249132,16.546053 37.702517,10.071565 C 39.345538,5.3560202 44.583731,2.2723946 48,2.9999962 C 50.206482,3.4699358 51.220737,3.831133 52.5,4.5 C 54.813306,5.709518 56.09728,7.0097332 58.81916,8.6207192 z "
+ id="path2159"
+ sodipodi:nodetypes="ccssc" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.95008469"
+ inkscape:original="M 47 2.46875 C 43.394074 2.6151579 39 5.5000002 37 10 C 37.75 14 43.30945 18.677658 48.5 18 C 53.262867 17.378179 56 15.000004 60.8125 12 C 66.33677 14.776593 69.3125 14.5 69.3125 14.5 C 67.875 9.5624998 70.5 10.75 69.5 5.9375 C 65.8125 7.375 65.323912 8.014464 60.71875 8.53125 C 59.995261 7.9988274 57.366397 7.19357 56.59375 6.65625 C 57.015236 5.374155 59.134111 4.39695 60.5 3.5 C 56.8125 2.6874999 55.002652 3.5116766 53 4.5 C 51.220837 3.5490546 49.296791 2.6346283 47.75 2.5 C 47.506692 2.4788235 47.240395 2.4589896 47 2.46875 z "
+ xlink:href="#path2155"
+ style="opacity:0.45899999;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3178);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2280"
+ inkscape:href="#path2155"
+ d="M 47.03125,3.40625 C 43.979015,3.5301769 39.980376,6.1081119 38.0625,10.09375 C 38.465505,11.692295 39.781188,13.606555 41.65625,15 C 43.635526,16.470891 46.101158,17.359364 48.375,17.0625 C 52.875855,16.474886 55.445956,14.221194 60.3125,11.1875 C 60.59772,11.012808 60.95378,11.000939 61.25,11.15625 C 63.939665,12.508122 65.967145,13.083089 67.3125,13.34375 C 67.951276,13.467512 67.908906,13.41879 68.21875,13.4375 C 67.956555,11.778112 68.057338,10.594787 68.34375,9.84375 C 68.618461,9.1233979 68.750878,8.4283719 68.65625,7.28125 C 66.146796,8.328522 64.823934,9.0185915 60.8125,9.46875 C 60.578078,9.4896819 60.344229,9.422868 60.15625,9.28125 C 60.052788,9.2051115 59.155633,8.8033455 58.3125,8.46875 C 57.469367,8.1341545 56.680841,7.8675114 56.0625,7.4375 C 55.718345,7.2036437 55.566378,6.7730715 55.6875,6.375 C 56.000817,5.4219389 56.742681,4.812386 57.5,4.28125 C 55.960926,4.3559777 54.702346,4.7041172 53.40625,5.34375 C 53.140423,5.4754712 52.828327,5.4754712 52.5625,5.34375 C 50.811166,4.407679 48.900613,3.5458058 47.65625,3.4375 C 47.421548,3.4170725 47.191099,3.3997599 47.03125,3.40625 z " />
+ <path
+ style="fill:#b15700;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 39.118897,13.570786 C 41.315353,16.204968 44.5,12.999996 48,12.499996 C 44.5,12.499996 41.432636,15.237591 38.211019,11.816439 L 39.118897,13.570786 z "
+ id="path2167"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:0.31443296;color:black;fill:url(#linearGradient2220);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 38.975322,12.535279 C 38.975322,12.535279 41.583678,17.267079 47,17.5 C 53.719191,17.793507 59,11.999996 59,11.999996 L 38.975322,12.535279 z "
+ id="path2173"
+ sodipodi:nodetypes="cscc" />
+ <path
+ style="fill:url(#linearGradient4067);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 49.674361,15.289672 L 57.5,18.5 C 59.429995,16.661712 57.601664,15.270631 57,14.4375 L 50.976581,14.019042 L 49.674361,15.289672 z "
+ id="path2175"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="opacity:1;color:black;fill:url(#linearGradient2228);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 47.874472,16.459575 L 52.03867,12.245759 L 53.406906,12.423808 L 47.874472,16.459575 z "
+ id="path2181"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:0.79381445;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 54.097533,4.5350723 C 55.002386,4.1238346 55.626758,4.0915896 57,4 C 55.728928,4.3746923 55.431949,4.5566723 54.549729,5.0491613 C 53.999276,5.3564443 53.599324,4.7614973 54.097533,4.5350723 z "
+ id="path2187"
+ sodipodi:nodetypes="ccss" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path2191"
+ d="M 40.102136,14.595387 C 42.006527,16.475972 43.685975,14.118691 46,12.999996 C 44.056095,13.119724 41.235256,16.597447 38.743125,12.842818 L 40.102136,14.595387 z "
+ style="opacity:0.74226804;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ id="g2193"
+ transform="matrix(0.790123,0,0,0.952165,33.92595,-8.933107)">
+ <path
+ id="path2195"
+ d="M 42.4375,20.34375 L 42.4375,21.09375 C 40.672788,21.424936 37.889437,20.621802 35.53125,20.34375 C 37.83716,20.359058 40.281614,20.928538 42.4375,20.34375 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient2234);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path2197"
+ d="M 42.40625,21.78125 L 42.59375,22.46875 C 40.604167,22.823591 38.614583,21.661518 36.625,21.125 C 38.552083,21.370176 40.479167,22.279933 42.40625,21.78125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient2236);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path2199"
+ d="M 42.8125,23.3125 L 43.125,23.90625 L 38.34375,22.5 L 42.8125,23.3125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient2238);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.9061048"
+ inkscape:original="M 50.96875 14.03125 L 49.6875 15.28125 L 57.5 18.5 C 59.429995 16.661712 57.601664 15.270631 57 14.4375 L 50.96875 14.03125 z "
+ xlink:href="#path2175"
+ style="opacity:0.34500002;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4075);stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4065"
+ inkscape:href="#path2175"
+ d="M 51.3125,14.96875 L 57.1875,17.375 C 57.255933,17.256126 57.418244,17.085431 57.4375,17 C 57.480827,16.807781 57.466062,16.650791 57.375,16.4375 C 57.234705,16.108892 56.834481,15.723099 56.5,15.3125 L 51.3125,14.96875 z " />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.29381445;color:black;fill:url(#radialGradient4129);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4077"
+ sodipodi:cx="20.152544"
+ sodipodi:cy="33.636894"
+ sodipodi:rx="15.291184"
+ sodipodi:ry="3.9332814"
+ d="M 35.443728 33.636894 A 15.291184 3.9332814 0 1 1 4.8613596,33.636894 A 15.291184 3.9332814 0 1 1 35.443728 33.636894 z"
+ transform="matrix(0.673036,0,0,1.109046,146.7614,-19.21317)" />
+ <path
+ style="fill:url(#linearGradient4316);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 155.50491,2.2134374 C 151.89899,2.3598452 148.5,5.7499962 146.5,10.249996 C 147.25,14.249996 152.08108,18.871617 157.27163,18.193959 C 162.0345,17.572138 163.63478,15.306655 167.95608,11.75211 C 173.1062,11.905411 175.4139,11.442101 174.625,15.551796 C 180.69341,12.15388 175.0396,8.639535 177,6 C 176.91363,6.074008 173,5 167.85092,8.2688962 C 167.12743,7.7364732 166.3731,7.1905082 165.60045,6.6531882 C 165.52194,5.1210932 166.94661,3.7094466 168,2.4999962 C 163,2.4999962 162,2.9999962 161.30985,3.9883196 C 159.53069,3.0373742 157.78784,2.3690489 156.24105,2.2344206 C 155.99774,2.213244 155.74531,2.203677 155.50491,2.2134374 z "
+ id="path4081"
+ sodipodi:nodetypes="ccscccccccsc" />
+ <path
+ style="opacity:0.943299;color:black;fill:url(#linearGradient4135);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 167.81916,8.6207192 C 160.22509,6.5803052 155.06163,16.858553 147.51502,10.384065 C 149.15804,5.6685202 152.91654,1.8604182 156.33281,2.5880199 C 158.53929,3.0579595 160.09483,3.6409212 161.3741,4.3097882 C 163.6874,5.5193062 165.09728,7.0097332 167.81916,8.6207192 z "
+ id="path4085"
+ sodipodi:nodetypes="ccssc" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.90026057"
+ inkscape:original="M 155.5 2.21875 C 151.89408 2.3651579 148.5 5.7500002 146.5 10.25 C 147.25 14.25 152.0907 18.865158 157.28125 18.1875 C 162.04411 17.56568 163.64745 15.304545 167.96875 11.75 C 173.11886 11.903301 175.4139 11.452805 174.625 15.5625 C 180.69341 12.164584 175.0396 8.639535 177 6 C 176.91363 6.074008 172.99283 5.0123538 167.84375 8.28125 C 167.12026 7.7488271 166.3664 7.19357 165.59375 6.65625 C 165.51524 5.124155 166.94661 3.7094504 168 2.5 C 163 2.5 162.00265 3.0116766 161.3125 4 C 159.53335 3.0490546 157.79679 2.3846283 156.25 2.25 C 156.0067 2.2288235 155.7404 2.2089896 155.5 2.21875 z "
+ xlink:href="#path4081"
+ style="opacity:0.45899999;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4324);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4314"
+ inkscape:href="#path4081"
+ d="M 155.53125,3.125 C 152.537,3.2465728 149.39806,6.1963288 147.46875,10.34375 C 147.85847,12.007106 149.06073,13.898766 150.78125,15.28125 C 152.58393,16.729755 154.85674,17.581465 157.15625,17.28125 C 159.41164,16.986795 160.83108,16.370085 162.28125,15.34375 C 163.73142,14.317415 165.21546,12.864566 167.40625,11.0625 C 167.57118,10.920147 167.78214,10.842427 168,10.84375 C 170.54487,10.919502 172.3845,10.795674 173.84375,11.34375 C 174.57337,11.617788 175.23131,12.185938 175.5,12.96875 C 175.58549,13.217826 175.47277,13.570462 175.5,13.84375 C 175.97253,13.423816 176.28928,13.011995 176.4375,12.65625 C 176.69255,12.044097 176.65114,11.446772 176.46875,10.71875 C 176.28636,9.9907279 175.96683,9.1904294 175.78125,8.3125 C 175.68253,7.8454704 175.66598,7.3346661 175.75,6.8125 C 175.36661,6.7946357 174.97635,6.7905809 174.40625,6.84375 C 172.89497,6.9846958 170.76252,7.4758532 168.3125,9.03125 C 168.00352,9.2240407 167.60883,9.2117066 167.3125,9 C 166.5888,8.4674225 165.85307,7.9343021 165.09375,7.40625 C 164.84999,7.2465327 164.69861,6.9787113 164.6875,6.6875 C 164.63321,5.6280515 165.08917,4.7153464 165.625,3.9375 C 165.72405,3.7937166 165.83249,3.6994005 165.9375,3.5625 C 165.00795,3.6234874 163.73767,3.6305217 163.28125,3.75 C 162.4703,3.9622845 162.33278,4.1129449 162.0625,4.5 C 161.80026,4.8886258 161.28369,5.010973 160.875,4.78125 C 159.15688,3.8629263 157.53737,3.2737391 156.1875,3.15625 C 155.95236,3.1357835 155.69533,3.1183383 155.53125,3.125 z " />
+ <path
+ sodipodi:type="arc"
+ style="color:black;fill:url(#radialGradient4139);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4141);stroke-width:0.9494763;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4089"
+ sodipodi:cx="12.25"
+ sodipodi:cy="19.5"
+ sodipodi:rx="2.75"
+ sodipodi:ry="3"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ transform="matrix(1.101332,0,0,1.007195,140.7516,-11.77008)" />
+ <path
+ sodipodi:type="arc"
+ style="color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4143);stroke-width:1.3265723;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4091"
+ sodipodi:cx="12.25"
+ sodipodi:cy="19.5"
+ sodipodi:rx="2.75"
+ sodipodi:ry="3"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ transform="matrix(0.788277,0,0,0.720875,144.5866,-6.186833)" />
+ <path
+ style="fill:#b15700;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 148.33987,13.349815 C 150.53632,15.983997 153.12029,13.125761 156.62182,12.350816 C 152.92791,12.439294 150.65361,15.060814 147.43199,11.639662 L 148.33987,13.349815 z "
+ id="path4093"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="color:black;fill:black;fill-opacity:0.40217393;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 155.26287,4.7495012 C 154.36375,4.3772652 153.30762,4.7175332 152.48513,5.0599352 C 155.63438,4.9566222 156.95826,9.8636492 156.95826,9.8636492 C 158.02814,7.6686612 157.13678,5.5253002 155.26287,4.7495012 z "
+ id="path4095"
+ sodipodi:nodetypes="ccsc" />
+ <path
+ sodipodi:type="arc"
+ style="color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:1.97624171;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4097"
+ sodipodi:cx="26"
+ sodipodi:cy="24.5"
+ sodipodi:rx="2"
+ sodipodi:ry="2"
+ d="M 28 24.5 A 2 2 0 1 1 24,24.5 A 2 2 0 1 1 28 24.5 z"
+ transform="matrix(0.504779,0,0,0.507247,140.3662,-4.913061)" />
+ <path
+ style="opacity:0.31443296;color:black;fill:url(#linearGradient4145);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 147.97532,12.535279 C 147.97532,12.535279 150.46252,17.663234 155.87884,17.896155 C 162.59803,18.189662 167.49336,11.189258 167.49336,11.189258 L 147.97532,12.535279 z "
+ id="path4099"
+ sodipodi:nodetypes="cscc" />
+ <path
+ style="fill:url(#linearGradient4147);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 158.67436,15.289672 L 162.58537,20.564137 C 165.51537,18.975849 165.18546,16.560303 164.2088,15.289672 L 159.97658,14.019042 L 158.67436,15.289672 z "
+ id="path4101"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;color:black;fill:url(#linearGradient4149);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4103"
+ sodipodi:cx="10.65625"
+ sodipodi:cy="15.65625"
+ sodipodi:rx="1.5625"
+ sodipodi:ry="0.875"
+ d="M 12.21875 15.65625 A 1.5625 0.875 0 1 1 9.09375,15.65625 A 1.5625 0.875 0 1 1 12.21875 15.65625 z"
+ transform="matrix(0.864603,0,0,1.293872,144.2866,-13.25719)" />
+ <path
+ sodipodi:nodetypes="ccsc"
+ id="path4105"
+ d="M 155.50083,4.5714542 C 154.60171,4.1992172 153.54557,4.5394852 152.72309,4.8818872 C 155.87233,4.7785742 157.19621,9.6856012 157.19621,9.6856012 C 158.26609,7.4906132 157.37474,5.3472522 155.50083,4.5714542 z "
+ style="color:black;fill:url(#radialGradient4151);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:1;color:black;fill:url(#linearGradient4153);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 156.87447,16.459575 L 161.03867,12.245759 L 162.40691,12.423808 L 156.87447,16.459575 z "
+ id="path4107"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:1;color:black;fill:url(#linearGradient4155);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 152.4279,5.7811442 C 149.23232,4.5191842 148.5,-0.52865893 148.5,-0.52865893 C 148.5,-0.52865893 149.23232,3.3236422 152.89392,4.7848592 C 150.76812,2.4836417 151.83056,1.6469647 152,-3.9252839e-06 C 152.10441,2.3629519 152.5,3.4999962 154.22541,5.1833732 C 153.33409,3.7209402 154.41149,2.1365821 154.5,0.99999605 C 154.66255,2.3696649 154.27745,4.7731032 155.2906,6.3124962 C 154.26693,5.9275472 153.27572,5.6397772 152.4279,5.7811442 z "
+ id="path4109"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ id="path4111"
+ d="M 154.65785,6.1180942 C 154.10012,4.8533702 155.19955,3.7223434 155.19955,3.7223434 C 155.19955,3.7223434 154.41515,4.8411272 155.16572,6.1282592 C 154.97882,5.0622622 155.29507,4.7377432 155.80646,4.3155992 C 155.33961,5.1409272 155.2031,5.4671402 155.59252,6.6189112 C 155.60987,5.8404302 155.9108,5.6138932 156.22379,5.1997792 C 155.94983,5.7646052 155.92353,6.6622362 155.93401,7.4999962 C 155.54776,7.0133312 155.20327,6.4988912 154.65785,6.1180942 z "
+ style="opacity:1;color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:0.79381445;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 162.90831,4.2506112 C 163.81316,3.8393735 164.43753,3.8071285 165.81077,3.7155389 C 164.5397,4.0902312 164.24272,4.2722112 163.3605,4.7647002 C 162.81005,5.0719832 162.4101,4.4770362 162.90831,4.2506112 z "
+ id="path4113"
+ sodipodi:nodetypes="ccss" />
+ <path
+ transform="matrix(1.528265,0,0,1.397683,135.4663,-19.44231)"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ sodipodi:ry="3"
+ sodipodi:rx="2.75"
+ sodipodi:cy="19.5"
+ sodipodi:cx="12.25"
+ id="path4115"
+ style="opacity:0.29896904;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4157);stroke-width:0.68422097;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path4117"
+ d="M 149.14633,14.41861 C 151.05072,16.299195 152.1191,14.303444 154.43312,13.184749 C 152.48922,13.304477 150.41203,16.243893 148.00829,12.666041 L 149.14633,14.41861 z "
+ style="opacity:0.74226804;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ id="g4119"
+ transform="matrix(0.673036,0,0,-0.671463,146.5862,23.16008)">
+ <path
+ id="path4121"
+ d="M 42.4375,20.34375 L 42.4375,21.09375 C 40.672788,21.424936 37.889437,20.621802 35.53125,20.34375 C 37.83716,20.359058 40.281614,20.928538 42.4375,20.34375 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient4159);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path4123"
+ d="M 42.40625,21.78125 L 42.59375,22.46875 C 40.604167,22.823591 38.614583,21.661518 36.625,21.125 C 38.552083,21.370176 40.479167,22.279933 42.40625,21.78125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient4161);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path4125"
+ d="M 42.8125,23.3125 L 43.125,23.90625 L 38.34375,22.5 L 42.8125,23.3125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient4163);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.91494405"
+ inkscape:original="M 15.96875 14.03125 L 14.6875 15.28125 L 18.59375 20.5625 C 21.523745 18.974212 21.195414 16.551881 20.21875 15.28125 L 15.96875 14.03125 z "
+ xlink:href="#path2190"
+ style="opacity:0.34536079;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4165);stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4127"
+ inkscape:href="#path2190"
+ d="M 16.21875,15.0625 L 15.90625,15.375 L 18.78125,19.25 C 19.477169,18.705623 19.882272,18.170019 19.96875,17.65625 C 20.069704,17.056479 19.850776,16.477809 19.5625,16.03125 L 16.21875,15.0625 z "
+ transform="translate(144,0)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.29381445;color:black;fill:url(#radialGradient4217);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4167"
+ sodipodi:cx="20.152544"
+ sodipodi:cy="33.636894"
+ sodipodi:rx="15.291184"
+ sodipodi:ry="3.9332814"
+ d="M 35.443728 33.636894 A 15.291184 3.9332814 0 1 1 4.8613596,33.636894 A 15.291184 3.9332814 0 1 1 35.443728 33.636894 z"
+ transform="matrix(0.629968,0,0,1.194637,111.7447,-21.88272)" />
+ <path
+ style="fill:url(#linearGradient4288);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 120.39209,1.4667825 C 117.01691,1.6244893 113.37202,5.0069812 111.5,9.8542692 C 112.20201,14.162969 116.72395,19.141263 121.58236,18.411307 C 126.04045,17.741497 128.51545,15.568192 132.56023,11.739325 L 135,12.4375 L 135,7 L 132.46179,7.9872942 C 131.7846,7.4137812 130.10142,6.5586652 129.37822,5.9798772 C 129.30472,4.3295432 130.01401,2.8027894 131,1.5 C 128,-0.5 127,1 125.52202,2.7241777 C 123.85671,1.699843 122.52894,1.6344033 121.08112,1.4893851 C 120.85339,1.4665741 120.61711,1.4562688 120.39209,1.4667825 z "
+ id="path4169"
+ sodipodi:nodetypes="ccscccccccsc" />
+ <path
+ style="opacity:0.943299;color:black;fill:url(#linearGradient4223);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 131.45495,8.0992522 C 124.34682,5.9013692 119.51377,16.972841 112.45007,9.9986852 C 113.98795,4.9192172 118.13044,1.2609961 121.3281,2.0447504 C 123.39339,2.5509576 124.2834,2.4014386 125.4808,3.1219254 C 127.64608,4.4247882 128.90724,6.3639392 131.45495,8.0992522 z "
+ id="path4173"
+ sodipodi:nodetypes="ccssc" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.97577339"
+ inkscape:original="M 129.09375 0.59375 C 127.47759 0.25269583 126.63974 1.4256167 125.53125 2.71875 C 123.86594 1.6944154 122.54157 1.6450182 121.09375 1.5 C 120.86602 1.477189 120.63127 1.4582363 120.40625 1.46875 C 117.03107 1.6264568 113.37202 4.996462 111.5 9.84375 C 112.20201 14.15245 116.73534 19.136206 121.59375 18.40625 C 126.05184 17.736441 128.51772 15.578867 132.5625 11.75 L 135 12.4375 L 135 7 L 132.46875 8 C 131.79156 7.426487 130.0982 6.547538 129.375 5.96875 C 129.3015 4.3184162 130.01401 2.8027894 131 1.5 C 130.25 1 129.63247 0.70743472 129.09375 0.59375 z "
+ xlink:href="#path4169"
+ style="opacity:0.45899999;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4296);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4286"
+ inkscape:href="#path4169"
+ d="M 128.90625,1.5625 C 128.35262,1.4456695 128.11619,1.5146346 127.71875,1.8125 C 127.32131,2.1103654 126.85131,2.6787349 126.28125,3.34375 C 125.97534,3.7146058 125.44492,3.80743 125.03125,3.5625 C 123.55066,2.6517866 122.48467,2.6174594 121,2.46875 C 120.78511,2.4472248 120.5763,2.4310146 120.4375,2.4375 C 117.73989,2.563547 114.37101,5.490781 112.5625,9.90625 C 112.9232,11.739112 114.04758,13.822696 115.65625,15.3125 C 117.32852,16.861202 119.37505,17.747374 121.4375,17.4375 C 125.64341,16.80558 127.87235,14.849815 131.90625,11.03125 C 132.10979,10.845849 132.38218,10.755054 132.65625,10.78125 C 133.43284,10.864224 134.12673,11.172655 134.59375,11.6875 C 135.06077,12.202345 135.24566,12.835896 135.28125,13.46875 C 135.29788,13.76445 135.22118,14.074735 135.1875,14.375 C 136.00222,13.262269 136.40625,11.874918 136.40625,10.3125 C 136.40625,8.8662002 135.98811,7.3840257 135.40625,6 C 135.39798,6.0569517 135.41583,6.0996104 135.40625,6.15625 C 135.29414,6.8191267 135.07765,7.5013881 134.59375,8.0625 C 134.10985,8.6236119 133.3282,8.9730522 132.46875,8.96875 C 132.24129,8.9709042 132.02022,8.8935305 131.84375,8.75 C 131.62365,8.5635943 131.03396,8.1751051 130.4375,7.8125 C 129.84104,7.4498949 129.21354,7.0897308 128.75,6.71875 C 128.53838,6.5389814 128.41336,6.277577 128.40625,6 C 128.33785,4.4642657 128.88877,3.1192182 129.625,1.90625 C 129.39134,1.7993854 129.06953,1.5969563 128.90625,1.5625 z " />
+ <path
+ style="fill:#b15700;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 113.22213,13.193316 C 115.27804,16.030791 118.72397,13.038587 122,12.5 C 118.72397,12.5 115.38782,15.036362 112.37235,11.351182 L 113.22213,13.193316 z "
+ id="path4181"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:0.31443296;color:black;fill:url(#linearGradient4233);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 112.88092,12.315918 C 112.88092,12.315918 115.20896,17.839623 120.27869,18.09052 C 126.56792,18.406678 131.62421,11.739325 131.62421,11.739325 L 112.88092,12.315918 z "
+ id="path4187"
+ sodipodi:nodetypes="cscc" />
+ <path
+ style="fill:url(#linearGradient3229);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 122.98344,15.299161 C 122.98166,16.992908 122.36979,18.58918 121.49972,20.5 C 123.49972,21 127.41388,18.868692 126.49972,17.5 L 124.20233,13.93047 L 122.98344,15.299161 z "
+ id="path4189"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="opacity:1;color:black;fill:url(#linearGradient4241);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 121.32131,16.539013 L 125.21904,11.999996 L 126.49972,12.191786 L 121.32131,16.539013 z "
+ id="path4195"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:0.79381445;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 126.71235,3.3532967 C 127.5,2.5 128,2 129,2 C 128,2.5 127.5,3 127.13561,3.9070605 C 126.90733,4.4753098 126.3554,3.7399995 126.71235,3.3532967 z "
+ id="path4201"
+ sodipodi:nodetypes="ccss" />
+ <g
+ id="g4274"
+ transform="translate(47.10977,-6.001675)">
+ <path
+ transform="matrix(1.101332,0,0,1.007195,58.75165,-5.770077)"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ sodipodi:ry="3"
+ sodipodi:rx="2.75"
+ sodipodi:cy="19.5"
+ sodipodi:cx="12.25"
+ id="path4177"
+ style="color:black;fill:url(#radialGradient4227);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4229);stroke-width:0.9494763;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.788277,0,0,0.720875,62.58658,-0.186829)"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ sodipodi:ry="3"
+ sodipodi:rx="2.75"
+ sodipodi:cy="19.5"
+ sodipodi:cx="12.25"
+ id="path4179"
+ style="color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4231);stroke-width:1.3265723;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccsc"
+ id="path4183"
+ d="M 73.262873,10.749505 C 72.363755,10.377269 71.307619,10.717537 70.485134,11.059939 C 73.634378,10.956626 74.958258,15.863653 74.958258,15.863653 C 76.028136,13.668665 75.136783,11.525304 73.262873,10.749505 z "
+ style="color:black;fill:black;fill-opacity:0.40217393;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ transform="matrix(0.504779,0,0,0.507247,58.36619,1.086943)"
+ d="M 28 24.5 A 2 2 0 1 1 24,24.5 A 2 2 0 1 1 28 24.5 z"
+ sodipodi:ry="2"
+ sodipodi:rx="2"
+ sodipodi:cy="24.5"
+ sodipodi:cx="26"
+ id="path4185"
+ style="color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:1.97624171;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.864603,0,0,1.293872,62.28657,-7.257184)"
+ d="M 12.21875 15.65625 A 1.5625 0.875 0 1 1 9.09375,15.65625 A 1.5625 0.875 0 1 1 12.21875 15.65625 z"
+ sodipodi:ry="0.875"
+ sodipodi:rx="1.5625"
+ sodipodi:cy="15.65625"
+ sodipodi:cx="10.65625"
+ id="path4191"
+ style="opacity:1;color:black;fill:url(#linearGradient4237);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ style="color:black;fill:url(#radialGradient4239);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 73.500826,10.571458 C 72.601708,10.199221 71.545573,10.539489 70.723088,10.881891 C 73.872331,10.778578 75.196211,15.685605 75.196211,15.685605 C 76.266089,13.490617 75.374737,11.347256 73.500826,10.571458 z "
+ id="path4193"
+ sodipodi:nodetypes="ccsc" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ id="path4197"
+ d="M 70.427898,11.781148 C 67.23232,10.519188 66.513864,6.001675 66.513864,6.001675 C 66.513864,6.001675 67.23232,9.323646 70.89392,10.784863 C 68.768121,8.4836455 69.402486,7.6911629 69.571922,6.0441942 C 69.676327,8.40715 70.5,9.5 72.225411,11.183377 C 71.334093,9.720944 72.381156,8.136586 72.46967,7 C 72.632218,8.3696688 72.277446,10.773107 73.290604,12.3125 C 72.266929,11.927551 71.275723,11.639781 70.427898,11.781148 z "
+ style="opacity:1;color:black;fill:url(#linearGradient4243);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:1;color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 72.657852,12.118098 C 72.100118,10.853374 73.199546,9.7223472 73.199546,9.7223472 C 73.199546,9.7223472 72.415146,10.841131 73.165719,12.128263 C 72.97882,11.062266 73.295074,10.737747 73.80646,10.315603 C 73.339609,11.140931 73.203095,11.467144 73.592525,12.618915 C 73.609867,11.840434 73.910803,11.613897 74.22379,11.199783 C 73.949828,11.764609 73.923533,12.66224 73.934007,13.5 C 73.54776,13.013335 73.203273,12.498895 72.657852,12.118098 z "
+ id="path4199"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.29896904;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4245);stroke-width:0.68422097;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4203"
+ sodipodi:cx="12.25"
+ sodipodi:cy="19.5"
+ sodipodi:rx="2.75"
+ sodipodi:ry="3"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ transform="matrix(1.528265,0,0,1.397683,53.46625,-13.44231)" />
+ </g>
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path4205"
+ d="M 113.97699,14.344596 C 115.75952,16.370315 118.33405,14.20503 120.5,13 C 118.68048,13.128968 115.1617,16.310745 112.91178,12.456772 L 113.97699,14.344596 z "
+ style="opacity:0.74226804;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ id="g4207"
+ transform="matrix(0.329213,0,0,0.842105,121.8027,-7.631574)">
+ <path
+ id="path4209"
+ d="M 42.4375,20.34375 L 42.4375,21.09375 C 40.672788,21.424936 37.889437,20.621802 35.53125,20.34375 C 37.83716,20.359058 40.281614,20.928538 42.4375,20.34375 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient4247);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path4211"
+ d="M 42.40625,21.78125 L 42.59375,22.46875 C 40.604167,22.823591 38.614583,21.661518 36.625,21.125 C 38.552083,21.370176 40.479167,22.279933 42.40625,21.78125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient4249);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path4213"
+ d="M 42.8125,23.3125 L 43.125,23.90625 L 38.34375,22.5 L 42.8125,23.3125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient4251);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.81122816"
+ inkscape:original="M 15.96875 14.03125 L 14.6875 15.28125 L 18.59375 20.5625 C 21.523745 18.974212 21.195414 16.551881 20.21875 15.28125 L 15.96875 14.03125 z "
+ xlink:href="#path2190"
+ style="opacity:0.34536079;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3146);stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path3136"
+ inkscape:href="#path2190"
+ d="M 16.1875,14.9375 L 15.75,15.375 L 18.75,19.40625 C 19.543133,18.82201 19.967269,18.222021 20.0625,17.65625 C 20.167862,17.030288 19.954643,16.434316 19.65625,15.96875 L 16.1875,14.9375 z " />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.29381445;color:black;fill:url(#radialGradient3298);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3248"
+ sodipodi:cx="20.152544"
+ sodipodi:cy="33.636894"
+ sodipodi:rx="15.291184"
+ sodipodi:ry="3.9332814"
+ d="M 35.443728 33.636894 A 15.291184 3.9332814 0 1 1 4.8613596,33.636894 A 15.291184 3.9332814 0 1 1 35.443728 33.636894 z"
+ transform="matrix(0.685582,0,0,1.016961,73.70043,-16.20742)" />
+ <path
+ style="fill:url(#linearGradient3338);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 83,2.4634374 C 79.394074,2.6098452 75.4375,5.4999962 73.4375,9.999996 C 74.1875,13.999996 79.081082,18.871617 84.271632,18.193959 C 89.034499,17.572138 92.491205,15.554541 96.8125,11.999996 C 102.33677,14.776589 104.5625,15.437496 104.5625,15.437496 C 102.625,10.187496 105.625,10.062496 104.4375,5.5624963 C 100.5625,6.6874962 100.375,7.4374962 96.707338,8.5167822 C 95.983847,7.9843592 93.3731,7.1905082 92.600453,6.6531882 C 93.021938,5.3710932 94.196611,3.6469462 95.5625,2.7499962 C 91.875,1.9374961 91.002652,3.0116728 89,3.9999962 C 87.220837,3.0490508 85.282924,2.6190489 83.736133,2.4844206 C 83.492826,2.463244 83.240395,2.453677 83,2.4634374 z "
+ id="path3250"
+ sodipodi:nodetypes="ccscccccccsc" />
+ <path
+ style="opacity:0.31999996;color:black;fill:url(#linearGradient3302);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 104.0625,6.2019023 C 103.94881,8.8546843 103.03175,12.73086 103.61365,14.437496 C 101.45574,13.910821 99.094814,12.520132 96.875,11.499996 L 97.75,8.7499962 C 99.487048,8.4758867 102.45878,6.5623454 104.0625,6.2019023 z "
+ id="path3252"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="opacity:0.943299;color:black;fill:url(#linearGradient3304);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 94.81916,8.6207192 C 87.225094,6.5803052 81.436632,16.421053 73.890017,9.946565 C 75.533038,5.2310202 80.583731,2.2723946 84,2.9999962 C 86.206482,3.4699358 87.157334,3.3311292 88.436597,3.9999962 C 90.749903,5.2095142 92.09728,7.0097332 94.81916,8.6207192 z "
+ id="path3254"
+ sodipodi:nodetypes="ccssc" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1.0049475"
+ inkscape:original="M 83 2.46875 C 79.394074 2.6151579 75.4375 5.5000002 73.4375 10 C 74.1875 14 79.0907 18.865158 84.28125 18.1875 C 89.04412 17.56568 92.491205 15.554545 96.8125 12 C 102.33677 14.776593 104.5625 15.4375 104.5625 15.4375 C 102.625 10.1875 105.625 10.0625 104.4375 5.5625 C 100.5625 6.6875 100.38641 7.451964 96.71875 8.53125 C 95.995261 7.9988274 93.366397 7.19357 92.59375 6.65625 C 93.015232 5.374155 94.196611 3.64695 95.5625 2.75 C 91.875 1.9374999 91.002652 3.0116766 89 4 C 87.220837 3.0490546 85.296791 2.6346283 83.75 2.5 C 83.506696 2.4788235 83.240395 2.4589896 83 2.46875 z "
+ xlink:href="#path3250"
+ style="opacity:0.45899999;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3346);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path3336"
+ inkscape:href="#path3250"
+ d="M 83.03125,3.46875 C 80.021486,3.5909525 76.445164,6.0810297 74.53125,10.0625 C 74.916431,11.700838 76.120365,13.633985 77.84375,15.0625 C 79.649834,16.559564 81.907376,17.481104 84.15625,17.1875 C 88.705026,16.593631 91.925073,14.724872 96.1875,11.21875 C 96.488227,10.976389 96.901236,10.9278 97.25,11.09375 C 101.54308,13.251525 102.42577,13.484331 103.1875,13.75 C 102.93107,12.17418 102.98435,10.861501 103.25,9.9375 C 103.53327,8.9522052 103.6709,8.1193798 103.5625,6.96875 C 102.59676,7.3096073 101.62049,7.645786 100.9375,7.96875 C 99.953926,8.4338503 98.891295,8.9434467 97,9.5 C 96.6999,9.5867268 96.376536,9.5289831 96.125,9.34375 C 96.036453,9.2785873 95.155569,8.8658203 94.3125,8.53125 C 93.469431,8.1966797 92.662989,7.9080787 92.03125,7.46875 C 91.663142,7.2239137 91.498249,6.7672853 91.625,6.34375 C 91.939075,5.3883742 92.594152,4.383559 93.375,3.46875 C 92.800317,3.4619893 92.327728,3.5342623 91.9375,3.65625 C 91.190506,3.8897647 90.516466,4.3737726 89.4375,4.90625 C 89.147616,5.0404437 88.811202,5.0288432 88.53125,4.875 C 86.910677,4.0088194 85.097278,3.6254229 83.65625,3.5 C 83.422051,3.479616 83.186447,3.4624488 83.03125,3.46875 z " />
+ <path
+ sodipodi:type="arc"
+ style="color:black;fill:url(#radialGradient3308);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3310);stroke-width:0.9494763;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3258"
+ sodipodi:cx="12.25"
+ sodipodi:cy="19.5"
+ sodipodi:rx="2.75"
+ sodipodi:ry="3"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ transform="matrix(1.101332,0,0,1.007195,67.75165,-11.77008)" />
+ <path
+ sodipodi:type="arc"
+ style="color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3312);stroke-width:1.3265723;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3260"
+ sodipodi:cx="12.25"
+ sodipodi:cy="19.5"
+ sodipodi:rx="2.75"
+ sodipodi:ry="3"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ transform="matrix(0.788277,0,0,0.720875,71.58658,-6.186833)" />
+ <path
+ style="fill:#b15700;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 75.339868,13.349815 C 77.536324,15.983997 80.5,12.999996 84,12.499996 C 80.5,12.499996 77.653607,15.060814 74.43199,11.639662 L 75.339868,13.349815 z "
+ id="path3262"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="color:black;fill:black;fill-opacity:0.40217393;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 82.262873,4.7495012 C 81.363755,4.3772652 80.307619,4.7175332 79.485134,5.0599352 C 82.634378,4.9566222 83.958258,9.8636492 83.958258,9.8636492 C 85.028136,7.6686612 84.136783,5.5253002 82.262873,4.7495012 z "
+ id="path3264"
+ sodipodi:nodetypes="ccsc" />
+ <path
+ sodipodi:type="arc"
+ style="color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:1.97624171;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3266"
+ sodipodi:cx="26"
+ sodipodi:cy="24.5"
+ sodipodi:rx="2"
+ sodipodi:ry="2"
+ d="M 28 24.5 A 2 2 0 1 1 24,24.5 A 2 2 0 1 1 28 24.5 z"
+ transform="matrix(0.504779,0,0,0.507247,67.36619,-4.913061)" />
+ <path
+ style="opacity:0.31443296;color:black;fill:url(#linearGradient3314);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 74.975322,12.535279 C 74.975322,12.535279 77.462519,17.663234 82.878841,17.896155 C 89.598032,18.189662 95,11.999996 95,11.999996 L 74.975322,12.535279 z "
+ id="path3268"
+ sodipodi:nodetypes="cscc" />
+ <path
+ style="fill:url(#linearGradient3350);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 85.674361,15.289672 L 91.50158,19.711961 C 93.431575,17.873673 93.101664,15.770627 92.5,14.937496 L 86.976581,14.019042 L 85.674361,15.289672 z "
+ id="path3270"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;color:black;fill:url(#linearGradient3318);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3272"
+ sodipodi:cx="10.65625"
+ sodipodi:cy="15.65625"
+ sodipodi:rx="1.5625"
+ sodipodi:ry="0.875"
+ d="M 12.21875 15.65625 A 1.5625 0.875 0 1 1 9.09375,15.65625 A 1.5625 0.875 0 1 1 12.21875 15.65625 z"
+ transform="matrix(0.864603,0,0,1.293872,71.28657,-13.25719)" />
+ <path
+ sodipodi:nodetypes="ccsc"
+ id="path3274"
+ d="M 82.500826,4.5714542 C 81.601708,4.1992172 80.545573,4.5394852 79.723088,4.8818872 C 82.872331,4.7785742 84.196211,9.6856012 84.196211,9.6856012 C 85.266089,7.4906132 84.374737,5.3472522 82.500826,4.5714542 z "
+ style="color:black;fill:url(#radialGradient3320);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:1;color:black;fill:url(#linearGradient3322);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 83.874472,16.459575 L 88.03867,12.245759 L 89.406906,12.423808 L 83.874472,16.459575 z "
+ id="path3276"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:1;color:black;fill:url(#linearGradient3324);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 79.427898,5.7811442 C 76.23232,4.5191842 76,-0.52865893 76,-0.52865893 C 76,-0.52865893 76.23232,3.3236422 79.89392,4.7848592 C 77.768121,2.4836417 79.330564,1.6469648 79.5,-3.8252839e-06 C 79.604405,2.362952 79.5,3.4999962 81.225411,5.1833732 C 80.334093,3.7209402 81.911486,2.1365822 82,0.99999615 C 82.162548,2.369665 81.277446,4.7731032 82.290604,6.3124962 C 81.266929,5.9275472 80.275723,5.6397772 79.427898,5.7811442 z "
+ id="path3278"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ id="path3280"
+ d="M 81.657852,6.1180942 C 81.100118,4.8533702 82.199546,3.7223434 82.199546,3.7223434 C 82.199546,3.7223434 81.415146,4.8411272 82.165719,6.1282592 C 81.97882,5.0622622 82.295074,4.7377432 82.80646,4.3155992 C 82.339609,5.1409272 82.203095,5.4671402 82.592525,6.6189112 C 82.609867,5.8404302 82.910803,5.6138932 83.22379,5.1997792 C 82.949828,5.7646052 82.923533,6.6622362 82.934007,7.4999962 C 82.54776,7.0133312 82.203273,6.4988912 81.657852,6.1180942 z "
+ style="opacity:1;color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:0.79381445;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 90.097533,4.5350723 C 91.002386,4.1238346 91.626758,4.0915896 93,4 C 91.728928,4.3746923 91.431949,4.5566723 90.549729,5.0491613 C 89.999276,5.3564443 89.599324,4.7614973 90.097533,4.5350723 z "
+ id="path3282"
+ sodipodi:nodetypes="ccss" />
+ <path
+ transform="matrix(1.528265,0,0,1.397683,62.46625,-19.44231)"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ sodipodi:ry="3"
+ sodipodi:rx="2.75"
+ sodipodi:cy="19.5"
+ sodipodi:cx="12.25"
+ id="path3284"
+ style="opacity:0.29896904;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3326);stroke-width:0.68422097;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path3286"
+ d="M 76.14633,14.41861 C 78.050721,16.299195 79.685975,14.118691 82,12.999996 C 80.056095,13.119724 77.412033,16.243893 75.00829,12.666041 L 76.14633,14.41861 z "
+ style="opacity:0.74226804;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ id="g3288"
+ transform="matrix(0.790123,0,0,0.952165,69.92595,-8.933107)">
+ <path
+ id="path3290"
+ d="M 42.4375,20.34375 L 42.4375,21.09375 C 40.672788,21.424936 37.889437,20.621802 35.53125,20.34375 C 37.83716,20.359058 40.281614,20.928538 42.4375,20.34375 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient3328);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path3292"
+ d="M 42.40625,21.78125 L 42.59375,22.46875 C 40.604167,22.823591 38.614583,21.661518 36.625,21.125 C 38.552083,21.370176 40.479167,22.279933 42.40625,21.78125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient3330);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path3294"
+ d="M 42.8125,23.3125 L 43.125,23.90625 L 38.34375,22.5 L 42.8125,23.3125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient3332);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.90809005"
+ inkscape:original="M 86.96875 14.03125 L 85.6875 15.28125 L 91.5 19.71875 C 93.429996 17.880461 93.101664 15.770631 92.5 14.9375 L 86.96875 14.03125 z "
+ xlink:href="#path3270"
+ style="opacity:0.34500002;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3358);stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path3348"
+ inkscape:href="#path3270"
+ d="M 87.25,15 L 87.0625,15.1875 L 91.34375,18.4375 C 91.74994,17.8779 91.98492,17.350328 92.03125,16.875 C 92.081926,16.355082 91.932947,16.008676 91.8125,15.75 L 87.25,15 z " />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.29381445;color:black;fill:url(#radialGradient3410);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3360"
+ sodipodi:cx="20.152544"
+ sodipodi:cy="33.636894"
+ sodipodi:rx="15.291184"
+ sodipodi:ry="3.9332814"
+ d="M 35.443728 33.636894 A 15.291184 3.9332814 0 1 1 4.8613596,33.636894 A 15.291184 3.9332814 0 1 1 35.443728 33.636894 z"
+ transform="matrix(0.685582,0,0,1.016961,217.7629,-16.20742)" />
+ <path
+ style="fill:url(#linearGradient3412);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 227.0625,2.4634374 C 223.45657,2.6098452 219.5,5.4999962 217.5,9.999996 C 218.25,13.999996 223.14358,18.871617 228.33413,18.193959 C 233.097,17.572138 236.5537,15.554541 240.875,11.999996 C 246.39927,14.776589 248.625,15.437496 248.625,15.437496 C 246.6875,10.187496 249.6875,10.062496 248.5,5.5624963 C 244.625,6.6874962 244.4375,7.4374962 240.76984,8.5167822 C 240.04635,7.9843592 237.4356,7.1905082 236.66295,6.6531882 C 237.08444,5.3710932 238.25911,3.6469462 239.625,2.7499962 C 235.9375,1.9374961 235.06515,3.0116728 233.0625,3.9999962 C 231.28334,3.0490508 229.34542,2.6190489 227.79863,2.4844206 C 227.55533,2.463244 227.3029,2.453677 227.0625,2.4634374 z "
+ id="path3362"
+ sodipodi:nodetypes="ccscccccccsc" />
+ <path
+ style="opacity:0.943299;color:black;fill:url(#linearGradient3416);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 238.88166,8.6207192 C 231.28759,6.5803052 225.49913,16.421053 217.95252,9.946565 C 219.59554,5.2310202 224.64623,2.2723946 228.0625,2.9999962 C 230.26898,3.4699358 231.21983,3.3311292 232.4991,3.9999962 C 234.8124,5.2095142 236.15978,7.0097332 238.88166,8.6207192 z "
+ id="path3366"
+ sodipodi:nodetypes="ccssc" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1.0049475"
+ inkscape:original="M 83 2.46875 C 79.394074 2.6151579 75.4375 5.5000002 73.4375 10 C 74.1875 14 79.0907 18.865158 84.28125 18.1875 C 89.04412 17.56568 92.491205 15.554545 96.8125 12 C 102.33677 14.776593 104.5625 15.4375 104.5625 15.4375 C 102.625 10.1875 105.625 10.0625 104.4375 5.5625 C 100.5625 6.6875 100.38641 7.451964 96.71875 8.53125 C 95.995261 7.9988274 93.366397 7.19357 92.59375 6.65625 C 93.015232 5.374155 94.196611 3.64695 95.5625 2.75 C 91.875 1.9374999 91.002652 3.0116766 89 4 C 87.220837 3.0490546 85.296791 2.6346283 83.75 2.5 C 83.506696 2.4788235 83.240395 2.4589896 83 2.46875 z "
+ xlink:href="#path3250"
+ style="opacity:0.45899999;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3418);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path3368"
+ inkscape:href="#path3250"
+ d="M 83.03125,3.46875 C 80.021486,3.5909525 76.445164,6.0810297 74.53125,10.0625 C 74.916431,11.700838 76.120365,13.633985 77.84375,15.0625 C 79.649834,16.559564 81.907376,17.481104 84.15625,17.1875 C 88.705026,16.593631 91.925073,14.724872 96.1875,11.21875 C 96.488227,10.976389 96.901236,10.9278 97.25,11.09375 C 101.54308,13.251525 102.42577,13.484331 103.1875,13.75 C 102.93107,12.17418 102.98435,10.861501 103.25,9.9375 C 103.53327,8.9522052 103.6709,8.1193798 103.5625,6.96875 C 102.59676,7.3096073 101.62049,7.645786 100.9375,7.96875 C 99.953926,8.4338503 98.891295,8.9434467 97,9.5 C 96.6999,9.5867268 96.376536,9.5289831 96.125,9.34375 C 96.036453,9.2785873 95.155569,8.8658203 94.3125,8.53125 C 93.469431,8.1966797 92.662989,7.9080787 92.03125,7.46875 C 91.663142,7.2239137 91.498249,6.7672853 91.625,6.34375 C 91.939075,5.3883742 92.594152,4.383559 93.375,3.46875 C 92.800317,3.4619893 92.327728,3.5342623 91.9375,3.65625 C 91.190506,3.8897647 90.516466,4.3737726 89.4375,4.90625 C 89.147616,5.0404437 88.811202,5.0288432 88.53125,4.875 C 86.910677,4.0088194 85.097278,3.6254229 83.65625,3.5 C 83.422051,3.479616 83.186447,3.4624488 83.03125,3.46875 z "
+ transform="translate(144.0625,0)" />
+ <path
+ sodipodi:type="arc"
+ style="color:black;fill:url(#radialGradient3420);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3422);stroke-width:0.9494763;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3370"
+ sodipodi:cx="12.25"
+ sodipodi:cy="19.5"
+ sodipodi:rx="2.75"
+ sodipodi:ry="3"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ transform="matrix(1.101332,0,0,1.007195,211.8141,-11.77008)" />
+ <path
+ sodipodi:type="arc"
+ style="color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3424);stroke-width:1.3265723;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3372"
+ sodipodi:cx="12.25"
+ sodipodi:cy="19.5"
+ sodipodi:rx="2.75"
+ sodipodi:ry="3"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ transform="matrix(0.788277,0,0,0.720875,215.6491,-6.186833)" />
+ <path
+ style="fill:#b15700;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 219.40237,13.349815 C 221.59882,15.983997 224.5625,12.999996 228.0625,12.499996 C 224.5625,12.499996 221.71611,15.060814 218.49449,11.639662 L 219.40237,13.349815 z "
+ id="path3374"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="color:black;fill:black;fill-opacity:0.40217393;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 226.32537,4.7495012 C 225.42625,4.3772652 224.37012,4.7175332 223.54763,5.0599352 C 226.69688,4.9566222 228.02076,9.8636492 228.02076,9.8636492 C 229.09064,7.6686612 228.19928,5.5253002 226.32537,4.7495012 z "
+ id="path3376"
+ sodipodi:nodetypes="ccsc" />
+ <path
+ sodipodi:type="arc"
+ style="color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:1.97624171;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3378"
+ sodipodi:cx="26"
+ sodipodi:cy="24.5"
+ sodipodi:rx="2"
+ sodipodi:ry="2"
+ d="M 28 24.5 A 2 2 0 1 1 24,24.5 A 2 2 0 1 1 28 24.5 z"
+ transform="matrix(0.504779,0,0,0.507247,211.4287,-4.913061)" />
+ <path
+ style="opacity:0.31443296;color:black;fill:url(#linearGradient3426);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 219.03782,12.535279 C 219.03782,12.535279 221.52502,17.663234 226.94134,17.896155 C 233.66053,18.189662 239.0625,11.999996 239.0625,11.999996 L 219.03782,12.535279 z "
+ id="path3380"
+ sodipodi:nodetypes="cscc" />
+ <path
+ style="fill:url(#linearGradient3428);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 229.73686,15.289672 L 235.56408,19.711961 C 237.49408,17.873673 237.16416,15.770627 236.5625,14.937496 L 231.03908,14.019042 L 229.73686,15.289672 z "
+ id="path3382"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;color:black;fill:url(#linearGradient3430);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3384"
+ sodipodi:cx="10.65625"
+ sodipodi:cy="15.65625"
+ sodipodi:rx="1.5625"
+ sodipodi:ry="0.875"
+ d="M 12.21875 15.65625 A 1.5625 0.875 0 1 1 9.09375,15.65625 A 1.5625 0.875 0 1 1 12.21875 15.65625 z"
+ transform="matrix(0.864603,0,0,1.293872,215.3491,-13.25719)" />
+ <path
+ sodipodi:nodetypes="ccsc"
+ id="path3386"
+ d="M 226.56333,4.5714542 C 225.66421,4.1992172 224.60807,4.5394852 223.78559,4.8818872 C 226.93483,4.7785742 228.25871,9.6856012 228.25871,9.6856012 C 229.32859,7.4906132 228.43724,5.3472522 226.56333,4.5714542 z "
+ style="color:black;fill:url(#radialGradient3432);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:1;color:black;fill:url(#linearGradient3434);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 227.93697,16.459575 L 232.10117,12.245759 L 233.46941,12.423808 L 227.93697,16.459575 z "
+ id="path3388"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:1;color:black;fill:url(#linearGradient3436);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 223.4904,5.7811442 C 220.29482,4.5191842 220.0625,-0.52865893 220.0625,-0.52865893 C 220.0625,-0.52865893 220.29482,3.3236422 223.95642,4.7848592 C 221.83062,2.4836417 223.39306,1.6469648 223.5625,-3.8252839e-06 C 223.6669,2.362952 223.5625,3.4999962 225.28791,5.1833732 C 224.39659,3.7209402 225.97399,2.1365822 226.0625,0.99999615 C 226.22505,2.369665 225.33995,4.7731032 226.3531,6.3124962 C 225.32943,5.9275472 224.33822,5.6397772 223.4904,5.7811442 z "
+ id="path3390"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ id="path3392"
+ d="M 225.72035,6.1180942 C 225.16262,4.8533702 226.26205,3.7223434 226.26205,3.7223434 C 226.26205,3.7223434 225.47765,4.8411272 226.22822,6.1282592 C 226.04132,5.0622622 226.35757,4.7377432 226.86896,4.3155992 C 226.40211,5.1409272 226.2656,5.4671402 226.65502,6.6189112 C 226.67237,5.8404302 226.9733,5.6138932 227.28629,5.1997792 C 227.01233,5.7646052 226.98603,6.6622362 226.99651,7.4999962 C 226.61026,7.0133312 226.26577,6.4988912 225.72035,6.1180942 z "
+ style="opacity:1;color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:0.79381445;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 234.16003,4.5350723 C 235.06489,4.1238346 235.68926,4.0915896 237.0625,4 C 235.79143,4.3746923 235.49445,4.5566723 234.61223,5.0491613 C 234.06178,5.3564443 233.66182,4.7614973 234.16003,4.5350723 z "
+ id="path3394"
+ sodipodi:nodetypes="ccss" />
+ <path
+ transform="matrix(1.528265,0,0,1.397683,206.5288,-19.44231)"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ sodipodi:ry="3"
+ sodipodi:rx="2.75"
+ sodipodi:cy="19.5"
+ sodipodi:cx="12.25"
+ id="path3396"
+ style="opacity:0.29896904;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3438);stroke-width:0.68422097;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path3398"
+ d="M 220.20883,14.41861 C 222.11322,16.299195 223.74847,14.118691 226.0625,12.999996 C 224.11859,13.119724 221.47453,16.243893 219.07079,12.666041 L 220.20883,14.41861 z "
+ style="opacity:0.74226804;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ id="g3400"
+ transform="matrix(0.790123,0,0,0.952165,213.9885,-8.933107)">
+ <path
+ id="path3402"
+ d="M 42.4375,20.34375 L 42.4375,21.09375 C 40.672788,21.424936 37.889437,20.621802 35.53125,20.34375 C 37.83716,20.359058 40.281614,20.928538 42.4375,20.34375 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient3440);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path3404"
+ d="M 42.40625,21.78125 L 42.59375,22.46875 C 40.604167,22.823591 38.614583,21.661518 36.625,21.125 C 38.552083,21.370176 40.479167,22.279933 42.40625,21.78125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient3442);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path3406"
+ d="M 42.8125,23.3125 L 43.125,23.90625 L 38.34375,22.5 L 42.8125,23.3125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient3444);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.90809005"
+ inkscape:original="M 86.96875 14.03125 L 85.6875 15.28125 L 91.5 19.71875 C 93.429996 17.880461 93.101664 15.770631 92.5 14.9375 L 86.96875 14.03125 z "
+ xlink:href="#path3270"
+ style="opacity:0.34500002;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3446);stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path3408"
+ inkscape:href="#path3270"
+ d="M 87.25,15 L 87.0625,15.1875 L 91.34375,18.4375 C 91.74994,17.8779 91.98492,17.350328 92.03125,16.875 C 92.081926,16.355082 91.932947,16.008676 91.8125,15.75 L 87.25,15 z "
+ transform="translate(144.0625,0)" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.91437298"
+ inkscape:original="M 124.1875 13.9375 L 122.96875 15.3125 C 122.96697 17.006247 122.37007 18.58918 121.5 20.5 C 123.5 21 127.41416 18.868692 126.5 17.5 L 124.1875 13.9375 z "
+ xlink:href="#path4189"
+ style="opacity:0.34500002;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4122);stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path3227"
+ inkscape:href="#path4189"
+ d="M 123.0625,15.4375 L 122.8125,15.71875 C 122.74639,17.008605 122.39037,18.258943 121.875,19.53125 C 122.46166,19.41466 123.09015,19.214126 123.625,18.90625 C 124.10321,18.630978 124.47751,18.304044 124.625,18.09375 C 124.68139,18.013344 124.68136,17.987719 124.6875,17.96875 L 123.0625,15.4375 z " />
+ <g
+ id="g4236"
+ transform="translate(-144.5,-5.557563e-3)">
+ <path
+ transform="matrix(1.101332,0,0,1.007195,175.7517,-11.77008)"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ sodipodi:ry="3"
+ sodipodi:rx="2.75"
+ sodipodi:cy="19.5"
+ sodipodi:cx="12.25"
+ id="path4238"
+ style="color:black;fill:url(#radialGradient4256);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4258);stroke-width:0.9494763;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.788277,0,0,0.720875,179.5866,-6.186833)"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ sodipodi:ry="3"
+ sodipodi:rx="2.75"
+ sodipodi:cy="19.5"
+ sodipodi:cx="12.25"
+ id="path4240"
+ style="color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.3265723;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccsc"
+ id="path4242"
+ d="M 190.26287,4.7495012 C 189.36375,4.3772652 188.30762,4.7175332 187.48513,5.0599352 C 190.63438,4.9566222 191.95826,9.8636492 191.95826,9.8636492 C 193.02814,7.6686612 192.13678,5.5253002 190.26287,4.7495012 z "
+ style="color:black;fill:black;fill-opacity:0.40217393;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ transform="matrix(0.504779,0,0,0.507247,175.3662,-4.913061)"
+ d="M 28 24.5 A 2 2 0 1 1 24,24.5 A 2 2 0 1 1 28 24.5 z"
+ sodipodi:ry="2"
+ sodipodi:rx="2"
+ sodipodi:cy="24.5"
+ sodipodi:cx="26"
+ id="path4244"
+ style="color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:1.97624171;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.864603,0,0,1.293872,179.2866,-13.25719)"
+ d="M 12.21875 15.65625 A 1.5625 0.875 0 1 1 9.09375,15.65625 A 1.5625 0.875 0 1 1 12.21875 15.65625 z"
+ sodipodi:ry="0.875"
+ sodipodi:rx="1.5625"
+ sodipodi:cy="15.65625"
+ sodipodi:cx="10.65625"
+ id="path4246"
+ style="opacity:1;color:black;fill:url(#linearGradient4262);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ style="color:black;fill:url(#radialGradient4264);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 190.50083,4.5714542 C 189.60171,4.1992172 188.54557,4.5394852 187.72309,4.8818872 C 190.87233,4.7785742 192.19621,9.6856012 192.19621,9.6856012 C 193.26609,7.4906132 192.37474,5.3472522 190.50083,4.5714542 z "
+ id="path4248"
+ sodipodi:nodetypes="ccsc" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ id="path4250"
+ d="M 187.4279,5.7811442 C 184.23232,4.5191842 184,-0.52865893 184,-0.52865893 C 184,-0.52865893 184.23232,3.3236422 187.89392,4.7848592 C 185.76812,2.4836417 187.33056,1.6469648 187.5,-3.8252839e-06 C 187.6044,2.362952 187.5,3.4999962 189.22541,5.1833732 C 188.33409,3.7209402 189.91149,2.1365822 190,0.99999615 C 190.16255,2.369665 189.27745,4.7731032 190.2906,6.3124962 C 189.26693,5.9275472 188.27572,5.6397772 187.4279,5.7811442 z "
+ style="opacity:1;color:black;fill:url(#linearGradient4266);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:1;color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 189.65785,6.1180942 C 189.10012,4.8533702 190.19955,3.7223434 190.19955,3.7223434 C 190.19955,3.7223434 189.41515,4.8411272 190.16572,6.1282592 C 189.97882,5.0622622 190.29507,4.7377432 190.80646,4.3155992 C 190.33961,5.1409272 190.20309,5.4671402 190.59252,6.6189112 C 190.60987,5.8404302 190.9108,5.6138932 191.22379,5.1997792 C 190.94983,5.7646052 190.92353,6.6622362 190.93401,7.4999962 C 190.54776,7.0133312 190.20327,6.4988912 189.65785,6.1180942 z "
+ id="path4252"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.29896904;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4268);stroke-width:0.68422097;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4254"
+ sodipodi:cx="12.25"
+ sodipodi:cy="19.5"
+ sodipodi:rx="2.75"
+ sodipodi:ry="3"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ transform="matrix(1.528265,0,0,1.397683,170.4663,-19.44231)" />
+ </g>
+ <path
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#b15700;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 132.5,2 C 137.19419,4.1941882 138.80083,15.738334 131.5625,17.5 C 133.5625,13 134.51098,7 132.5,2 z "
+ id="rect4379"
+ sodipodi:nodetypes="ccc" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1.0242851"
+ inkscape:original="M 132.5 2 C 134.51098 7 133.5625 13 131.5625 17.5 C 138.80083 15.738334 137.19419 4.1941882 132.5 2 z "
+ xlink:href="#rect4379"
+ style="fill:none;fill-opacity:1;stroke:url(#linearGradient4391);stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;opacity:0.3"
+ id="path4383"
+ inkscape:href="#rect4379"
+ d="M 135.3125,4.40625 C 136.02112,7.962997 135.90134,11.588274 134.8125,14.8125 C 136.35593,13.318483 137.02651,11.365608 137,9.34375 C 136.97592,7.5075093 136.31957,5.7445231 135.3125,4.40625 z " />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.29381445;color:black;fill:url(#radialGradient4447);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4393"
+ sodipodi:cx="20.152544"
+ sodipodi:cy="33.636894"
+ sodipodi:rx="15.291184"
+ sodipodi:ry="3.9332814"
+ d="M 35.443728 33.636894 A 15.291184 3.9332814 0 1 1 4.8613596,33.636894 A 15.291184 3.9332814 0 1 1 35.443728 33.636894 z"
+ transform="matrix(0.629968,0,0,1.194637,255.7447,-21.88272)" />
+ <path
+ style="fill:url(#linearGradient4487);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 264.39209,1.4667825 C 261.01691,1.6244893 257.37202,5.0069812 255.5,9.8542692 C 256.20201,14.162969 260.72395,19.141263 265.58236,18.411307 C 270.04045,17.741497 272.51545,15.568192 276.56023,11.739325 C 279,12 278.5,14 277.5,17 C 282.5,14.5625 282,6.5 278.5,2.5 C 278.5,4.5 279,8 276.46179,7.9872942 C 275.7846,7.4137812 274.10142,6.5586652 273.37822,5.9798772 C 273.30472,4.3295432 274.01401,2.8027894 275,1.5 C 272,-0.5 271,1 269.52202,2.7241777 C 267.85671,1.699843 266.52894,1.6344033 265.08112,1.4893851 C 264.85339,1.4665741 264.61711,1.4562688 264.39209,1.4667825 z "
+ id="path4395"
+ sodipodi:nodetypes="ccscccccccsc" />
+ <path
+ style="opacity:0.943299;color:black;fill:url(#linearGradient4451);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 275.45495,8.0992522 C 268.34682,5.9013692 263.51377,16.972841 256.45007,9.9986852 C 257.98795,4.9192172 262.13044,1.2609961 265.3281,2.0447504 C 267.39339,2.5509576 268.2834,2.4014386 269.4808,3.1219254 C 271.64608,4.4247882 272.90724,6.3639392 275.45495,8.0992522 z "
+ id="path4397"
+ sodipodi:nodetypes="ccssc" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1.0204015"
+ inkscape:original="M 273.09375 0.59375 C 271.47759 0.25269583 270.63973 1.4256167 269.53125 2.71875 C 267.86593 1.6944154 266.54157 1.6450182 265.09375 1.5 C 264.86602 1.477189 264.63127 1.4582363 264.40625 1.46875 C 261.03107 1.6264568 257.37202 4.996462 255.5 9.84375 C 256.20201 14.15245 260.73534 19.136206 265.59375 18.40625 C 270.05183 17.736441 272.51772 15.578867 276.5625 11.75 C 279.00226 12.010675 278.5 14 277.5 17 C 282.5 14.5625 282 6.5 278.5 2.5 C 278.5 4.5 279.00696 8.0127058 276.46875 8 C 275.79156 7.426487 274.0982 6.547538 273.375 5.96875 C 273.30149 4.3184162 274.01401 2.8027894 275 1.5 C 274.25 1 273.63247 0.70743472 273.09375 0.59375 z "
+ xlink:href="#path4395"
+ style="opacity:0.45899999;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4495);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4485"
+ inkscape:href="#path4395"
+ d="M 272.875,1.59375 C 272.33301,1.4793754 272.10921,1.5823658 271.71875,1.875 C 271.32829,2.1676342 270.88328,2.7091431 270.3125,3.375 C 269.98922,3.7623257 269.43143,3.8552914 269,3.59375 C 267.52784,2.6882306 266.48636,2.6488781 265,2.5 C 264.78569,2.4785336 264.60361,2.4936989 264.46875,2.5 C 261.79861,2.6247637 258.39771,5.5336652 256.59375,9.9375 C 256.95885,11.751991 258.09396,13.805457 259.6875,15.28125 C 261.35263,16.82334 263.39183,17.713604 265.4375,17.40625 C 269.63187,16.776063 271.8416,14.818093 275.875,11 C 276.08899,10.811067 276.37233,10.720398 276.65625,10.75 C 277.44046,10.833789 278.14945,11.131995 278.625,11.65625 C 279.10055,12.180505 279.30778,12.829075 279.34375,13.46875 C 279.35712,13.706513 279.2694,13.947412 279.25,14.1875 C 279.98137,13.107867 280.34375,11.796826 280.34375,10.3125 C 280.34375,8.9293761 279.97626,7.5231878 279.4375,6.1875 C 279.32462,6.8549312 279.11688,7.5233842 278.625,8.09375 C 278.13312,8.6641158 277.33848,9.0356037 276.46875,9.03125 C 276.22731,9.028177 275.99479,8.9395954 275.8125,8.78125 C 275.59782,8.5994339 275.00263,8.2063016 274.40625,7.84375 C 273.80987,7.4811984 273.21821,7.1247123 272.75,6.75 C 272.51159,6.5712932 272.36319,6.2973182 272.34375,6 C 272.27554,4.4686371 272.86614,3.1475805 273.59375,1.9375 C 273.36249,1.8317225 273.03442,1.6273921 272.875,1.59375 z " />
+ <path
+ style="fill:#b15700;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 257.22213,13.193316 C 259.27804,16.030791 262.22397,13.038587 265.5,12.5 C 262.22397,12.5 259.38782,15.036362 256.37235,11.351182 L 257.22213,13.193316 z "
+ id="path4401"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:0.31443296;color:black;fill:url(#linearGradient4455);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 256.88092,12.315918 C 256.88092,12.315918 259.20896,17.839623 264.27869,18.09052 C 270.56792,18.406678 275.62421,11.739325 275.62421,11.739325 L 256.88092,12.315918 z "
+ id="path4403"
+ sodipodi:nodetypes="cscc" />
+ <path
+ style="fill:url(#linearGradient4457);fill-opacity:1;fill-rule:evenodd;stroke:#b15700;stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 266.98344,15.299161 C 266.98166,16.992908 266.36979,18.58918 265.49972,20.5 C 267.49972,21 271.41388,18.868692 270.49972,17.5 L 268.20233,13.93047 L 266.98344,15.299161 z "
+ id="path4405"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="opacity:1;color:black;fill:url(#linearGradient4459);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 265.32131,16.539013 L 269.21904,11.999996 L 270.49972,12.191786 L 265.32131,16.539013 z "
+ id="path4407"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:0.79381445;color:black;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 270.71235,3.3532967 C 271.5,2.5 272,2 273,2 C 272,2.5 271.5,3 271.13561,3.9070605 C 270.90733,4.4753098 270.3554,3.7399995 270.71235,3.3532967 z "
+ id="path4409"
+ sodipodi:nodetypes="ccss" />
+ <g
+ id="g4411"
+ transform="translate(191.4861,-6.000004)">
+ <path
+ transform="matrix(1.101332,0,0,1.007195,58.75165,-5.770077)"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ sodipodi:ry="3"
+ sodipodi:rx="2.75"
+ sodipodi:cy="19.5"
+ sodipodi:cx="12.25"
+ id="path4413"
+ style="color:black;fill:url(#radialGradient4461);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4463);stroke-width:0.9494763;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.788277,0,0,0.720875,62.58658,-0.186829)"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ sodipodi:ry="3"
+ sodipodi:rx="2.75"
+ sodipodi:cy="19.5"
+ sodipodi:cx="12.25"
+ id="path4415"
+ style="color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4465);stroke-width:1.3265723;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccsc"
+ id="path4417"
+ d="M 73.262873,10.749505 C 72.363755,10.377269 71.307619,10.717537 70.485134,11.059939 C 73.634378,10.956626 74.958258,15.863653 74.958258,15.863653 C 76.028136,13.668665 75.136783,11.525304 73.262873,10.749505 z "
+ style="color:black;fill:black;fill-opacity:0.40217393;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ transform="matrix(0.504779,0,0,0.507247,58.36619,1.086943)"
+ d="M 28 24.5 A 2 2 0 1 1 24,24.5 A 2 2 0 1 1 28 24.5 z"
+ sodipodi:ry="2"
+ sodipodi:rx="2"
+ sodipodi:cy="24.5"
+ sodipodi:cx="26"
+ id="path4419"
+ style="color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:1.97624171;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.864603,0,0,1.293872,62.28657,-7.257184)"
+ d="M 12.21875 15.65625 A 1.5625 0.875 0 1 1 9.09375,15.65625 A 1.5625 0.875 0 1 1 12.21875 15.65625 z"
+ sodipodi:ry="0.875"
+ sodipodi:rx="1.5625"
+ sodipodi:cy="15.65625"
+ sodipodi:cx="10.65625"
+ id="path4421"
+ style="opacity:1;color:black;fill:url(#linearGradient4467);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ style="color:black;fill:url(#radialGradient4469);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 73.500826,10.571458 C 72.601708,10.199221 71.545573,10.539489 70.723088,10.881891 C 73.872331,10.778578 75.196211,15.685605 75.196211,15.685605 C 76.266089,13.490617 75.374737,11.347256 73.500826,10.571458 z "
+ id="path4423"
+ sodipodi:nodetypes="ccsc" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ id="path4425"
+ d="M 70.427898,11.781148 C 67.23232,10.519188 66.513864,6.001675 66.513864,6.001675 C 66.513864,6.001675 67.23232,9.323646 70.89392,10.784863 C 68.768121,8.4836455 69.402486,7.6911629 69.571922,6.0441942 C 69.676327,8.40715 70.5,9.5 72.225411,11.183377 C 71.334093,9.720944 72.381156,8.136586 72.46967,7 C 72.632218,8.3696688 72.277446,10.773107 73.290604,12.3125 C 72.266929,11.927551 71.275723,11.639781 70.427898,11.781148 z "
+ style="opacity:1;color:black;fill:url(#linearGradient4471);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:1;color:black;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 72.657852,12.118098 C 72.100118,10.853374 73.199546,9.7223472 73.199546,9.7223472 C 73.199546,9.7223472 72.415146,10.841131 73.165719,12.128263 C 72.97882,11.062266 73.295074,10.737747 73.80646,10.315603 C 73.339609,11.140931 73.203095,11.467144 73.592525,12.618915 C 73.609867,11.840434 73.910803,11.613897 74.22379,11.199783 C 73.949828,11.764609 73.923533,12.66224 73.934007,13.5 C 73.54776,13.013335 73.203273,12.498895 72.657852,12.118098 z "
+ id="path4427"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.29896904;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4473);stroke-width:0.68422097;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4429"
+ sodipodi:cx="12.25"
+ sodipodi:cy="19.5"
+ sodipodi:rx="2.75"
+ sodipodi:ry="3"
+ d="M 15 19.5 A 2.75 3 0 1 1 9.5,19.5 A 2.75 3 0 1 1 15 19.5 z"
+ transform="matrix(1.528265,0,0,1.397683,53.46625,-13.44231)" />
+ </g>
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path4431"
+ d="M 257.97699,14.344596 C 259.75952,16.370315 261.83405,14.20503 264,13 C 262.18048,13.128968 259.1617,16.310745 256.91178,12.456772 L 257.97699,14.344596 z "
+ style="opacity:0.74226804;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ id="g4433"
+ transform="matrix(0.329213,0,0,0.842105,265.8027,-7.631574)">
+ <path
+ id="path4435"
+ d="M 42.4375,20.34375 L 42.4375,21.09375 C 40.672788,21.424936 37.889437,20.621802 35.53125,20.34375 C 37.83716,20.359058 40.281614,20.928538 42.4375,20.34375 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient4475);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path4437"
+ d="M 42.40625,21.78125 L 42.59375,22.46875 C 40.604167,22.823591 38.614583,21.661518 36.625,21.125 C 38.552083,21.370176 40.479167,22.279933 42.40625,21.78125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient4477);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:nodetypes="cccc" />
+ <path
+ id="path4439"
+ d="M 42.8125,23.3125 L 43.125,23.90625 L 38.34375,22.5 L 42.8125,23.3125 z "
+ style="opacity:0.12371132;color:black;fill:url(#linearGradient4479);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.91437298"
+ inkscape:original="M 124.1875 13.9375 L 122.96875 15.3125 C 122.96697 17.006247 122.37007 18.58918 121.5 20.5 C 123.5 21 127.41416 18.868692 126.5 17.5 L 124.1875 13.9375 z "
+ xlink:href="#path4189"
+ style="opacity:0.34500002;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4481);stroke-width:0.96744114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4441"
+ inkscape:href="#path4189"
+ d="M 124.0625,15.4375 L 123.8125,15.71875 C 123.74639,17.008605 123.39037,18.258943 122.875,19.53125 C 123.46166,19.41466 124.09015,19.214126 124.625,18.90625 C 125.10321,18.630978 125.47751,18.304044 125.625,18.09375 C 125.68139,18.013344 125.68136,17.987719 125.6875,17.96875 L 124.0625,15.4375 z "
+ transform="translate(143.9994,0)" />
+ </g>
+</svg>
diff --git a/applets/notification_area/Makefile.am b/applets/notification_area/Makefile.am
new file mode 100644
index 00000000..8609eff9
--- /dev/null
+++ b/applets/notification_area/Makefile.am
@@ -0,0 +1,112 @@
+noinst_LTLIBRARIES = libtray.la
+noinst_PROGRAMS = testtray
+
+AM_CPPFLAGS = \
+ $(NOTIFICATION_AREA_CFLAGS) \
+ $(LIBMATE_PANEL_APPLET_CFLAGS) \
+ -I$(srcdir) \
+ -I$(srcdir)/../../libmate-panel-applet \
+ -I$(top_builddir)/libmate-panel-applet \
+ -DMATELOCALEDIR=\""$(datadir)/locale"\" \
+ -DG_LOG_DOMAIN=\""notification-area-applet"\" \
+ -DNOTIFICATION_AREA_MENU_UI_DIR=\""$(uidir)"\" \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+AM_CFLAGS = $(WARN_CFLAGS)
+
+libtray_la_SOURCES = \
+ fixedtip.h \
+ fixedtip.c \
+ na-marshal.c \
+ na-marshal.h \
+ na-tray.c \
+ na-tray.h \
+ na-tray-child.c \
+ na-tray-child.h \
+ na-tray-manager.c \
+ na-tray-manager.h
+
+NOTIFICATION_AREA_SOURCES = main.c
+
+NOTIFICATION_AREA_LDADD = \
+ ../../libmate-panel-applet/libmate-panel-applet-3.la \
+ libtray.la \
+ $(X_LIBS) \
+ $(NOTIFICATION_AREA_LIBS) \
+ $(LIBMATE_PANEL_APPLET_LIBS)
+
+
+testtray_SOURCES = testtray.c
+testtray_LDADD = \
+ libtray.la \
+ $(X_LIBS) \
+ $(NOTIFICATION_AREA_LIBS)
+
+if NOTIFICATION_AREA_INPROCESS
+APPLET_IN_PROCESS = true
+APPLET_LOCATION = $(pkglibdir)/libnotification-area-applet.so
+
+notification_area_appletlibdir = $(pkglibdir)
+notification_area_appletlib_LTLIBRARIES = libnotification-area-applet.la
+libnotification_area_applet_la_SOURCES = $(NOTIFICATION_AREA_SOURCES)
+libnotification_area_applet_la_LIBADD = $(NOTIFICATION_AREA_LDADD)
+libnotification_area_applet_la_LDFLAGS = -module -avoid-version
+libnotification_area_applet_la_CFLAGS = $(AM_CFLAGS)
+else
+APPLET_IN_PROCESS = false
+APPLET_LOCATION = $(libexecdir)/notification-area-applet
+
+libexec_PROGRAMS = notification-area-applet
+notification_area_applet_SOURCES = $(NOTIFICATION_AREA_SOURCES)
+notification_area_applet_LDADD = $(NOTIFICATION_AREA_LDADD)
+notification_area_applet_CFLAGS = $(AM_CFLAGS)
+endif
+
+na-marshal.h: na-marshal.list $(GLIB_GENMARSHAL)
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) $< --header --prefix=_na_marshal > $@
+
+na-marshal.c: na-marshal.list $(GLIB_GENMARSHAL)
+ $(AM_V_GEN)echo "#include \"na-marshal.h\"" > $@ && \
+ $(GLIB_GENMARSHAL) $< --body --prefix=_na_marshal >> $@
+
+BUILT_SOURCES = na-marshal.c na-marshal.h
+
+appletdir = $(datadir)/mate-panel/applets
+applet_in_files = org.mate.panel.NotificationAreaApplet.mate-panel-applet.in
+applet_DATA = $(applet_in_files:.mate-panel-applet.in=.mate-panel-applet)
+
+$(applet_in_files): $(applet_in_files).in Makefile
+ $(AM_V_GEN)sed \
+ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+ -e "s|\@IN_PROCESS\@|$(APPLET_IN_PROCESS)|" \
+ -e "s|\@VERSION\@|$(PACKAGE_VERSION)|" \
+ $< > $@
+
+@PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+
+if !NOTIFICATION_AREA_INPROCESS
+servicedir = $(datadir)/dbus-1/services
+service_in_files = org.mate.panel.applet.NotificationAreaAppletFactory.service.in
+service_DATA = $(service_in_files:.service.in=.service)
+
+org.mate.panel.applet.NotificationAreaAppletFactory.service: $(service_in_files)
+ $(AM_V_GEN)sed \
+ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+ $< > $@
+endif
+
+uidir = $(datadir)/mate-panel/ui
+ui_DATA = notification-area-menu.xml
+
+EXTRA_DIST = \
+ org.mate.panel.NotificationAreaApplet.mate-panel-applet.in.in \
+ $(ui_DATA) \
+ $(service_in_files) \
+ na-marshal.list
+
+CLEANFILES = \
+ $(applet_DATA) \
+ $(applet_DATA).in \
+ $(service_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/applets/notification_area/Makefile.in b/applets/notification_area/Makefile.in
new file mode 100644
index 00000000..2f73b378
--- /dev/null
+++ b/applets/notification_area/Makefile.in
@@ -0,0 +1,964 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = testtray$(EXEEXT)
+@NOTIFICATION_AREA_INPROCESS_FALSE@libexec_PROGRAMS = notification-area-applet$(EXEEXT)
+subdir = applets/notification_area
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/d-type.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(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)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+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)$(notification_area_appletlibdir)" \
+ "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(appletdir)" \
+ "$(DESTDIR)$(servicedir)" "$(DESTDIR)$(uidir)"
+LTLIBRARIES = $(noinst_LTLIBRARIES) \
+ $(notification_area_appletlib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = \
+ ../../libmate-panel-applet/libmate-panel-applet-3.la \
+ libtray.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+@NOTIFICATION_AREA_INPROCESS_TRUE@libnotification_area_applet_la_DEPENDENCIES = \
+@NOTIFICATION_AREA_INPROCESS_TRUE@ $(am__DEPENDENCIES_2)
+am__libnotification_area_applet_la_SOURCES_DIST = main.c
+am__objects_1 = libnotification_area_applet_la-main.lo
+@NOTIFICATION_AREA_INPROCESS_TRUE@am_libnotification_area_applet_la_OBJECTS = \
+@NOTIFICATION_AREA_INPROCESS_TRUE@ $(am__objects_1)
+libnotification_area_applet_la_OBJECTS = \
+ $(am_libnotification_area_applet_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libnotification_area_applet_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libnotification_area_applet_la_CFLAGS) $(CFLAGS) \
+ $(libnotification_area_applet_la_LDFLAGS) $(LDFLAGS) -o $@
+@NOTIFICATION_AREA_INPROCESS_TRUE@am_libnotification_area_applet_la_rpath = \
+@NOTIFICATION_AREA_INPROCESS_TRUE@ -rpath \
+@NOTIFICATION_AREA_INPROCESS_TRUE@ $(notification_area_appletlibdir)
+libtray_la_LIBADD =
+am_libtray_la_OBJECTS = fixedtip.lo na-marshal.lo na-tray.lo \
+ na-tray-child.lo na-tray-manager.lo
+libtray_la_OBJECTS = $(am_libtray_la_OBJECTS)
+PROGRAMS = $(libexec_PROGRAMS) $(noinst_PROGRAMS)
+am__notification_area_applet_SOURCES_DIST = main.c
+am__objects_2 = notification_area_applet-main.$(OBJEXT)
+@NOTIFICATION_AREA_INPROCESS_FALSE@am_notification_area_applet_OBJECTS = \
+@NOTIFICATION_AREA_INPROCESS_FALSE@ $(am__objects_2)
+notification_area_applet_OBJECTS = \
+ $(am_notification_area_applet_OBJECTS)
+@NOTIFICATION_AREA_INPROCESS_FALSE@notification_area_applet_DEPENDENCIES = \
+@NOTIFICATION_AREA_INPROCESS_FALSE@ $(am__DEPENDENCIES_2)
+notification_area_applet_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(notification_area_applet_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+am_testtray_OBJECTS = testtray.$(OBJEXT)
+testtray_OBJECTS = $(am_testtray_OBJECTS)
+testtray_DEPENDENCIES = libtray.la $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+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 = $(libnotification_area_applet_la_SOURCES) \
+ $(libtray_la_SOURCES) $(notification_area_applet_SOURCES) \
+ $(testtray_SOURCES)
+DIST_SOURCES = $(am__libnotification_area_applet_la_SOURCES_DIST) \
+ $(libtray_la_SOURCES) \
+ $(am__notification_area_applet_SOURCES_DIST) \
+ $(testtray_SOURCES)
+DATA = $(applet_DATA) $(service_DATA) $(ui_DATA)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CLOCK_CFLAGS = @CLOCK_CFLAGS@
+CLOCK_EDS_ICONDIR = @CLOCK_EDS_ICONDIR@
+CLOCK_LIBS = @CLOCK_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGG_SMCLIENT_CFLAGS = @EGG_SMCLIENT_CFLAGS@
+EGG_SMCLIENT_LIBS = @EGG_SMCLIENT_LIBS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FISH_CFLAGS = @FISH_CFLAGS@
+FISH_LIBS = @FISH_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_QUERYMODULES = @GIO_QUERYMODULES@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBMATE_PANEL_APPLET_CFLAGS = @LIBMATE_PANEL_APPLET_CFLAGS@
+LIBMATE_PANEL_APPLET_LIBS = @LIBMATE_PANEL_APPLET_LIBS@
+LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS@
+LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MATE_PANEL_APPLET_LT_VERSION = @LIB_MATE_PANEL_APPLET_LT_VERSION@
+LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION = @LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECOMPONENT_ACT_IDLDIR = @MATECOMPONENT_ACT_IDLDIR@
+MATECOMPONENT_CFLAGS = @MATECOMPONENT_CFLAGS@
+MATECOMPONENT_IDLDIR = @MATECOMPONENT_IDLDIR@
+MATECOMPONENT_LIBS = @MATECOMPONENT_LIBS@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MATECORBA_IDL = @MATECORBA_IDL@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NETWORK_MANAGER_CFLAGS = @NETWORK_MANAGER_CFLAGS@
+NETWORK_MANAGER_LIBS = @NETWORK_MANAGER_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOTIFICATION_AREA_CFLAGS = @NOTIFICATION_AREA_CFLAGS@
+NOTIFICATION_AREA_LIBS = @NOTIFICATION_AREA_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANEL_CFLAGS = @PANEL_CFLAGS@
+PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE = @PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+PANEL_LIBS = @PANEL_LIBS@
+PANEL_MODULE_MATECOMPONENT_CFLAGS = @PANEL_MODULE_MATECOMPONENT_CFLAGS@
+PANEL_MODULE_MATECOMPONENT_LIBS = @PANEL_MODULE_MATECOMPONENT_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+REBUILD = @REBUILD@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TZ_CFLAGS = @TZ_CFLAGS@
+TZ_LIBS = @TZ_LIBS@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WNCKLET_CFLAGS = @WNCKLET_CFLAGS@
+WNCKLET_LIBS = @WNCKLET_LIBS@
+XGETTEXT = @XGETTEXT@
+XMKMF = @XMKMF@
+XRANDR_CFLAGS = @XRANDR_CFLAGS@
+XRANDR_LIBS = @XRANDR_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+appletsdir = @appletsdir@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+modulesdir = @modulesdir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libtray.la
+AM_CPPFLAGS = \
+ $(NOTIFICATION_AREA_CFLAGS) \
+ $(LIBMATE_PANEL_APPLET_CFLAGS) \
+ -I$(srcdir) \
+ -I$(srcdir)/../../libmate-panel-applet \
+ -I$(top_builddir)/libmate-panel-applet \
+ -DMATELOCALEDIR=\""$(datadir)/locale"\" \
+ -DG_LOG_DOMAIN=\""notification-area-applet"\" \
+ -DNOTIFICATION_AREA_MENU_UI_DIR=\""$(uidir)"\" \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+AM_CFLAGS = $(WARN_CFLAGS)
+libtray_la_SOURCES = \
+ fixedtip.h \
+ fixedtip.c \
+ na-marshal.c \
+ na-marshal.h \
+ na-tray.c \
+ na-tray.h \
+ na-tray-child.c \
+ na-tray-child.h \
+ na-tray-manager.c \
+ na-tray-manager.h
+
+NOTIFICATION_AREA_SOURCES = main.c
+NOTIFICATION_AREA_LDADD = \
+ ../../libmate-panel-applet/libmate-panel-applet-3.la \
+ libtray.la \
+ $(X_LIBS) \
+ $(NOTIFICATION_AREA_LIBS) \
+ $(LIBMATE_PANEL_APPLET_LIBS)
+
+testtray_SOURCES = testtray.c
+testtray_LDADD = \
+ libtray.la \
+ $(X_LIBS) \
+ $(NOTIFICATION_AREA_LIBS)
+
+@NOTIFICATION_AREA_INPROCESS_FALSE@APPLET_IN_PROCESS = false
+@NOTIFICATION_AREA_INPROCESS_TRUE@APPLET_IN_PROCESS = true
+@NOTIFICATION_AREA_INPROCESS_FALSE@APPLET_LOCATION = $(libexecdir)/notification-area-applet
+@NOTIFICATION_AREA_INPROCESS_TRUE@APPLET_LOCATION = $(pkglibdir)/libnotification-area-applet.so
+@NOTIFICATION_AREA_INPROCESS_TRUE@notification_area_appletlibdir = $(pkglibdir)
+@NOTIFICATION_AREA_INPROCESS_TRUE@notification_area_appletlib_LTLIBRARIES = libnotification-area-applet.la
+@NOTIFICATION_AREA_INPROCESS_TRUE@libnotification_area_applet_la_SOURCES = $(NOTIFICATION_AREA_SOURCES)
+@NOTIFICATION_AREA_INPROCESS_TRUE@libnotification_area_applet_la_LIBADD = $(NOTIFICATION_AREA_LDADD)
+@NOTIFICATION_AREA_INPROCESS_TRUE@libnotification_area_applet_la_LDFLAGS = -module -avoid-version
+@NOTIFICATION_AREA_INPROCESS_TRUE@libnotification_area_applet_la_CFLAGS = $(AM_CFLAGS)
+@NOTIFICATION_AREA_INPROCESS_FALSE@notification_area_applet_SOURCES = $(NOTIFICATION_AREA_SOURCES)
+@NOTIFICATION_AREA_INPROCESS_FALSE@notification_area_applet_LDADD = $(NOTIFICATION_AREA_LDADD)
+@NOTIFICATION_AREA_INPROCESS_FALSE@notification_area_applet_CFLAGS = $(AM_CFLAGS)
+BUILT_SOURCES = na-marshal.c na-marshal.h
+appletdir = $(datadir)/mate-panel/applets
+applet_in_files = org.mate.panel.NotificationAreaApplet.mate-panel-applet.in
+applet_DATA = $(applet_in_files:.mate-panel-applet.in=.mate-panel-applet)
+@NOTIFICATION_AREA_INPROCESS_FALSE@servicedir = $(datadir)/dbus-1/services
+@NOTIFICATION_AREA_INPROCESS_FALSE@service_in_files = org.mate.panel.applet.NotificationAreaAppletFactory.service.in
+@NOTIFICATION_AREA_INPROCESS_FALSE@service_DATA = $(service_in_files:.service.in=.service)
+uidir = $(datadir)/mate-panel/ui
+ui_DATA = notification-area-menu.xml
+EXTRA_DIST = \
+ org.mate.panel.NotificationAreaApplet.mate-panel-applet.in.in \
+ $(ui_DATA) \
+ $(service_in_files) \
+ na-marshal.list
+
+CLEANFILES = \
+ $(applet_DATA) \
+ $(applet_DATA).in \
+ $(service_DATA)
+
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applets/notification_area/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applets/notification_area/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+install-notification_area_appletlibLTLIBRARIES: $(notification_area_appletlib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(notification_area_appletlibdir)" || $(MKDIR_P) "$(DESTDIR)$(notification_area_appletlibdir)"
+ @list='$(notification_area_appletlib_LTLIBRARIES)'; test -n "$(notification_area_appletlibdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(notification_area_appletlibdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(notification_area_appletlibdir)"; \
+ }
+
+uninstall-notification_area_appletlibLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(notification_area_appletlib_LTLIBRARIES)'; test -n "$(notification_area_appletlibdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(notification_area_appletlibdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(notification_area_appletlibdir)/$$f"; \
+ done
+
+clean-notification_area_appletlibLTLIBRARIES:
+ -test -z "$(notification_area_appletlib_LTLIBRARIES)" || rm -f $(notification_area_appletlib_LTLIBRARIES)
+ @list='$(notification_area_appletlib_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libnotification-area-applet.la: $(libnotification_area_applet_la_OBJECTS) $(libnotification_area_applet_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libnotification_area_applet_la_LINK) $(am_libnotification_area_applet_la_rpath) $(libnotification_area_applet_la_OBJECTS) $(libnotification_area_applet_la_LIBADD) $(LIBS)
+libtray.la: $(libtray_la_OBJECTS) $(libtray_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libtray_la_OBJECTS) $(libtray_la_LIBADD) $(LIBS)
+install-libexecPROGRAMS: $(libexec_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)"
+ @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p || test -f $$p1; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-libexecPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(libexecdir)" && rm -f $$files
+
+clean-libexecPROGRAMS:
+ @list='$(libexec_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+notification-area-applet$(EXEEXT): $(notification_area_applet_OBJECTS) $(notification_area_applet_DEPENDENCIES)
+ @rm -f notification-area-applet$(EXEEXT)
+ $(AM_V_CCLD)$(notification_area_applet_LINK) $(notification_area_applet_OBJECTS) $(notification_area_applet_LDADD) $(LIBS)
+testtray$(EXEEXT): $(testtray_OBJECTS) $(testtray_DEPENDENCIES)
+ @rm -f testtray$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(testtray_OBJECTS) $(testtray_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fixedtip.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnotification_area_applet_la-main.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/na-marshal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/na-tray-child.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/na-tray-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/na-tray.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/notification_area_applet-main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testtray.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+libnotification_area_applet_la-main.lo: main.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnotification_area_applet_la_CFLAGS) $(CFLAGS) -MT libnotification_area_applet_la-main.lo -MD -MP -MF $(DEPDIR)/libnotification_area_applet_la-main.Tpo -c -o libnotification_area_applet_la-main.lo `test -f 'main.c' || echo '$(srcdir)/'`main.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnotification_area_applet_la-main.Tpo $(DEPDIR)/libnotification_area_applet_la-main.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='libnotification_area_applet_la-main.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnotification_area_applet_la_CFLAGS) $(CFLAGS) -c -o libnotification_area_applet_la-main.lo `test -f 'main.c' || echo '$(srcdir)/'`main.c
+
+notification_area_applet-main.o: main.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(notification_area_applet_CFLAGS) $(CFLAGS) -MT notification_area_applet-main.o -MD -MP -MF $(DEPDIR)/notification_area_applet-main.Tpo -c -o notification_area_applet-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/notification_area_applet-main.Tpo $(DEPDIR)/notification_area_applet-main.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='notification_area_applet-main.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) $(notification_area_applet_CFLAGS) $(CFLAGS) -c -o notification_area_applet-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
+
+notification_area_applet-main.obj: main.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(notification_area_applet_CFLAGS) $(CFLAGS) -MT notification_area_applet-main.obj -MD -MP -MF $(DEPDIR)/notification_area_applet-main.Tpo -c -o notification_area_applet-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/notification_area_applet-main.Tpo $(DEPDIR)/notification_area_applet-main.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='notification_area_applet-main.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) $(notification_area_applet_CFLAGS) $(CFLAGS) -c -o notification_area_applet-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-appletDATA: $(applet_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(appletdir)" || $(MKDIR_P) "$(DESTDIR)$(appletdir)"
+ @list='$(applet_DATA)'; test -n "$(appletdir)" || 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)$(appletdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(appletdir)" || exit $$?; \
+ done
+
+uninstall-appletDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(applet_DATA)'; test -n "$(appletdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(appletdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(appletdir)" && rm -f $$files
+install-serviceDATA: $(service_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(servicedir)" || $(MKDIR_P) "$(DESTDIR)$(servicedir)"
+ @list='$(service_DATA)'; test -n "$(servicedir)" || 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)$(servicedir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(servicedir)" || exit $$?; \
+ done
+
+uninstall-serviceDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(service_DATA)'; test -n "$(servicedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(servicedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(servicedir)" && rm -f $$files
+install-uiDATA: $(ui_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(uidir)" || $(MKDIR_P) "$(DESTDIR)$(uidir)"
+ @list='$(ui_DATA)'; test -n "$(uidir)" || 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)$(uidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(uidir)" || exit $$?; \
+ done
+
+uninstall-uiDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(uidir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(uidir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(notification_area_appletlibdir)" "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(appletdir)" "$(DESTDIR)$(servicedir)" "$(DESTDIR)$(uidir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libexecPROGRAMS clean-libtool \
+ clean-noinstLTLIBRARIES clean-noinstPROGRAMS \
+ clean-notification_area_appletlibLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-appletDATA \
+ install-notification_area_appletlibLTLIBRARIES \
+ install-serviceDATA install-uiDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libexecPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-appletDATA uninstall-libexecPROGRAMS \
+ uninstall-notification_area_appletlibLTLIBRARIES \
+ uninstall-serviceDATA uninstall-uiDATA
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libexecPROGRAMS clean-libtool clean-noinstLTLIBRARIES \
+ clean-noinstPROGRAMS \
+ clean-notification_area_appletlibLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-appletDATA 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-libexecPROGRAMS install-man \
+ install-notification_area_appletlibLTLIBRARIES install-pdf \
+ install-pdf-am install-ps install-ps-am install-serviceDATA \
+ install-strip install-uiDATA installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am uninstall-appletDATA uninstall-libexecPROGRAMS \
+ uninstall-notification_area_appletlibLTLIBRARIES \
+ uninstall-serviceDATA uninstall-uiDATA
+
+
+na-marshal.h: na-marshal.list $(GLIB_GENMARSHAL)
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) $< --header --prefix=_na_marshal > $@
+
+na-marshal.c: na-marshal.list $(GLIB_GENMARSHAL)
+ $(AM_V_GEN)echo "#include \"na-marshal.h\"" > $@ && \
+ $(GLIB_GENMARSHAL) $< --body --prefix=_na_marshal >> $@
+
+$(applet_in_files): $(applet_in_files).in Makefile
+ $(AM_V_GEN)sed \
+ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+ -e "s|\@IN_PROCESS\@|$(APPLET_IN_PROCESS)|" \
+ -e "s|\@VERSION\@|$(PACKAGE_VERSION)|" \
+ $< > $@
+
+@PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+
+@NOTIFICATION_AREA_INPROCESS_FALSE@org.mate.panel.applet.NotificationAreaAppletFactory.service: $(service_in_files)
+@NOTIFICATION_AREA_INPROCESS_FALSE@ $(AM_V_GEN)sed \
+@NOTIFICATION_AREA_INPROCESS_FALSE@ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+@NOTIFICATION_AREA_INPROCESS_FALSE@ $< > $@
+
+-include $(top_srcdir)/git.mk
+
+# 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.
+.NOEXPORT:
diff --git a/applets/notification_area/fixedtip.c b/applets/notification_area/fixedtip.c
new file mode 100644
index 00000000..c32c6bf8
--- /dev/null
+++ b/applets/notification_area/fixedtip.c
@@ -0,0 +1,269 @@
+/* Marco fixed tooltip routine */
+
+/*
+ * Copyright (C) 2001 Havoc Pennington
+ * Copyright (C) 2003-2006 Vincent Untz
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#include "fixedtip.h"
+
+/* Signals */
+enum
+{
+ CLICKED,
+ LAST_SIGNAL
+};
+
+static guint fixedtip_signals[LAST_SIGNAL] = { 0 };
+
+struct _NaFixedTipPrivate
+{
+ GtkWidget *parent;
+ GtkWidget *label;
+ GtkOrientation orientation;
+};
+
+G_DEFINE_TYPE (NaFixedTip, na_fixed_tip, GTK_TYPE_WINDOW)
+
+static gboolean
+button_press_handler (GtkWidget *fixedtip,
+ GdkEventButton *event,
+ gpointer data)
+{
+ if (event->button == 1 && event->type == GDK_BUTTON_PRESS)
+ g_signal_emit (fixedtip, fixedtip_signals[CLICKED], 0);
+
+ return FALSE;
+}
+
+static gboolean
+expose_handler (GtkWidget *fixedtip)
+{
+ GtkRequisition req;
+
+ gtk_widget_size_request (fixedtip, &req);
+
+ gtk_paint_flat_box (gtk_widget_get_style (fixedtip),
+ gtk_widget_get_window (fixedtip),
+ GTK_STATE_NORMAL, GTK_SHADOW_OUT,
+ NULL, fixedtip, "tooltip",
+ 0, 0, req.width, req.height);
+
+ return FALSE;
+}
+
+static void
+na_fixed_tip_class_init (NaFixedTipClass *class)
+{
+ fixedtip_signals[CLICKED] =
+ g_signal_new ("clicked",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NaFixedTipClass, clicked),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ g_type_class_add_private (class, sizeof (NaFixedTipPrivate));
+}
+
+/* Did you already see this code? Yes, it's gtk_tooltips_ force_window() ;-) */
+static void
+na_fixed_tip_init (NaFixedTip *fixedtip)
+{
+ GtkWidget *label;
+
+ fixedtip->priv = G_TYPE_INSTANCE_GET_PRIVATE (fixedtip, NA_TYPE_FIXED_TIP,
+ NaFixedTipPrivate);
+
+ gtk_window_set_type_hint (GTK_WINDOW (fixedtip),
+ GDK_WINDOW_TYPE_HINT_TOOLTIP);
+
+ gtk_widget_set_app_paintable (GTK_WIDGET (fixedtip), TRUE);
+ gtk_window_set_resizable (GTK_WINDOW (fixedtip), FALSE);
+ gtk_widget_set_name (GTK_WIDGET (fixedtip), "gtk-tooltips");
+ gtk_container_set_border_width (GTK_CONTAINER (fixedtip), 4);
+
+ label = gtk_label_new (NULL);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
+ gtk_widget_show (label);
+ gtk_container_add (GTK_CONTAINER (fixedtip), label);
+ fixedtip->priv->label = label;
+
+ g_signal_connect (fixedtip, "expose_event",
+ G_CALLBACK (expose_handler), NULL);
+
+ gtk_widget_add_events (GTK_WIDGET (fixedtip), GDK_BUTTON_PRESS_MASK);
+
+ g_signal_connect (fixedtip, "button_press_event",
+ G_CALLBACK (button_press_handler), NULL);
+
+ fixedtip->priv->orientation = GTK_ORIENTATION_HORIZONTAL;
+}
+
+static void
+na_fixed_tip_position (NaFixedTip *fixedtip)
+{
+ GdkScreen *screen;
+ GdkWindow *parent_window;
+ GtkRequisition req;
+ int root_x;
+ int root_y;
+ int parent_width;
+ int parent_height;
+ int screen_width;
+ int screen_height;
+
+ screen = gtk_widget_get_screen (fixedtip->priv->parent);
+ parent_window = gtk_widget_get_window (fixedtip->priv->parent);
+
+ gtk_window_set_screen (GTK_WINDOW (fixedtip), screen);
+
+ gtk_widget_size_request (GTK_WIDGET (fixedtip), &req);
+
+ gdk_window_get_origin (parent_window, &root_x, &root_y);
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ parent_width = gdk_window_get_width(parent_window);
+ parent_height = gdk_window_get_height(parent_window);
+ #else
+ gdk_drawable_get_size(GDK_DRAWABLE(parent_window), &parent_width, &parent_height);
+ #endif
+
+
+ screen_width = gdk_screen_get_width (screen);
+ screen_height = gdk_screen_get_height (screen);
+
+ /* pad between panel and message window */
+#define PAD 5
+
+ if (fixedtip->priv->orientation == GTK_ORIENTATION_VERTICAL)
+ {
+ if (root_x <= screen_width / 2)
+ root_x += parent_width + PAD;
+ else
+ root_x -= req.width + PAD;
+ }
+ else
+ {
+ if (root_y <= screen_height / 2)
+ root_y += parent_height + PAD;
+ else
+ root_y -= req.height + PAD;
+ }
+
+ /* Push onscreen */
+ if ((root_x + req.width) > screen_width)
+ root_x = screen_width - req.width;
+
+ if ((root_y + req.height) > screen_height)
+ root_y = screen_height - req.height;
+
+ gtk_window_move (GTK_WINDOW (fixedtip), root_x, root_y);
+}
+
+static void
+na_fixed_tip_parent_size_allocated (GtkWidget *parent,
+ GtkAllocation *allocation,
+ NaFixedTip *fixedtip)
+{
+ na_fixed_tip_position (fixedtip);
+}
+
+static void
+na_fixed_tip_parent_screen_changed (GtkWidget *parent,
+ GdkScreen *new_screen,
+ NaFixedTip *fixedtip)
+{
+ na_fixed_tip_position (fixedtip);
+}
+
+GtkWidget *
+na_fixed_tip_new (GtkWidget *parent,
+ GtkOrientation orientation)
+{
+ NaFixedTip *fixedtip;
+
+ g_return_val_if_fail (parent != NULL, NULL);
+
+ fixedtip = g_object_new (NA_TYPE_FIXED_TIP,
+ "type", GTK_WINDOW_POPUP,
+ NULL);
+
+ fixedtip->priv->parent = parent;
+
+#if 0
+ //FIXME: would be nice to be able to get the toplevel for the tip, but this
+ //doesn't work
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_toplevel (parent);
+ /*
+ if (toplevel && gtk_widget_is_toplevel (toplevel) && GTK_IS_WINDOW (toplevel))
+ gtk_window_set_transient_for (GTK_WINDOW (fixedtip), GTK_WINDOW (toplevel));
+ */
+#endif
+
+ fixedtip->priv->orientation = orientation;
+
+ //FIXME: would be nice to move the tip when the notification area moves
+ g_signal_connect_object (parent, "size-allocate",
+ G_CALLBACK (na_fixed_tip_parent_size_allocated),
+ fixedtip, 0);
+ g_signal_connect_object (parent, "screen-changed",
+ G_CALLBACK (na_fixed_tip_parent_screen_changed),
+ fixedtip, 0);
+
+ na_fixed_tip_position (fixedtip);
+
+ return GTK_WIDGET (fixedtip);
+}
+
+void
+na_fixed_tip_set_markup (GtkWidget *widget,
+ const char *markup_text)
+{
+ NaFixedTip *fixedtip;
+
+ g_return_if_fail (NA_IS_FIXED_TIP (widget));
+
+ fixedtip = NA_FIXED_TIP (widget);
+
+ gtk_label_set_markup (GTK_LABEL (fixedtip->priv->label),
+ markup_text);
+
+ na_fixed_tip_position (fixedtip);
+}
+
+void
+na_fixed_tip_set_orientation (GtkWidget *widget,
+ GtkOrientation orientation)
+{
+ NaFixedTip *fixedtip;
+
+ g_return_if_fail (NA_IS_FIXED_TIP (widget));
+
+ fixedtip = NA_FIXED_TIP (widget);
+
+ if (orientation == fixedtip->priv->orientation)
+ return;
+
+ fixedtip->priv->orientation = orientation;
+
+ na_fixed_tip_position (fixedtip);
+}
diff --git a/applets/notification_area/fixedtip.h b/applets/notification_area/fixedtip.h
new file mode 100644
index 00000000..3b340c07
--- /dev/null
+++ b/applets/notification_area/fixedtip.h
@@ -0,0 +1,72 @@
+/* Fixed tooltip routine */
+
+/*
+ * Copyright (C) 2001 Havoc Pennington, 2002 Red Hat Inc.
+ * Copyright (C) 2003-2006 Vincent Untz
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#ifndef FIXED_TIP_H
+#define FIXED_TIP_H
+
+#include <gtk/gtk.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NA_TYPE_FIXED_TIP (na_fixed_tip_get_type ())
+#define NA_FIXED_TIP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NA_TYPE_FIXED_TIP, NaFixedTip))
+#define NA_FIXED_TIP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NA_TYPE_FIXED_TIP, NaFixedTipClass))
+#define NA_IS_FIXED_TIP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NA_TYPE_FIXED_TIP))
+#define NA_IS_FIXED_TIP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NA_TYPE_FIXED_TIP))
+#define NA_FIXED_TIP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NA_TYPE_FIXED_TIP, NaFixedTipClass))
+
+typedef struct _NaFixedTip NaFixedTip;
+typedef struct _NaFixedTipPrivate NaFixedTipPrivate;
+typedef struct _NaFixedTipClass NaFixedTipClass;
+
+struct _NaFixedTip
+{
+ GtkWindow parent_instance;
+
+ NaFixedTipPrivate *priv;
+};
+
+struct _NaFixedTipClass
+{
+ GtkWindowClass parent_class;
+
+ void (* clicked) (NaFixedTip *fixedtip);
+};
+
+GType na_fixed_tip_get_type (void);
+
+GtkWidget *na_fixed_tip_new (GtkWidget *parent,
+ GtkOrientation orientation);
+
+void na_fixed_tip_set_markup (GtkWidget *widget,
+ const char *markup_text);
+
+void na_fixed_tip_set_orientation (GtkWidget *widget,
+ GtkOrientation orientation);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* FIXED_TIP_H */
diff --git a/applets/notification_area/main.c b/applets/notification_area/main.c
new file mode 100644
index 00000000..fc11040f
--- /dev/null
+++ b/applets/notification_area/main.c
@@ -0,0 +1,267 @@
+/* System tray main() */
+
+/*
+ * Copyright (C) 2002 Red Hat, Inc.
+ * Copyright (C) 2003-2006 Vincent Untz
+ * Copyright (C) 2011 Perberos
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <string.h>
+
+#include <mate-panel-applet.h>
+#include <mate-panel-applet-mateconf.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "na-tray-manager.h"
+#include "na-tray.h"
+#include "fixedtip.h"
+
+#define NOTIFICATION_AREA_ICON "mate-panel-notification-area"
+
+typedef struct {
+ MatePanelApplet* applet;
+ NaTray* tray;
+} AppletData;
+
+static GtkOrientation get_orientation_from_applet(MatePanelApplet* applet)
+{
+ GtkOrientation orientation;
+
+ switch (mate_panel_applet_get_orient(applet))
+ {
+ case MATE_PANEL_APPLET_ORIENT_LEFT:
+ case MATE_PANEL_APPLET_ORIENT_RIGHT:
+ orientation = GTK_ORIENTATION_VERTICAL;
+ break;
+ case MATE_PANEL_APPLET_ORIENT_UP:
+ case MATE_PANEL_APPLET_ORIENT_DOWN:
+ default:
+ orientation = GTK_ORIENTATION_HORIZONTAL;
+ break;
+ }
+
+ return orientation;
+}
+
+static void help_cb(GtkAction* action, AppletData* data)
+{
+ GError* error = NULL;
+ char* uri;
+ #define NA_HELP_DOC "user-guide"
+
+ uri = g_strdup_printf("ghelp:%s?%s", NA_HELP_DOC, "panels-notification-area");
+
+ gtk_show_uri(gtk_widget_get_screen(GTK_WIDGET(data->applet)), uri, gtk_get_current_event_time(), &error);
+
+ g_free(uri);
+
+ if (error && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ {
+ g_error_free(error);
+ }
+ else if(error)
+ {
+ GtkWidget* dialog;
+ char* primary;
+
+ primary = g_markup_printf_escaped (_("Could not display help document '%s'"), NA_HELP_DOC);
+ dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", primary);
+
+ gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), "%s", error->message);
+
+ g_error_free(error);
+ g_free(primary);
+
+ g_signal_connect(dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL);
+
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), NOTIFICATION_AREA_ICON);
+ gtk_window_set_screen (GTK_WINDOW (dialog), gtk_widget_get_screen (GTK_WIDGET (data->applet)));
+ /* we have no parent window */
+ gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dialog), FALSE);
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Error displaying help document"));
+
+ gtk_widget_show (dialog);
+ }
+}
+
+static void about_cb(GtkAction* action, AppletData* data)
+{
+ const gchar* authors[] = {
+ "Havoc Pennington <[email protected]>",
+ "Anders Carlsson <[email protected]>",
+ "Vincent Untz <[email protected]>",
+ NULL
+ };
+
+ const char* documenters[] = {
+ "Sun GNOME Documentation Team <[email protected]>",
+ NULL
+ };
+
+ const char copyright[] = \
+ "Copyright \xc2\xa9 2002 Red Hat, Inc.\n"
+ "Copyright \xc2\xa9 2003-2006 Vincent Untz\n"
+ "Copyright \xc2\xa9 2011 Perberos";
+
+ gtk_show_about_dialog(NULL,
+ "program-name", _("Notification Area"),
+ "authors", authors,
+ //"comments", _(comments),
+ "copyright", copyright,
+ "documenters", documenters,
+ "logo-icon-name", NOTIFICATION_AREA_ICON,
+ "translator-credits", _("translator-credits"),
+ "version", VERSION,
+ "website", "http://matsusoft.com.ar/projects/mate/",
+ NULL);
+}
+
+static const GtkActionEntry menu_actions [] = {
+ { "SystemTrayHelp", GTK_STOCK_HELP, N_("_Help"),
+ NULL, NULL,
+ G_CALLBACK (help_cb) },
+ { "SystemTrayAbout", GTK_STOCK_ABOUT, N_("_About"),
+ NULL, NULL,
+ G_CALLBACK (about_cb) }
+};
+
+static void applet_change_background(MatePanelApplet* applet, MatePanelAppletBackgroundType type, GdkColor* color, GdkPixmap* pixmap, AppletData* data)
+{
+ na_tray_force_redraw(data->tray);
+}
+
+
+static void applet_change_orientation(MatePanelApplet* applet, MatePanelAppletOrient orient, AppletData* data)
+{
+ na_tray_set_orientation(data->tray, get_orientation_from_applet(applet));
+}
+
+static void applet_destroy(MatePanelApplet* applet, AppletData* data)
+{
+}
+
+static void free_applet_data(AppletData* data)
+{
+ g_slice_free(AppletData, data);
+}
+
+static void on_applet_realized(GtkWidget* widget, gpointer user_data)
+{
+ MatePanelApplet* applet;
+ AppletData* data;
+ NaTray* tray;
+ GtkActionGroup* action_group;
+ gchar* ui_path;
+
+ applet = MATE_PANEL_APPLET(widget);
+ data = g_object_get_data(G_OBJECT(widget), "system-tray-data");
+
+ if (data != NULL)
+ {
+ return;
+ }
+
+ tray = na_tray_new_for_screen(gtk_widget_get_screen(GTK_WIDGET(applet)), get_orientation_from_applet(applet));
+
+ data = g_slice_new(AppletData);
+ data->applet = applet;
+ data->tray = tray;
+
+ g_object_set_data_full(G_OBJECT(applet), "system-tray-data", data, (GDestroyNotify) free_applet_data);
+
+ g_signal_connect(applet, "change_orient", G_CALLBACK (applet_change_orientation), data);
+ g_signal_connect(applet, "change_background", G_CALLBACK (applet_change_background), data);
+ g_signal_connect(applet, "destroy", G_CALLBACK (applet_destroy), data);
+
+ gtk_container_add(GTK_CONTAINER (applet), GTK_WIDGET (tray));
+ gtk_widget_show(GTK_WIDGET(tray));
+
+ action_group = gtk_action_group_new("ClockApplet Menu Actions");
+ gtk_action_group_set_translation_domain(action_group, GETTEXT_PACKAGE);
+ gtk_action_group_add_actions(action_group, menu_actions, G_N_ELEMENTS(menu_actions), data);
+ ui_path = g_build_filename(NOTIFICATION_AREA_MENU_UI_DIR, "notification-area-menu.xml", NULL);
+ mate_panel_applet_setup_menu_from_file(applet, ui_path, action_group);
+ g_free(ui_path);
+ g_object_unref(action_group);
+
+}
+
+static inline void force_no_focus_padding(GtkWidget* widget)
+{
+ static gboolean first_time = TRUE;
+
+ if (first_time)
+ {
+ gtk_rc_parse_string ("\n"
+ " style \"na-tray-style\"\n"
+ " {\n"
+ " GtkWidget::focus-line-width=0\n"
+ " GtkWidget::focus-padding=0\n"
+ " }\n"
+ "\n"
+ " widget \"*.PanelAppletNaTray\" style \"na-tray-style\"\n"
+ "\n");
+
+ first_time = FALSE;
+ }
+
+ /* El widget antes se llamaba na-tray
+ *
+ * Issue #27
+ */
+ gtk_widget_set_name(widget, "PanelAppletNaTray");
+}
+
+static gboolean applet_factory(MatePanelApplet* applet, const gchar* iid, gpointer user_data)
+{
+ AtkObject* atko;
+
+ if (!(strcmp (iid, "NotificationArea") == 0 || strcmp (iid, "SystemTrayApplet") == 0))
+ {
+ return FALSE;
+ }
+
+ /* Defer loading until applet is added to panel so
+ * gtk_widget_get_screen returns correct information */
+ g_signal_connect(GTK_WIDGET(applet), "realize", G_CALLBACK(on_applet_realized), NULL);
+
+ atko = gtk_widget_get_accessible (GTK_WIDGET (applet));
+ atk_object_set_name (atko, _("Panel Notification Area"));
+
+ mate_panel_applet_set_flags(applet, MATE_PANEL_APPLET_HAS_HANDLE | MATE_PANEL_APPLET_EXPAND_MINOR);
+
+ mate_panel_applet_set_background_widget(applet, GTK_WIDGET(applet));
+
+ force_no_focus_padding(GTK_WIDGET(applet));
+
+ #ifndef NOTIFICATION_AREA_INPROCESS
+ gtk_window_set_default_icon_name(NOTIFICATION_AREA_ICON);
+ #endif
+
+ gtk_widget_show_all(GTK_WIDGET(applet));
+ return TRUE;
+}
+
+#ifdef NOTIFICATION_AREA_INPROCESS
+ MATE_PANEL_APPLET_IN_PROCESS_FACTORY("NotificationAreaAppletFactory", PANEL_TYPE_APPLET, "NotificationArea", applet_factory, NULL)
+#else
+ MATE_PANEL_APPLET_OUT_PROCESS_FACTORY("NotificationAreaAppletFactory", PANEL_TYPE_APPLET, "NotificationArea", applet_factory, NULL)
+#endif
diff --git a/applets/notification_area/na-marshal.c b/applets/notification_area/na-marshal.c
new file mode 100644
index 00000000..1f3c2020
--- /dev/null
+++ b/applets/notification_area/na-marshal.c
@@ -0,0 +1,167 @@
+#include "na-marshal.h"
+
+#include <glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_char (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* VOID:OBJECT,OBJECT (na-marshal.list:1) */
+void
+_na_marshal_VOID__OBJECT_OBJECT (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_VOID__OBJECT_OBJECT callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_object (param_values + 1),
+ g_marshal_value_peek_object (param_values + 2),
+ data2);
+}
+
+/* VOID:OBJECT,STRING,LONG,LONG (na-marshal.list:2) */
+void
+_na_marshal_VOID__OBJECT_STRING_LONG_LONG (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__OBJECT_STRING_LONG_LONG) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ glong arg_3,
+ glong arg_4,
+ gpointer data2);
+ register GMarshalFunc_VOID__OBJECT_STRING_LONG_LONG callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 5);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__OBJECT_STRING_LONG_LONG) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_object (param_values + 1),
+ g_marshal_value_peek_string (param_values + 2),
+ g_marshal_value_peek_long (param_values + 3),
+ g_marshal_value_peek_long (param_values + 4),
+ data2);
+}
+
+/* VOID:OBJECT,LONG (na-marshal.list:3) */
+void
+_na_marshal_VOID__OBJECT_LONG (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__OBJECT_LONG) (gpointer data1,
+ gpointer arg_1,
+ glong arg_2,
+ gpointer data2);
+ register GMarshalFunc_VOID__OBJECT_LONG callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__OBJECT_LONG) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_object (param_values + 1),
+ g_marshal_value_peek_long (param_values + 2),
+ data2);
+}
+
diff --git a/applets/notification_area/na-marshal.h b/applets/notification_area/na-marshal.h
new file mode 100644
index 00000000..07918a11
--- /dev/null
+++ b/applets/notification_area/na-marshal.h
@@ -0,0 +1,36 @@
+
+#ifndef ___na_marshal_MARSHAL_H__
+#define ___na_marshal_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* VOID:OBJECT,OBJECT (na-marshal.list:1) */
+extern void _na_marshal_VOID__OBJECT_OBJECT (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+/* VOID:OBJECT,STRING,LONG,LONG (na-marshal.list:2) */
+extern void _na_marshal_VOID__OBJECT_STRING_LONG_LONG (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+/* VOID:OBJECT,LONG (na-marshal.list:3) */
+extern void _na_marshal_VOID__OBJECT_LONG (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+G_END_DECLS
+
+#endif /* ___na_marshal_MARSHAL_H__ */
+
diff --git a/applets/notification_area/na-marshal.list b/applets/notification_area/na-marshal.list
new file mode 100644
index 00000000..e3fc3993
--- /dev/null
+++ b/applets/notification_area/na-marshal.list
@@ -0,0 +1,3 @@
+VOID:OBJECT,OBJECT
+VOID:OBJECT,STRING,LONG,LONG
+VOID:OBJECT,LONG
diff --git a/applets/notification_area/na-tray-child.c b/applets/notification_area/na-tray-child.c
new file mode 100644
index 00000000..b946386b
--- /dev/null
+++ b/applets/notification_area/na-tray-child.c
@@ -0,0 +1,539 @@
+/* na-tray-child.c
+ * Copyright (C) 2002 Anders Carlsson <[email protected]>
+ * Copyright (C) 2003-2006 Vincent Untz
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <string.h>
+
+#include "na-tray-child.h"
+
+#include <glib/gi18n.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
+#include <X11/Xatom.h>
+
+G_DEFINE_TYPE (NaTrayChild, na_tray_child, GTK_TYPE_SOCKET)
+
+static void
+na_tray_child_finalize (GObject *object)
+{
+ G_OBJECT_CLASS (na_tray_child_parent_class)->finalize (object);
+}
+
+static void
+na_tray_child_realize (GtkWidget *widget)
+{
+ NaTrayChild *child = NA_TRAY_CHILD (widget);
+ GdkVisual *visual = gtk_widget_get_visual (widget);
+ GdkWindow *window;
+
+ GTK_WIDGET_CLASS (na_tray_child_parent_class)->realize (widget);
+
+ window = gtk_widget_get_window (widget);
+
+ if (child->has_alpha)
+ {
+ /* We have real transparency with an ARGB visual and the Composite
+ * extension. */
+
+ /* Set a transparent background */
+ GdkColor transparent = { 0, 0, 0, 0 }; /* only pixel=0 matters */
+ gdk_window_set_background (window, &transparent);
+ gdk_window_set_composited (window, TRUE);
+
+ child->parent_relative_bg = FALSE;
+ }
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ else if (visual == gdk_window_get_visual(gdk_window_get_parent(window)))
+ #else
+ else if (visual == gdk_drawable_get_visual(GDK_DRAWABLE(gdk_window_get_parent(window))))
+ #endif
+ {
+ /* Otherwise, if the visual matches the visual of the parent window, we
+ * can use a parent-relative background and fake transparency. */
+ gdk_window_set_back_pixmap (window, NULL, TRUE);
+
+ child->parent_relative_bg = TRUE;
+ }
+ else
+ {
+ /* Nothing to do; the icon will sit on top of an ugly gray box */
+ child->parent_relative_bg = FALSE;
+ }
+
+ gdk_window_set_composited (window, child->composited);
+
+ gtk_widget_set_app_paintable (GTK_WIDGET (child),
+ child->parent_relative_bg || child->has_alpha);
+
+ /* Double-buffering will interfere with the parent-relative-background fake
+ * transparency, since the double-buffer code doesn't know how to fill in the
+ * background of the double-buffer correctly.
+ */
+ gtk_widget_set_double_buffered (GTK_WIDGET (child),
+ child->parent_relative_bg);
+}
+
+static void
+na_tray_child_style_set (GtkWidget *widget,
+ GtkStyle *previous_style)
+{
+ /* The default handler resets the background according to the new style.
+ * We either use a transparent background or a parent-relative background
+ * and ignore the style background. So, just don't chain up.
+ */
+}
+
+#if 0
+/* This is adapted from code that was commented out in na-tray-manager.c; the
+ * code in na-tray-manager.c wouldn't have worked reliably, this will. So maybe
+ * it can be reenabled. On other hand, things seem to be working fine without
+ * it.
+ *
+ * If reenabling, you need to hook it up in na_tray_child_class_init().
+ */
+static void
+na_tray_child_size_request (GtkWidget *widget,
+ GtkRequisition *request)
+{
+ GTK_WIDGET_CLASS (na_tray_child_parent_class)->size_request (widget, request);
+
+ /*
+ * Make sure the icons have a meaningful size ..
+ */
+ if ((request->width < 16) || (request->height < 16))
+ {
+ gint nw = MAX (24, request->width);
+ gint nh = MAX (24, request->height);
+ g_warning ("Tray icon has requested a size of (%ix%i), resizing to (%ix%i)",
+ req.width, req.height, nw, nh);
+ request->width = nw;
+ request->height = nh;
+ }
+}
+#endif
+
+static void
+na_tray_child_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ NaTrayChild *child = NA_TRAY_CHILD (widget);
+ GtkAllocation widget_allocation;
+ gboolean moved, resized;
+
+ gtk_widget_get_allocation (widget, &widget_allocation);
+
+ moved = (allocation->x != widget_allocation.x ||
+ allocation->y != widget_allocation.y);
+ resized = (allocation->width != widget_allocation.width ||
+ allocation->height != widget_allocation.height);
+
+ /* When we are allocating the widget while mapped we need special handling
+ * for both real and fake transparency.
+ *
+ * Real transparency: we need to invalidate and trigger a redraw of the old
+ * and new areas. (GDK really should handle this for us, but doesn't as of
+ * GTK+-2.14)
+ *
+ * Fake transparency: if the widget moved, we need to force the contents to
+ * be redrawn with the new offset for the parent-relative background.
+ */
+ if ((moved || resized) && gtk_widget_get_mapped (widget))
+ {
+ if (na_tray_child_has_alpha (child))
+ gdk_window_invalidate_rect (gdk_window_get_parent (gtk_widget_get_window (widget)),
+ &widget_allocation, FALSE);
+ }
+
+ GTK_WIDGET_CLASS (na_tray_child_parent_class)->size_allocate (widget,
+ allocation);
+
+ if ((moved || resized) && gtk_widget_get_mapped (widget))
+ {
+ if (na_tray_child_has_alpha (NA_TRAY_CHILD (widget)))
+ gdk_window_invalidate_rect (gdk_window_get_parent (gtk_widget_get_window (widget)),
+ &widget_allocation, FALSE);
+ else if (moved && child->parent_relative_bg)
+ na_tray_child_force_redraw (child);
+ }
+}
+
+/* The plug window should completely occupy the area of the child, so we won't
+ * get an expose event. But in case we do (the plug unmaps itself, say), this
+ * expose handler draws with real or fake transparency.
+ */
+static gboolean
+na_tray_child_expose_event (GtkWidget *widget,
+ GdkEventExpose *event)
+{
+ NaTrayChild *child = NA_TRAY_CHILD (widget);
+ GdkWindow *window = gtk_widget_get_window (widget);
+
+ if (na_tray_child_has_alpha (child))
+ {
+ /* Clear to transparent */
+ cairo_t *cr = gdk_cairo_create (window);
+ cairo_set_source_rgba (cr, 0, 0, 0, 0);
+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+ gdk_cairo_region (cr, event->region);
+ cairo_fill (cr);
+ cairo_destroy (cr);
+ }
+ else if (child->parent_relative_bg)
+ {
+ /* Clear to parent-relative pixmap */
+ gdk_window_clear_area (window,
+ event->area.x, event->area.y,
+ event->area.width, event->area.height);
+ }
+
+ return FALSE;
+}
+
+static void
+na_tray_child_init (NaTrayChild *child)
+{
+}
+
+static void
+na_tray_child_class_init (NaTrayChildClass *klass)
+{
+ GObjectClass *gobject_class;
+ GtkWidgetClass *widget_class;
+
+ gobject_class = (GObjectClass *)klass;
+ widget_class = (GtkWidgetClass *)klass;
+
+ gobject_class->finalize = na_tray_child_finalize;
+ widget_class->style_set = na_tray_child_style_set;
+ widget_class->realize = na_tray_child_realize;
+ widget_class->size_allocate = na_tray_child_size_allocate;
+ widget_class->expose_event = na_tray_child_expose_event;
+}
+
+GtkWidget *
+na_tray_child_new (GdkScreen *screen,
+ Window icon_window)
+{
+ XWindowAttributes window_attributes;
+ Display *xdisplay;
+ NaTrayChild *child;
+ GdkVisual *visual;
+ gboolean visual_has_alpha;
+ GdkColormap *colormap;
+ gboolean new_colormap;
+ int red_prec, green_prec, blue_prec, depth;
+ int result;
+
+ g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
+ g_return_val_if_fail (icon_window != None, NULL);
+
+ xdisplay = GDK_SCREEN_XDISPLAY (screen);
+
+ /* We need to determine the visual of the window we are embedding and create
+ * the socket in the same visual.
+ */
+
+ gdk_error_trap_push ();
+ result = XGetWindowAttributes (xdisplay, icon_window,
+ &window_attributes);
+ gdk_error_trap_pop ();
+
+ if (!result) /* Window already gone */
+ return NULL;
+
+ visual = gdk_x11_screen_lookup_visual (screen,
+ window_attributes.visual->visualid);
+ if (!visual) /* Icon window is on another screen? */
+ return NULL;
+
+ new_colormap = FALSE;
+
+ if (visual == gdk_screen_get_rgb_visual (screen))
+ colormap = gdk_screen_get_rgb_colormap (screen);
+ else if (visual == gdk_screen_get_rgba_visual (screen))
+ colormap = gdk_screen_get_rgba_colormap (screen);
+ else if (visual == gdk_screen_get_system_visual (screen))
+ colormap = gdk_screen_get_system_colormap (screen);
+ else
+ {
+ colormap = gdk_colormap_new (visual, FALSE);
+ new_colormap = TRUE;
+ }
+
+ child = g_object_new (NA_TYPE_TRAY_CHILD, NULL);
+ child->icon_window = icon_window;
+
+ gtk_widget_set_colormap (GTK_WIDGET (child), colormap);
+
+ /* We have alpha if the visual has something other than red, green,
+ * and blue */
+ gdk_visual_get_red_pixel_details (visual, NULL, NULL, &red_prec);
+ gdk_visual_get_green_pixel_details (visual, NULL, NULL, &green_prec);
+ gdk_visual_get_blue_pixel_details (visual, NULL, NULL, &blue_prec);
+ depth = gdk_visual_get_depth (visual);
+
+ visual_has_alpha = red_prec + blue_prec + green_prec < depth;
+ child->has_alpha = (visual_has_alpha &&
+ gdk_display_supports_composite (gdk_screen_get_display (screen)));
+
+ child->composited = child->has_alpha;
+
+ if (new_colormap)
+ g_object_unref (colormap);
+
+ return GTK_WIDGET (child);
+}
+
+char *
+na_tray_child_get_title (NaTrayChild *child)
+{
+ char *retval = NULL;
+ GdkDisplay *display;
+ Atom utf8_string, atom, type;
+ int result;
+ int format;
+ gulong nitems;
+ gulong bytes_after;
+ gchar *val;
+
+ g_return_val_if_fail (NA_IS_TRAY_CHILD (child), NULL);
+
+ display = gtk_widget_get_display (GTK_WIDGET (child));
+
+ utf8_string = gdk_x11_get_xatom_by_name_for_display (display, "UTF8_STRING");
+ atom = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_NAME");
+
+ gdk_error_trap_push ();
+
+ result = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display),
+ child->icon_window,
+ atom,
+ 0, G_MAXLONG,
+ False, utf8_string,
+ &type, &format, &nitems,
+ &bytes_after, (guchar **)&val);
+
+ if (gdk_error_trap_pop () || result != Success)
+ return NULL;
+
+ if (type != utf8_string ||
+ format != 8 ||
+ nitems == 0)
+ {
+ if (val)
+ XFree (val);
+ return NULL;
+ }
+
+ if (!g_utf8_validate (val, nitems, NULL))
+ {
+ XFree (val);
+ return NULL;
+ }
+
+ retval = g_strndup (val, nitems);
+
+ XFree (val);
+
+ return retval;
+}
+
+/**
+ * na_tray_child_has_alpha;
+ * @child: a #NaTrayChild
+ *
+ * Checks if the child has an ARGB visual and real alpha transparence.
+ * (as opposed to faked alpha transparency with an parent-relative
+ * background)
+ *
+ * Return value: %TRUE if the child has an alpha transparency
+ */
+gboolean
+na_tray_child_has_alpha (NaTrayChild *child)
+{
+ g_return_val_if_fail (NA_IS_TRAY_CHILD (child), FALSE);
+
+ return child->has_alpha;
+}
+
+/**
+ * na_tray_child_set_composited;
+ * @child: a #NaTrayChild
+ * @composited: %TRUE if the child's window should be redirected
+ *
+ * Sets whether the #GdkWindow of the child should be set redirected
+ * using gdk_window_set_composited(). By default this is based off of
+ * na_tray_child_has_alpha(), but it may be useful to override it in
+ * certain circumstances; for example, if the #NaTrayChild is added
+ * to a parent window and that parent window is composited against the
+ * background.
+ */
+void
+na_tray_child_set_composited (NaTrayChild *child,
+ gboolean composited)
+{
+ g_return_if_fail (NA_IS_TRAY_CHILD (child));
+
+ if (child->composited == composited)
+ return;
+
+ child->composited = composited;
+ if (gtk_widget_get_realized (GTK_WIDGET (child)))
+ gdk_window_set_composited (gtk_widget_get_window (GTK_WIDGET (child)),
+ composited);
+}
+
+/* If we are faking transparency with a window-relative background, force a
+ * redraw of the icon. This should be called if the background changes or if
+ * the child is shifted with respect to the background.
+ */
+void
+na_tray_child_force_redraw (NaTrayChild *child)
+{
+ GtkWidget *widget = GTK_WIDGET (child);
+
+ if (gtk_widget_get_mapped (widget) && child->parent_relative_bg)
+ {
+#if 1
+ /* Sending an ExposeEvent might cause redraw problems if the
+ * icon is expecting the server to clear-to-background before
+ * the redraw. It should be ok for GtkStatusIcon or EggTrayIcon.
+ */
+ Display *xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (widget));
+ XEvent xev;
+ GdkWindow *plug_window;
+ GtkAllocation allocation;
+
+ plug_window = gtk_socket_get_plug_window (GTK_SOCKET (child));
+ gtk_widget_get_allocation (widget, &allocation);
+
+ xev.xexpose.type = Expose;
+ xev.xexpose.window = GDK_WINDOW_XWINDOW (plug_window);
+ xev.xexpose.x = 0;
+ xev.xexpose.y = 0;
+ xev.xexpose.width = allocation.width;
+ xev.xexpose.height = allocation.height;
+ xev.xexpose.count = 0;
+
+ gdk_error_trap_push ();
+ XSendEvent (GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (widget)),
+ xev.xexpose.window,
+ False, ExposureMask,
+ &xev);
+ /* We have to sync to reliably catch errors from the XSendEvent(),
+ * since that is asynchronous.
+ */
+ XSync (xdisplay, False);
+ gdk_error_trap_pop ();
+#else
+ /* Hiding and showing is the safe way to do it, but can result in more
+ * flickering.
+ */
+ gdk_window_hide (widget->window);
+ gdk_window_show (widget->window);
+#endif
+ }
+}
+
+/* from libwnck/xutils.c, comes as LGPLv2+ */
+static char *
+latin1_to_utf8 (const char *latin1)
+{
+ GString *str;
+ const char *p;
+
+ str = g_string_new (NULL);
+
+ p = latin1;
+ while (*p)
+ {
+ g_string_append_unichar (str, (gunichar) *p);
+ ++p;
+ }
+
+ return g_string_free (str, FALSE);
+}
+
+/* derived from libwnck/xutils.c, comes as LGPLv2+ */
+static void
+_get_wmclass (Display *xdisplay,
+ Window xwindow,
+ char **res_class,
+ char **res_name)
+{
+ XClassHint ch;
+
+ ch.res_name = NULL;
+ ch.res_class = NULL;
+
+ gdk_error_trap_push ();
+ XGetClassHint (xdisplay, xwindow, &ch);
+ gdk_error_trap_pop ();
+
+ if (res_class)
+ *res_class = NULL;
+
+ if (res_name)
+ *res_name = NULL;
+
+ if (ch.res_name)
+ {
+ if (res_name)
+ *res_name = latin1_to_utf8 (ch.res_name);
+
+ XFree (ch.res_name);
+ }
+
+ if (ch.res_class)
+ {
+ if (res_class)
+ *res_class = latin1_to_utf8 (ch.res_class);
+
+ XFree (ch.res_class);
+ }
+}
+
+/**
+ * na_tray_child_get_wm_class;
+ * @child: a #NaTrayChild
+ * @res_name: return location for a string containing the application name of
+ * @child, or %NULL
+ * @res_class: return location for a string containing the application class of
+ * @child, or %NULL
+ *
+ * Fetches the resource associated with @child.
+ */
+void
+na_tray_child_get_wm_class (NaTrayChild *child,
+ char **res_name,
+ char **res_class)
+{
+ GdkDisplay *display;
+
+ g_return_if_fail (NA_IS_TRAY_CHILD (child));
+
+ display = gtk_widget_get_display (GTK_WIDGET (child));
+
+ _get_wmclass (GDK_DISPLAY_XDISPLAY (display),
+ child->icon_window,
+ res_class,
+ res_name);
+}
diff --git a/applets/notification_area/na-tray-child.h b/applets/notification_area/na-tray-child.h
new file mode 100644
index 00000000..735770ac
--- /dev/null
+++ b/applets/notification_area/na-tray-child.h
@@ -0,0 +1,75 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* na-tray-child.h
+ * Copyright (C) 2002 Anders Carlsson <[email protected]>
+ * Copyright (C) 2003-2006 Vincent Untz
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __NA_TRAY_CHILD_H__
+#define __NA_TRAY_CHILD_H__
+
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NA_TYPE_TRAY_CHILD (na_tray_child_get_type ())
+#define NA_TRAY_CHILD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NA_TYPE_TRAY_CHILD, NaTrayChild))
+#define NA_TRAY_CHILD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NA_TYPE_TRAY_CHILD, NaTrayChildClass))
+#define NA_IS_TRAY_CHILD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NA_TYPE_TRAY_CHILD))
+#define NA_IS_TRAY_CHILD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NA_TYPE_TRAY_CHILD))
+#define NA_TRAY_CHILD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NA_TYPE_TRAY_CHILD, NaTrayChildClass))
+
+typedef struct _NaTrayChild NaTrayChild;
+typedef struct _NaTrayChildClass NaTrayChildClass;
+typedef struct _NaTrayChildChild NaTrayChildChild;
+
+struct _NaTrayChild
+{
+ GtkSocket parent_instance;
+ Window icon_window;
+ guint has_alpha : 1;
+ guint composited : 1;
+ guint parent_relative_bg : 1;
+};
+
+struct _NaTrayChildClass
+{
+ GtkSocketClass parent_class;
+};
+
+GType na_tray_child_get_type (void);
+
+GtkWidget *na_tray_child_new (GdkScreen *screen,
+ Window icon_window);
+char *na_tray_child_get_title (NaTrayChild *child);
+gboolean na_tray_child_has_alpha (NaTrayChild *child);
+void na_tray_child_set_composited (NaTrayChild *child,
+ gboolean composited);
+void na_tray_child_force_redraw (NaTrayChild *child);
+void na_tray_child_get_wm_class (NaTrayChild *child,
+ char **res_name,
+ char **res_class);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NA_TRAY_CHILD_H__ */
diff --git a/applets/notification_area/na-tray-manager.c b/applets/notification_area/na-tray-manager.c
new file mode 100644
index 00000000..1c582a62
--- /dev/null
+++ b/applets/notification_area/na-tray-manager.c
@@ -0,0 +1,859 @@
+/* na-tray-manager.c
+ * Copyright (C) 2002 Anders Carlsson <[email protected]>
+ * Copyright (C) 2003-2006 Vincent Untz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Used to be: eggtraymanager.c
+ */
+
+#include <config.h>
+#include <string.h>
+#include <libintl.h>
+
+#include "na-tray-manager.h"
+
+#include <gdkconfig.h>
+#include <glib/gi18n.h>
+#if defined (GDK_WINDOWING_X11)
+#include <gdk/gdkx.h>
+#include <X11/Xatom.h>
+#elif defined (GDK_WINDOWING_WIN32)
+#include <gdk/gdkwin32.h>
+#endif
+#include <gtk/gtk.h>
+
+#include "na-marshal.h"
+
+/* Signals */
+enum
+{
+ TRAY_ICON_ADDED,
+ TRAY_ICON_REMOVED,
+ MESSAGE_SENT,
+ MESSAGE_CANCELLED,
+ LOST_SELECTION,
+ LAST_SIGNAL
+};
+
+enum {
+ PROP_0,
+ PROP_ORIENTATION
+};
+
+typedef struct
+{
+ long id, len;
+ long remaining_len;
+
+ long timeout;
+ char *str;
+#ifdef GDK_WINDOWING_X11
+ Window window;
+#endif
+} PendingMessage;
+
+static guint manager_signals[LAST_SIGNAL];
+
+#define SYSTEM_TRAY_REQUEST_DOCK 0
+#define SYSTEM_TRAY_BEGIN_MESSAGE 1
+#define SYSTEM_TRAY_CANCEL_MESSAGE 2
+
+#define SYSTEM_TRAY_ORIENTATION_HORZ 0
+#define SYSTEM_TRAY_ORIENTATION_VERT 1
+
+#ifdef GDK_WINDOWING_X11
+static gboolean na_tray_manager_check_running_screen_x11 (GdkScreen *screen);
+#endif
+
+static void na_tray_manager_finalize (GObject *object);
+static void na_tray_manager_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void na_tray_manager_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+
+static void na_tray_manager_unmanage (NaTrayManager *manager);
+
+G_DEFINE_TYPE (NaTrayManager, na_tray_manager, G_TYPE_OBJECT)
+
+static void
+na_tray_manager_init (NaTrayManager *manager)
+{
+ manager->invisible = NULL;
+ manager->socket_table = g_hash_table_new (NULL, NULL);
+}
+
+static void
+na_tray_manager_class_init (NaTrayManagerClass *klass)
+{
+ GObjectClass *gobject_class;
+
+ gobject_class = (GObjectClass *)klass;
+
+ gobject_class->finalize = na_tray_manager_finalize;
+ gobject_class->set_property = na_tray_manager_set_property;
+ gobject_class->get_property = na_tray_manager_get_property;
+
+ g_object_class_install_property (gobject_class,
+ PROP_ORIENTATION,
+ g_param_spec_enum ("orientation",
+ "orientation",
+ "orientation",
+ GTK_TYPE_ORIENTATION,
+ GTK_ORIENTATION_HORIZONTAL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB));
+
+ manager_signals[TRAY_ICON_ADDED] =
+ g_signal_new ("tray_icon_added",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NaTrayManagerClass, tray_icon_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ GTK_TYPE_SOCKET);
+
+ manager_signals[TRAY_ICON_REMOVED] =
+ g_signal_new ("tray_icon_removed",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NaTrayManagerClass, tray_icon_removed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ GTK_TYPE_SOCKET);
+ manager_signals[MESSAGE_SENT] =
+ g_signal_new ("message_sent",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NaTrayManagerClass, message_sent),
+ NULL, NULL,
+ _na_marshal_VOID__OBJECT_STRING_LONG_LONG,
+ G_TYPE_NONE, 4,
+ GTK_TYPE_SOCKET,
+ G_TYPE_STRING,
+ G_TYPE_LONG,
+ G_TYPE_LONG);
+ manager_signals[MESSAGE_CANCELLED] =
+ g_signal_new ("message_cancelled",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NaTrayManagerClass, message_cancelled),
+ NULL, NULL,
+ _na_marshal_VOID__OBJECT_LONG,
+ G_TYPE_NONE, 2,
+ GTK_TYPE_SOCKET,
+ G_TYPE_LONG);
+ manager_signals[LOST_SELECTION] =
+ g_signal_new ("lost_selection",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NaTrayManagerClass, lost_selection),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+#if defined (GDK_WINDOWING_X11)
+ /* Nothing */
+#elif defined (GDK_WINDOWING_WIN32)
+ g_warning ("Port NaTrayManager to Win32");
+#else
+ g_warning ("Port NaTrayManager to this GTK+ backend");
+#endif
+}
+
+static void
+na_tray_manager_finalize (GObject *object)
+{
+ NaTrayManager *manager;
+
+ manager = NA_TRAY_MANAGER (object);
+
+ na_tray_manager_unmanage (manager);
+
+ g_list_free (manager->messages);
+ g_hash_table_destroy (manager->socket_table);
+
+ G_OBJECT_CLASS (na_tray_manager_parent_class)->finalize (object);
+}
+
+static void
+na_tray_manager_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NaTrayManager *manager = NA_TRAY_MANAGER (object);
+
+ switch (prop_id)
+ {
+ case PROP_ORIENTATION:
+ na_tray_manager_set_orientation (manager, g_value_get_enum (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+na_tray_manager_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NaTrayManager *manager = NA_TRAY_MANAGER (object);
+
+ switch (prop_id)
+ {
+ case PROP_ORIENTATION:
+ g_value_set_enum (value, manager->orientation);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+NaTrayManager *
+na_tray_manager_new (void)
+{
+ NaTrayManager *manager;
+
+ manager = g_object_new (NA_TYPE_TRAY_MANAGER, NULL);
+
+ return manager;
+}
+
+#ifdef GDK_WINDOWING_X11
+
+static gboolean
+na_tray_manager_plug_removed (GtkSocket *socket,
+ NaTrayManager *manager)
+{
+ NaTrayChild *child = NA_TRAY_CHILD (socket);
+
+ g_hash_table_remove (manager->socket_table,
+ GINT_TO_POINTER (child->icon_window));
+ g_signal_emit (manager, manager_signals[TRAY_ICON_REMOVED], 0, child);
+
+ /* This destroys the socket. */
+ return FALSE;
+}
+
+static void
+na_tray_manager_handle_dock_request (NaTrayManager *manager,
+ XClientMessageEvent *xevent)
+{
+ Window icon_window = xevent->data.l[2];
+ GtkWidget *child;
+
+ if (g_hash_table_lookup (manager->socket_table,
+ GINT_TO_POINTER (icon_window)))
+ {
+ /* We already got this notification earlier, ignore this one */
+ return;
+ }
+
+ child = na_tray_child_new (manager->screen, icon_window);
+ if (child == NULL) /* already gone or other error */
+ return;
+
+ g_signal_emit (manager, manager_signals[TRAY_ICON_ADDED], 0,
+ child);
+
+ /* If the child wasn't attached, then destroy it */
+
+ if (!GTK_IS_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (child))))
+ {
+ gtk_widget_destroy (child);
+ return;
+ }
+
+ g_signal_connect (child, "plug_removed",
+ G_CALLBACK (na_tray_manager_plug_removed), manager);
+
+ gtk_socket_add_id (GTK_SOCKET (child), icon_window);
+
+ if (!gtk_socket_get_plug_window (GTK_SOCKET (child)))
+ {
+ /* Embedding failed, we won't get a plug-removed signal */
+ g_signal_emit (manager, manager_signals[TRAY_ICON_REMOVED], 0, child);
+ gtk_widget_destroy (child);
+ return;
+ }
+
+ g_hash_table_insert (manager->socket_table,
+ GINT_TO_POINTER (icon_window), child);
+ gtk_widget_show (child);
+}
+
+static void
+pending_message_free (PendingMessage *message)
+{
+ g_free (message->str);
+ g_free (message);
+}
+
+static GdkFilterReturn
+na_tray_manager_handle_client_message_message_data (GdkXEvent *xev,
+ GdkEvent *event,
+ gpointer data)
+{
+ XClientMessageEvent *xevent;
+ NaTrayManager *manager;
+ GList *p;
+ int len;
+
+ xevent = (XClientMessageEvent *) xev;
+ manager = data;
+
+ /* Try to see if we can find the pending message in the list */
+ for (p = manager->messages; p; p = p->next)
+ {
+ PendingMessage *msg = p->data;
+
+ if (xevent->window == msg->window)
+ {
+ /* Append the message */
+ len = MIN (msg->remaining_len, 20);
+
+ memcpy ((msg->str + msg->len - msg->remaining_len),
+ &xevent->data, len);
+ msg->remaining_len -= len;
+
+ if (msg->remaining_len == 0)
+ {
+ GtkSocket *socket;
+
+ socket = g_hash_table_lookup (manager->socket_table,
+ GINT_TO_POINTER (msg->window));
+
+ if (socket)
+ g_signal_emit (manager, manager_signals[MESSAGE_SENT], 0,
+ socket, msg->str, msg->id, msg->timeout);
+
+ pending_message_free (msg);
+ manager->messages = g_list_remove_link (manager->messages, p);
+ g_list_free_1 (p);
+ }
+
+ break;
+ }
+ }
+
+ return GDK_FILTER_REMOVE;
+}
+
+static void
+na_tray_manager_handle_begin_message (NaTrayManager *manager,
+ XClientMessageEvent *xevent)
+{
+ GtkSocket *socket;
+ GList *p;
+ PendingMessage *msg;
+ long timeout;
+ long len;
+ long id;
+
+ socket = g_hash_table_lookup (manager->socket_table,
+ GINT_TO_POINTER (xevent->window));
+ /* we don't know about this tray icon, so ignore the message */
+ if (!socket)
+ return;
+
+ /* Check if the same message is already in the queue and remove it if so */
+ for (p = manager->messages; p; p = p->next)
+ {
+ PendingMessage *pmsg = p->data;
+
+ if (xevent->window == pmsg->window &&
+ xevent->data.l[4] == pmsg->id)
+ {
+ /* Hmm, we found it, now remove it */
+ pending_message_free (pmsg);
+ manager->messages = g_list_remove_link (manager->messages, p);
+ g_list_free_1 (p);
+ break;
+ }
+ }
+
+ timeout = xevent->data.l[2];
+ len = xevent->data.l[3];
+ id = xevent->data.l[4];
+
+ if (len == 0)
+ {
+ g_signal_emit (manager, manager_signals[MESSAGE_SENT], 0,
+ socket, "", id, timeout);
+ }
+ else
+ {
+ /* Now add the new message to the queue */
+ msg = g_new0 (PendingMessage, 1);
+ msg->window = xevent->window;
+ msg->timeout = timeout;
+ msg->len = len;
+ msg->id = id;
+ msg->remaining_len = msg->len;
+ msg->str = g_malloc (msg->len + 1);
+ msg->str[msg->len] = '\0';
+ manager->messages = g_list_prepend (manager->messages, msg);
+ }
+}
+
+static void
+na_tray_manager_handle_cancel_message (NaTrayManager *manager,
+ XClientMessageEvent *xevent)
+{
+ GList *p;
+ GtkSocket *socket;
+
+ /* Check if the message is in the queue and remove it if so */
+ for (p = manager->messages; p; p = p->next)
+ {
+ PendingMessage *msg = p->data;
+
+ if (xevent->window == msg->window &&
+ xevent->data.l[4] == msg->id)
+ {
+ pending_message_free (msg);
+ manager->messages = g_list_remove_link (manager->messages, p);
+ g_list_free_1 (p);
+ break;
+ }
+ }
+
+ socket = g_hash_table_lookup (manager->socket_table,
+ GINT_TO_POINTER (xevent->window));
+
+ if (socket)
+ {
+ g_signal_emit (manager, manager_signals[MESSAGE_CANCELLED], 0,
+ socket, xevent->data.l[2]);
+ }
+}
+
+static GdkFilterReturn
+na_tray_manager_handle_client_message_opcode (GdkXEvent *xev,
+ GdkEvent *event,
+ gpointer data)
+{
+ XClientMessageEvent *xevent;
+ NaTrayManager *manager;
+
+ xevent = (XClientMessageEvent *) xev;
+ manager = data;
+
+ switch (xevent->data.l[1])
+ {
+ case SYSTEM_TRAY_REQUEST_DOCK:
+ /* Ignore this one since we don't know on which window this was received
+ * and so we can't know for which screen this is. It will be handled
+ * in na_tray_manager_window_filter() since we also receive it there */
+ break;
+
+ case SYSTEM_TRAY_BEGIN_MESSAGE:
+ na_tray_manager_handle_begin_message (manager, xevent);
+ return GDK_FILTER_REMOVE;
+
+ case SYSTEM_TRAY_CANCEL_MESSAGE:
+ na_tray_manager_handle_cancel_message (manager, xevent);
+ return GDK_FILTER_REMOVE;
+ default:
+ break;
+ }
+
+ return GDK_FILTER_CONTINUE;
+}
+
+static GdkFilterReturn
+na_tray_manager_window_filter (GdkXEvent *xev,
+ GdkEvent *event,
+ gpointer data)
+{
+ XEvent *xevent = (GdkXEvent *)xev;
+ NaTrayManager *manager = data;
+
+ if (xevent->type == ClientMessage)
+ {
+ /* We handle this client message here. See comment in
+ * na_tray_manager_handle_client_message_opcode() for details */
+ if (xevent->xclient.message_type == manager->opcode_atom &&
+ xevent->xclient.data.l[1] == SYSTEM_TRAY_REQUEST_DOCK)
+ {
+ na_tray_manager_handle_dock_request (manager,
+ (XClientMessageEvent *) xevent);
+ return GDK_FILTER_REMOVE;
+ }
+ }
+ else if (xevent->type == SelectionClear)
+ {
+ g_signal_emit (manager, manager_signals[LOST_SELECTION], 0);
+ na_tray_manager_unmanage (manager);
+ }
+
+ return GDK_FILTER_CONTINUE;
+}
+
+#if 0
+//FIXME investigate why this doesn't work
+static gboolean
+na_tray_manager_selection_clear_event (GtkWidget *widget,
+ GdkEventSelection *event,
+ NaTrayManager *manager)
+{
+ g_signal_emit (manager, manager_signals[LOST_SELECTION], 0);
+ na_tray_manager_unmanage (manager);
+
+ return FALSE;
+}
+#endif
+#endif
+
+static void
+na_tray_manager_unmanage (NaTrayManager *manager)
+{
+#ifdef GDK_WINDOWING_X11
+ GdkDisplay *display;
+ guint32 timestamp;
+ GtkWidget *invisible;
+ GdkWindow *window;
+
+ if (manager->invisible == NULL)
+ return;
+
+ invisible = manager->invisible;
+ window = gtk_widget_get_window (invisible);
+
+ g_assert (GTK_IS_INVISIBLE (invisible));
+ g_assert (gtk_widget_get_realized (invisible));
+ g_assert (GDK_IS_WINDOW (window));
+
+ display = gtk_widget_get_display (invisible);
+
+ if (gdk_selection_owner_get_for_display (display, manager->selection_atom) ==
+ window)
+ {
+ timestamp = gdk_x11_get_server_time (window);
+ gdk_selection_owner_set_for_display (display,
+ NULL,
+ manager->selection_atom,
+ timestamp,
+ TRUE);
+ }
+
+ //FIXME: we should also use gdk_remove_client_message_filter when it's
+ //available
+ // See bug #351254
+ gdk_window_remove_filter (window,
+ na_tray_manager_window_filter, manager);
+
+ manager->invisible = NULL; /* prior to destroy for reentrancy paranoia */
+ gtk_widget_destroy (invisible);
+ g_object_unref (G_OBJECT (invisible));
+#endif
+}
+
+static void
+na_tray_manager_set_orientation_property (NaTrayManager *manager)
+{
+#ifdef GDK_WINDOWING_X11
+ GdkWindow *window;
+ GdkDisplay *display;
+ Atom orientation_atom;
+ gulong data[1];
+
+ if (!manager->invisible)
+ return;
+ window = gtk_widget_get_window (manager->invisible);
+ if (!window)
+ return;
+
+ display = gtk_widget_get_display (manager->invisible);
+ orientation_atom = gdk_x11_get_xatom_by_name_for_display (display,
+ "_NET_SYSTEM_TRAY_ORIENTATION");
+
+ data[0] = manager->orientation == GTK_ORIENTATION_HORIZONTAL ?
+ SYSTEM_TRAY_ORIENTATION_HORZ :
+ SYSTEM_TRAY_ORIENTATION_VERT;
+
+ XChangeProperty (GDK_DISPLAY_XDISPLAY (display),
+ GDK_WINDOW_XWINDOW (window),
+ orientation_atom,
+ XA_CARDINAL, 32,
+ PropModeReplace,
+ (guchar *) &data, 1);
+#endif
+}
+
+static void
+na_tray_manager_set_visual_property (NaTrayManager *manager)
+{
+#ifdef GDK_WINDOWING_X11
+ GdkWindow *window;
+ GdkDisplay *display;
+ Visual *xvisual;
+ Atom visual_atom;
+ gulong data[1];
+
+ if (!manager->invisible)
+ return;
+ window = gtk_widget_get_window (manager->invisible);
+ if (!window)
+ return;
+
+ /* The visual property is a hint to the tray icons as to what visual they
+ * should use for their windows. If the X server has RGBA colormaps, then
+ * we tell the tray icons to use a RGBA colormap and we'll composite the
+ * icon onto its parents with real transparency. Otherwise, we just tell
+ * the icon to use our colormap, and we'll do some hacks with parent
+ * relative backgrounds to simulate transparency.
+ */
+
+ display = gtk_widget_get_display (manager->invisible);
+ visual_atom = gdk_x11_get_xatom_by_name_for_display (display,
+ "_NET_SYSTEM_TRAY_VISUAL");
+
+ if (gdk_screen_get_rgba_visual (manager->screen) != NULL &&
+ gdk_display_supports_composite (display))
+ {
+ xvisual = GDK_VISUAL_XVISUAL (gdk_screen_get_rgba_visual (manager->screen));
+ }
+ else
+ {
+ /* We actually want the visual of the tray where the icons will
+ * be embedded. In almost all cases, this will be the same as the visual
+ * of the screen.
+ */
+ GdkColormap *colormap;
+
+ colormap = gdk_screen_get_default_colormap (manager->screen);
+ xvisual = GDK_VISUAL_XVISUAL (gdk_colormap_get_visual (colormap));
+ }
+
+ data[0] = XVisualIDFromVisual (xvisual);
+
+ XChangeProperty (GDK_DISPLAY_XDISPLAY (display),
+ GDK_WINDOW_XWINDOW (window),
+ visual_atom,
+ XA_VISUALID, 32,
+ PropModeReplace,
+ (guchar *) &data, 1);
+#endif
+}
+
+#ifdef GDK_WINDOWING_X11
+
+static gboolean
+na_tray_manager_manage_screen_x11 (NaTrayManager *manager,
+ GdkScreen *screen)
+{
+ GdkDisplay *display;
+ Screen *xscreen;
+ GtkWidget *invisible;
+ GdkWindow *window;
+ char *selection_atom_name;
+ guint32 timestamp;
+
+ g_return_val_if_fail (NA_IS_TRAY_MANAGER (manager), FALSE);
+ g_return_val_if_fail (manager->screen == NULL, FALSE);
+
+ /* If there's already a manager running on the screen
+ * we can't create another one.
+ */
+#if 0
+ if (na_tray_manager_check_running_screen_x11 (screen))
+ return FALSE;
+#endif
+
+ manager->screen = screen;
+
+ display = gdk_screen_get_display (screen);
+ xscreen = GDK_SCREEN_XSCREEN (screen);
+
+ invisible = gtk_invisible_new_for_screen (screen);
+ gtk_widget_realize (invisible);
+
+ gtk_widget_add_events (invisible,
+ GDK_PROPERTY_CHANGE_MASK | GDK_STRUCTURE_MASK);
+
+ selection_atom_name = g_strdup_printf ("_NET_SYSTEM_TRAY_S%d",
+ gdk_screen_get_number (screen));
+ manager->selection_atom = gdk_atom_intern (selection_atom_name, FALSE);
+ g_free (selection_atom_name);
+
+ manager->invisible = invisible;
+ g_object_ref (G_OBJECT (manager->invisible));
+
+ na_tray_manager_set_orientation_property (manager);
+ na_tray_manager_set_visual_property (manager);
+
+ window = gtk_widget_get_window (invisible);
+
+ timestamp = gdk_x11_get_server_time (window);
+
+ /* Check if we could set the selection owner successfully */
+ if (gdk_selection_owner_set_for_display (display,
+ window,
+ manager->selection_atom,
+ timestamp,
+ TRUE))
+ {
+ XClientMessageEvent xev;
+ GdkAtom opcode_atom;
+ GdkAtom message_data_atom;
+
+ xev.type = ClientMessage;
+ xev.window = RootWindowOfScreen (xscreen);
+ xev.message_type = gdk_x11_get_xatom_by_name_for_display (display,
+ "MANAGER");
+
+ xev.format = 32;
+ xev.data.l[0] = timestamp;
+ xev.data.l[1] = gdk_x11_atom_to_xatom_for_display (display,
+ manager->selection_atom);
+ xev.data.l[2] = GDK_WINDOW_XWINDOW (window);
+ xev.data.l[3] = 0; /* manager specific data */
+ xev.data.l[4] = 0; /* manager specific data */
+
+ XSendEvent (GDK_DISPLAY_XDISPLAY (display),
+ RootWindowOfScreen (xscreen),
+ False, StructureNotifyMask, (XEvent *)&xev);
+
+ opcode_atom = gdk_atom_intern ("_NET_SYSTEM_TRAY_OPCODE", FALSE);
+ manager->opcode_atom = gdk_x11_atom_to_xatom_for_display (display,
+ opcode_atom);
+
+ message_data_atom = gdk_atom_intern ("_NET_SYSTEM_TRAY_MESSAGE_DATA",
+ FALSE);
+
+ /* Add a window filter */
+#if 0
+ /* This is for when we lose the selection of _NET_SYSTEM_TRAY_Sx */
+ g_signal_connect (invisible, "selection-clear-event",
+ G_CALLBACK (na_tray_manager_selection_clear_event),
+ manager);
+#endif
+ /* This is for SYSTEM_TRAY_REQUEST_DOCK and SelectionClear */
+ gdk_window_add_filter (window,
+ na_tray_manager_window_filter, manager);
+ /* This is for SYSTEM_TRAY_BEGIN_MESSAGE and SYSTEM_TRAY_CANCEL_MESSAGE */
+ gdk_display_add_client_message_filter (display, opcode_atom,
+ na_tray_manager_handle_client_message_opcode,
+ manager);
+ /* This is for _NET_SYSTEM_TRAY_MESSAGE_DATA */
+ gdk_display_add_client_message_filter (display, message_data_atom,
+ na_tray_manager_handle_client_message_message_data,
+ manager);
+ return TRUE;
+ }
+ else
+ {
+ gtk_widget_destroy (invisible);
+ g_object_unref (invisible);
+ manager->invisible = NULL;
+
+ manager->screen = NULL;
+
+ return FALSE;
+ }
+}
+
+#endif
+
+gboolean
+na_tray_manager_manage_screen (NaTrayManager *manager,
+ GdkScreen *screen)
+{
+ g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
+ g_return_val_if_fail (manager->screen == NULL, FALSE);
+
+#ifdef GDK_WINDOWING_X11
+ return na_tray_manager_manage_screen_x11 (manager, screen);
+#else
+ return FALSE;
+#endif
+}
+
+#ifdef GDK_WINDOWING_X11
+
+static gboolean
+na_tray_manager_check_running_screen_x11 (GdkScreen *screen)
+{
+ GdkDisplay *display;
+ Atom selection_atom;
+ char *selection_atom_name;
+
+ display = gdk_screen_get_display (screen);
+ selection_atom_name = g_strdup_printf ("_NET_SYSTEM_TRAY_S%d",
+ gdk_screen_get_number (screen));
+ selection_atom = gdk_x11_get_xatom_by_name_for_display (display,
+ selection_atom_name);
+ g_free (selection_atom_name);
+
+ if (XGetSelectionOwner (GDK_DISPLAY_XDISPLAY (display),
+ selection_atom) != None)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+#endif
+
+gboolean
+na_tray_manager_check_running (GdkScreen *screen)
+{
+ g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
+
+#ifdef GDK_WINDOWING_X11
+ return na_tray_manager_check_running_screen_x11 (screen);
+#else
+ return FALSE;
+#endif
+}
+
+void
+na_tray_manager_set_orientation (NaTrayManager *manager,
+ GtkOrientation orientation)
+{
+ g_return_if_fail (NA_IS_TRAY_MANAGER (manager));
+
+ if (manager->orientation != orientation)
+ {
+ manager->orientation = orientation;
+
+ na_tray_manager_set_orientation_property (manager);
+
+ g_object_notify (G_OBJECT (manager), "orientation");
+ }
+}
+
+GtkOrientation
+na_tray_manager_get_orientation (NaTrayManager *manager)
+{
+ g_return_val_if_fail (NA_IS_TRAY_MANAGER (manager), GTK_ORIENTATION_HORIZONTAL);
+
+ return manager->orientation;
+}
diff --git a/applets/notification_area/na-tray-manager.h b/applets/notification_area/na-tray-manager.h
new file mode 100644
index 00000000..be678a28
--- /dev/null
+++ b/applets/notification_area/na-tray-manager.h
@@ -0,0 +1,101 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* na-tray-manager.h
+ * Copyright (C) 2002 Anders Carlsson <[email protected]>
+ * Copyright (C) 2003-2006 Vincent Untz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Used to be: eggtraymanager.h
+ */
+
+#ifndef __NA_TRAY_MANAGER_H__
+#define __NA_TRAY_MANAGER_H__
+
+#ifdef GDK_WINDOWING_X11
+#include <gdk/gdkx.h>
+#endif
+#include <gtk/gtk.h>
+
+#include "na-tray-child.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NA_TYPE_TRAY_MANAGER (na_tray_manager_get_type ())
+#define NA_TRAY_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NA_TYPE_TRAY_MANAGER, NaTrayManager))
+#define NA_TRAY_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NA_TYPE_TRAY_MANAGER, NaTrayManagerClass))
+#define NA_IS_TRAY_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NA_TYPE_TRAY_MANAGER))
+#define NA_IS_TRAY_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NA_TYPE_TRAY_MANAGER))
+#define NA_TRAY_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NA_TYPE_TRAY_MANAGER, NaTrayManagerClass))
+
+typedef struct _NaTrayManager NaTrayManager;
+typedef struct _NaTrayManagerClass NaTrayManagerClass;
+
+struct _NaTrayManager
+{
+ GObject parent_instance;
+
+#ifdef GDK_WINDOWING_X11
+ GdkAtom selection_atom;
+ Atom opcode_atom;
+#endif
+
+ GtkWidget *invisible;
+ GdkScreen *screen;
+ GtkOrientation orientation;
+
+ GList *messages;
+ GHashTable *socket_table;
+};
+
+struct _NaTrayManagerClass
+{
+ GObjectClass parent_class;
+
+ void (* tray_icon_added) (NaTrayManager *manager,
+ NaTrayChild *child);
+ void (* tray_icon_removed) (NaTrayManager *manager,
+ NaTrayChild *child);
+
+ void (* message_sent) (NaTrayManager *manager,
+ NaTrayChild *child,
+ const gchar *message,
+ glong id,
+ glong timeout);
+
+ void (* message_cancelled) (NaTrayManager *manager,
+ NaTrayChild *child,
+ glong id);
+
+ void (* lost_selection) (NaTrayManager *manager);
+};
+
+GType na_tray_manager_get_type (void);
+
+gboolean na_tray_manager_check_running (GdkScreen *screen);
+NaTrayManager *na_tray_manager_new (void);
+gboolean na_tray_manager_manage_screen (NaTrayManager *manager,
+ GdkScreen *screen);
+void na_tray_manager_set_orientation (NaTrayManager *manager,
+ GtkOrientation orientation);
+GtkOrientation na_tray_manager_get_orientation (NaTrayManager *manager);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NA_TRAY_MANAGER_H__ */
diff --git a/applets/notification_area/na-tray.c b/applets/notification_area/na-tray.c
new file mode 100644
index 00000000..b866e880
--- /dev/null
+++ b/applets/notification_area/na-tray.c
@@ -0,0 +1,837 @@
+/*
+ * Copyright (C) 2002 Red Hat, Inc.
+ * Copyright (C) 2003-2006 Vincent Untz
+ * Copyright (C) 2007 Christian Persch
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <string.h>
+
+#include <mate-panel-applet.h>
+#include <mate-panel-applet-mateconf.h>
+
+#include <gtk/gtk.h>
+
+#include "na-tray-manager.h"
+#include "fixedtip.h"
+
+#include "na-tray.h"
+
+#define ICON_SPACING 1
+#define MIN_BOX_SIZE 3
+
+typedef struct
+{
+ NaTrayManager *tray_manager;
+ GSList *all_trays;
+ GHashTable *icon_table;
+ GHashTable *tip_table;
+} TraysScreen;
+
+struct _NaTrayPrivate
+{
+ GdkScreen *screen;
+ TraysScreen *trays_screen;
+
+ GtkWidget *box;
+ GtkWidget *frame;
+
+ guint idle_redraw_id;
+
+ GtkOrientation orientation;
+};
+
+typedef struct
+{
+ char *text;
+ glong id;
+ glong timeout;
+} IconTipBuffer;
+
+typedef struct
+{
+ NaTray *tray; /* tray containing the tray icon */
+ GtkWidget *icon; /* tray icon sending the message */
+ GtkWidget *fixedtip;
+ guint source_id;
+ glong id; /* id of the current message */
+ GSList *buffer; /* buffered messages */
+} IconTip;
+
+enum
+{
+ PROP_0,
+ PROP_ORIENTATION,
+ PROP_SCREEN
+};
+
+static gboolean initialized = FALSE;
+static TraysScreen *trays_screens = NULL;
+
+static void icon_tip_show_next (IconTip *icontip);
+
+/* NaBox, an instantiable GtkBox */
+
+typedef GtkBox NaBox;
+typedef GtkBoxClass NaBoxClass;
+
+static GType na_box_get_type (void);
+
+G_DEFINE_TYPE (NaBox, na_box, GTK_TYPE_BOX)
+
+static void
+na_box_init (NaBox *box)
+{
+}
+
+static void
+na_box_class_init (NaBoxClass *klass)
+{
+}
+
+/* NaTray */
+
+G_DEFINE_TYPE (NaTray, na_tray, GTK_TYPE_BIN)
+
+static NaTray *
+get_tray (TraysScreen *trays_screen)
+{
+ if (trays_screen->all_trays == NULL)
+ return NULL;
+
+ return trays_screen->all_trays->data;
+}
+
+const char *ordered_roles[] = {
+ "keyboard",
+ "volume",
+ "bluetooth",
+ "network",
+ "battery",
+ NULL
+};
+
+const char *wmclass_roles[] = {
+ "Bluetooth-applet", "bluetooth",
+ "Mate-volume-control-applet", "volume",
+ "Nm-applet", "network",
+ "Mate-power-manager", "battery",
+ "keyboard", "keyboard",
+ NULL,
+};
+
+static const char *
+find_role (const char *wmclass)
+{
+ int i;
+
+ for (i = 0; wmclass_roles[i]; i += 2)
+ {
+ if (strcmp (wmclass, wmclass_roles[i]) == 0)
+ return wmclass_roles[i + 1];
+ }
+
+ return NULL;
+}
+
+static int
+find_role_position (const char *role)
+{
+ int i;
+
+ for (i = 0; ordered_roles[i]; i++)
+ {
+ if (strcmp (role, ordered_roles[i]) == 0)
+ break;
+ }
+
+ return i + 1;
+}
+
+static int
+find_icon_position (NaTray *tray,
+ GtkWidget *icon)
+{
+ NaTrayPrivate *priv;
+ int position;
+ char *class_a;
+ const char *role;
+ int role_position;
+ GList *l, *children;
+
+ /* We insert the icons with a known roles in a specific order (the one
+ * defined by ordered_roles), and all other icons at the beginning of the box
+ * (left in LTR). */
+
+ priv = tray->priv;
+ position = 0;
+
+ class_a = NULL;
+ na_tray_child_get_wm_class (NA_TRAY_CHILD (icon), NULL, &class_a);
+ if (!class_a)
+ return position;
+
+ role = find_role (class_a);
+ g_free (class_a);
+ if (!role)
+ return position;
+
+ role_position = find_role_position (role);
+ g_object_set_data (G_OBJECT (icon), "role-position", GINT_TO_POINTER (role_position));
+
+ children = gtk_container_get_children (GTK_CONTAINER (priv->box));
+ for (l = g_list_last (children); l; l = l->prev)
+ {
+ GtkWidget *child = l->data;
+ int rp;
+
+ rp = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (child), "role-position"));
+ if (rp == 0 || rp < role_position)
+ {
+ position = g_list_index (children, child) + 1;
+ break;
+ }
+ }
+ g_list_free (children);
+
+ /* should never happen, but it doesn't hurt to be on the safe side */
+ if (position < 0)
+ position = 0;
+
+ return position;
+}
+
+static void
+tray_added (NaTrayManager *manager,
+ GtkWidget *icon,
+ TraysScreen *trays_screen)
+{
+ NaTray *tray;
+ NaTrayPrivate *priv;
+ int position;
+
+ tray = get_tray (trays_screen);
+ if (tray == NULL)
+ return;
+
+ priv = tray->priv;
+
+ g_assert (priv->trays_screen == trays_screen);
+
+ g_hash_table_insert (trays_screen->icon_table, icon, tray);
+
+ position = find_icon_position (tray, icon);
+ gtk_box_pack_start (GTK_BOX (priv->box), icon, FALSE, FALSE, 0);
+ gtk_box_reorder_child (GTK_BOX (priv->box), icon, position);
+
+ gtk_widget_show (icon);
+}
+
+static void
+tray_removed (NaTrayManager *manager,
+ GtkWidget *icon,
+ TraysScreen *trays_screen)
+{
+ NaTray *tray;
+
+ tray = g_hash_table_lookup (trays_screen->icon_table, icon);
+ if (tray == NULL)
+ return;
+
+ g_assert (tray->priv->trays_screen == trays_screen);
+
+ g_hash_table_remove (trays_screen->icon_table, icon);
+ /* this will also destroy the tip associated to this icon */
+ g_hash_table_remove (trays_screen->tip_table, icon);
+}
+
+static void
+icon_tip_buffer_free (gpointer data,
+ gpointer userdata)
+{
+ IconTipBuffer *buffer;
+
+ buffer = data;
+
+ g_free (buffer->text);
+ buffer->text = NULL;
+
+ g_free (buffer);
+}
+
+static void
+icon_tip_free (gpointer data)
+{
+ IconTip *icontip;
+
+ if (data == NULL)
+ return;
+
+ icontip = data;
+
+ if (icontip->fixedtip != NULL)
+ gtk_widget_destroy (GTK_WIDGET (icontip->fixedtip));
+ icontip->fixedtip = NULL;
+
+ if (icontip->source_id != 0)
+ g_source_remove (icontip->source_id);
+ icontip->source_id = 0;
+
+ if (icontip->buffer != NULL)
+ {
+ g_slist_foreach (icontip->buffer, icon_tip_buffer_free, NULL);
+ g_slist_free (icontip->buffer);
+ }
+ icontip->buffer = NULL;
+
+ g_free (icontip);
+}
+
+static int
+icon_tip_buffer_compare (gconstpointer a,
+ gconstpointer b)
+{
+ const IconTipBuffer *buffer_a = a;
+ const IconTipBuffer *buffer_b = b;
+
+ if (buffer_a == NULL || buffer_b == NULL)
+ return !(buffer_a == buffer_b);
+
+ return buffer_a->id - buffer_b->id;
+}
+
+static void
+icon_tip_show_next_clicked (GtkWidget *widget,
+ gpointer data)
+{
+ icon_tip_show_next ((IconTip *) data);
+}
+
+static gboolean
+icon_tip_show_next_timeout (gpointer data)
+{
+ IconTip *icontip = (IconTip *) data;
+
+ icon_tip_show_next (icontip);
+
+ return FALSE;
+}
+
+static void
+icon_tip_show_next (IconTip *icontip)
+{
+ IconTipBuffer *buffer;
+
+ if (icontip->buffer == NULL)
+ {
+ /* this will also destroy the tip window */
+ g_hash_table_remove (icontip->tray->priv->trays_screen->tip_table,
+ icontip->icon);
+ return;
+ }
+
+ if (icontip->source_id != 0)
+ g_source_remove (icontip->source_id);
+ icontip->source_id = 0;
+
+ buffer = icontip->buffer->data;
+ icontip->buffer = g_slist_remove (icontip->buffer, buffer);
+
+ if (icontip->fixedtip == NULL)
+ {
+ icontip->fixedtip = na_fixed_tip_new (icontip->icon,
+ na_tray_get_orientation (icontip->tray));
+
+ g_signal_connect (icontip->fixedtip, "clicked",
+ G_CALLBACK (icon_tip_show_next_clicked), icontip);
+ }
+
+ na_fixed_tip_set_markup (icontip->fixedtip, buffer->text);
+
+ if (!gtk_widget_get_mapped (icontip->fixedtip))
+ gtk_widget_show (icontip->fixedtip);
+
+ icontip->id = buffer->id;
+
+ if (buffer->timeout > 0)
+ icontip->source_id = g_timeout_add_seconds (buffer->timeout,
+ icon_tip_show_next_timeout,
+ icontip);
+
+ icon_tip_buffer_free (buffer, NULL);
+}
+
+static void
+message_sent (NaTrayManager *manager,
+ GtkWidget *icon,
+ const char *text,
+ glong id,
+ glong timeout,
+ TraysScreen *trays_screen)
+{
+ IconTip *icontip;
+ IconTipBuffer find_buffer;
+ IconTipBuffer *buffer;
+ gboolean show_now;
+
+ icontip = g_hash_table_lookup (trays_screen->tip_table, icon);
+
+ find_buffer.id = id;
+ if (icontip &&
+ (icontip->id == id ||
+ g_slist_find_custom (icontip->buffer, &find_buffer,
+ icon_tip_buffer_compare) != NULL))
+ /* we already have this message, so ignore it */
+ /* FIXME: in an ideal world, we'd remember all the past ids and ignore them
+ * too */
+ return;
+
+ show_now = FALSE;
+
+ if (icontip == NULL)
+ {
+ NaTray *tray;
+
+ tray = g_hash_table_lookup (trays_screen->icon_table, icon);
+ if (tray == NULL)
+ {
+ /* We don't know about the icon sending the message, so ignore it.
+ * But this should never happen since NaTrayManager shouldn't send
+ * us the message if there's no socket for it. */
+ g_critical ("Ignoring a message sent by a tray icon "
+ "we don't know: \"%s\".\n", text);
+ return;
+ }
+
+ icontip = g_new0 (IconTip, 1);
+ icontip->tray = tray;
+ icontip->icon = icon;
+
+ g_hash_table_insert (trays_screen->tip_table, icon, icontip);
+
+ show_now = TRUE;
+ }
+
+ buffer = g_new0 (IconTipBuffer, 1);
+
+ buffer->text = g_strdup (text);
+ buffer->id = id;
+ buffer->timeout = timeout;
+
+ icontip->buffer = g_slist_append (icontip->buffer, buffer);
+
+ if (show_now)
+ icon_tip_show_next (icontip);
+}
+
+static void
+message_cancelled (NaTrayManager *manager,
+ GtkWidget *icon,
+ glong id,
+ TraysScreen *trays_screen)
+{
+ IconTip *icontip;
+ IconTipBuffer find_buffer;
+ GSList *cancel_buffer_l;
+ IconTipBuffer *cancel_buffer;
+
+ icontip = g_hash_table_lookup (trays_screen->tip_table, icon);
+ if (icontip == NULL)
+ return;
+
+ if (icontip->id == id)
+ {
+ icon_tip_show_next (icontip);
+ return;
+ }
+
+ find_buffer.id = id;
+ cancel_buffer_l = g_slist_find_custom (icontip->buffer, &find_buffer,
+ icon_tip_buffer_compare);
+ if (cancel_buffer_l == NULL)
+ return;
+
+ cancel_buffer = cancel_buffer_l->data;
+ icon_tip_buffer_free (cancel_buffer, NULL);
+
+ icontip->buffer = g_slist_remove_link (icontip->buffer, cancel_buffer_l);
+ g_slist_free_1 (cancel_buffer_l);
+}
+
+static void
+update_orientation_for_messages (gpointer key,
+ gpointer value,
+ gpointer data)
+{
+ NaTray *tray;
+ IconTip *icontip;
+
+ if (value == NULL)
+ return;
+
+ icontip = value;
+ tray = data;
+ if (icontip->tray != tray)
+ return;
+
+ if (icontip->fixedtip)
+ na_fixed_tip_set_orientation (icontip->fixedtip, tray->priv->orientation);
+}
+
+static void
+update_size_and_orientation (NaTray *tray)
+{
+ NaTrayPrivate *priv = tray->priv;
+
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->box), priv->orientation);
+
+ /* This only happens when setting the property during object construction */
+ if (!priv->trays_screen)
+ return;
+
+ g_hash_table_foreach (priv->trays_screen->tip_table,
+ update_orientation_for_messages, tray);
+
+ if (get_tray (priv->trays_screen) == tray)
+ na_tray_manager_set_orientation (priv->trays_screen->tray_manager,
+ priv->orientation);
+
+ /* note, you want this larger if the frame has non-NONE relief by default. */
+ switch (priv->orientation)
+ {
+ case GTK_ORIENTATION_VERTICAL:
+ /* Give box a min size so the frame doesn't look dumb */
+ gtk_widget_set_size_request (priv->box, MIN_BOX_SIZE, -1);
+ break;
+ case GTK_ORIENTATION_HORIZONTAL:
+ gtk_widget_set_size_request (priv->box, -1, MIN_BOX_SIZE);
+ break;
+ }
+}
+
+/* Children with alpha channels have been set to be composited by calling
+ * gdk_window_set_composited(). We need to paint these children ourselves.
+ */
+static void
+na_tray_expose_icon (GtkWidget *widget,
+ gpointer data)
+{
+ cairo_t *cr = data;
+
+ if (na_tray_child_has_alpha (NA_TRAY_CHILD (widget)))
+ {
+ GtkAllocation allocation;
+
+ gtk_widget_get_allocation (widget, &allocation);
+
+ gdk_cairo_set_source_pixmap (cr,
+ gtk_widget_get_window (widget),
+ allocation.x,
+ allocation.y);
+ cairo_paint (cr);
+ }
+}
+
+static void
+na_tray_expose_box (GtkWidget *box,
+ GdkEventExpose *event)
+{
+ cairo_t *cr = gdk_cairo_create (gtk_widget_get_window (box));
+
+ gdk_cairo_region (cr, event->region);
+ cairo_clip (cr);
+
+ gtk_container_foreach (GTK_CONTAINER (box), na_tray_expose_icon, cr);
+
+ cairo_destroy (cr);
+}
+
+static void
+na_tray_init (NaTray *tray)
+{
+ NaTrayPrivate *priv;
+
+ priv = tray->priv = G_TYPE_INSTANCE_GET_PRIVATE (tray, NA_TYPE_TRAY, NaTrayPrivate);
+
+ priv->screen = NULL;
+ priv->orientation = GTK_ORIENTATION_HORIZONTAL;
+
+ priv->frame = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
+ gtk_container_add (GTK_CONTAINER (tray), priv->frame);
+ gtk_widget_show (priv->frame);
+
+ priv->box = g_object_new (na_box_get_type (), NULL);
+ g_signal_connect (priv->box, "expose-event",
+ G_CALLBACK (na_tray_expose_box), tray);
+ gtk_box_set_spacing (GTK_BOX (priv->box), ICON_SPACING);
+ gtk_container_add (GTK_CONTAINER (priv->frame), priv->box);
+ gtk_widget_show (priv->box);
+}
+
+static GObject *
+na_tray_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ NaTray *tray;
+ NaTrayPrivate *priv;
+ int screen_number;
+
+ object = G_OBJECT_CLASS (na_tray_parent_class)->constructor (type,
+ n_construct_properties,
+ construct_params);
+ tray = NA_TRAY (object);
+ priv = tray->priv;
+
+ g_assert (priv->screen != NULL);
+
+ if (!initialized)
+ {
+ GdkDisplay *display;
+ int n_screens;
+
+ display = gdk_display_get_default ();
+ n_screens = gdk_display_get_n_screens (display);
+ trays_screens = g_new0 (TraysScreen, n_screens);
+ initialized = TRUE;
+ }
+
+ screen_number = gdk_screen_get_number (priv->screen);
+
+ if (trays_screens [screen_number].tray_manager == NULL)
+ {
+ NaTrayManager *tray_manager;
+
+ tray_manager = na_tray_manager_new ();
+
+ if (na_tray_manager_manage_screen (tray_manager, priv->screen))
+ {
+ trays_screens [screen_number].tray_manager = tray_manager;
+
+ g_signal_connect (tray_manager, "tray_icon_added",
+ G_CALLBACK (tray_added),
+ &trays_screens [screen_number]);
+ g_signal_connect (tray_manager, "tray_icon_removed",
+ G_CALLBACK (tray_removed),
+ &trays_screens [screen_number]);
+ g_signal_connect (tray_manager, "message_sent",
+ G_CALLBACK (message_sent),
+ &trays_screens [screen_number]);
+ g_signal_connect (tray_manager, "message_cancelled",
+ G_CALLBACK (message_cancelled),
+ &trays_screens [screen_number]);
+
+ trays_screens [screen_number].icon_table = g_hash_table_new (NULL,
+ NULL);
+ trays_screens [screen_number].tip_table = g_hash_table_new_full (
+ NULL,
+ NULL,
+ NULL,
+ icon_tip_free);
+ }
+ else
+ {
+ g_printerr ("System tray didn't get the system tray manager selection for screen %d\n",
+ screen_number);
+ g_object_unref (tray_manager);
+ }
+ }
+
+ priv->trays_screen = &trays_screens [screen_number];
+ trays_screens [screen_number].all_trays = g_slist_append (trays_screens [screen_number].all_trays,
+ tray);
+
+ update_size_and_orientation (tray);
+
+ return object;
+}
+
+static void
+na_tray_dispose (GObject *object)
+{
+ NaTray *tray = NA_TRAY (object);
+ NaTrayPrivate *priv = tray->priv;
+ TraysScreen *trays_screen = priv->trays_screen;
+
+ if (trays_screen != NULL)
+ {
+ trays_screen->all_trays = g_slist_remove (trays_screen->all_trays, tray);
+
+ if (trays_screen->all_trays == NULL)
+ {
+ /* Make sure we drop the manager selection */
+ g_object_unref (trays_screen->tray_manager);
+ trays_screen->tray_manager = NULL;
+
+ g_hash_table_destroy (trays_screen->icon_table);
+ trays_screen->icon_table = NULL;
+
+ g_hash_table_destroy (trays_screen->tip_table);
+ trays_screen->tip_table = NULL;
+ }
+ else
+ {
+ NaTray *new_tray;
+
+ new_tray = get_tray (trays_screen);
+ if (new_tray != NULL)
+ na_tray_manager_set_orientation (trays_screen->tray_manager,
+ na_tray_get_orientation (new_tray));
+ }
+ }
+
+ priv->trays_screen = NULL;
+
+ if (priv->idle_redraw_id != 0)
+ {
+ g_source_remove (priv->idle_redraw_id);
+ priv->idle_redraw_id = 0;
+ }
+
+ G_OBJECT_CLASS (na_tray_parent_class)->dispose (object);
+}
+
+static void
+na_tray_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NaTray *tray = NA_TRAY (object);
+ NaTrayPrivate *priv = tray->priv;
+
+ switch (prop_id)
+ {
+ case PROP_ORIENTATION:
+ na_tray_set_orientation (tray, g_value_get_enum (value));
+ break;
+ case PROP_SCREEN:
+ priv->screen = g_value_get_object (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+na_tray_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ gtk_widget_size_request (gtk_bin_get_child (GTK_BIN (widget)), requisition);
+}
+
+static void
+na_tray_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ gtk_widget_size_allocate (gtk_bin_get_child (GTK_BIN (widget)), allocation);
+}
+
+static void
+na_tray_class_init (NaTrayClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ gobject_class->constructor = na_tray_constructor;
+ gobject_class->set_property = na_tray_set_property;
+ gobject_class->dispose = na_tray_dispose;
+
+ widget_class->size_request = na_tray_size_request;
+ widget_class->size_allocate = na_tray_size_allocate;
+
+ g_object_class_install_property
+ (gobject_class,
+ PROP_ORIENTATION,
+ g_param_spec_enum ("orientation", "orientation", "orientation",
+ GTK_TYPE_ORIENTATION,
+ GTK_ORIENTATION_HORIZONTAL,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property
+ (gobject_class,
+ PROP_SCREEN,
+ g_param_spec_object ("screen", "screen", "screen",
+ GDK_TYPE_SCREEN,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB));
+
+ g_type_class_add_private (gobject_class, sizeof (NaTrayPrivate));
+}
+
+NaTray *
+na_tray_new_for_screen (GdkScreen *screen,
+ GtkOrientation orientation)
+{
+ return g_object_new (NA_TYPE_TRAY,
+ "screen", screen,
+ "orientation", orientation,
+ NULL);
+}
+
+void
+na_tray_set_orientation (NaTray *tray,
+ GtkOrientation orientation)
+{
+ NaTrayPrivate *priv = tray->priv;
+
+ if (orientation == priv->orientation)
+ return;
+
+ priv->orientation = orientation;
+
+ update_size_and_orientation (tray);
+}
+
+GtkOrientation
+na_tray_get_orientation (NaTray *tray)
+{
+ return tray->priv->orientation;
+}
+
+static gboolean
+idle_redraw_cb (NaTray *tray)
+{
+ NaTrayPrivate *priv = tray->priv;
+
+ gtk_container_foreach (GTK_CONTAINER (priv->box), (GtkCallback)na_tray_child_force_redraw, tray);
+
+ priv->idle_redraw_id = 0;
+
+ return FALSE;
+}
+
+void
+na_tray_force_redraw (NaTray *tray)
+{
+ NaTrayPrivate *priv = tray->priv;
+
+ /* Force the icons to redraw their backgrounds.
+ */
+ if (priv->idle_redraw_id == 0)
+ priv->idle_redraw_id = g_idle_add ((GSourceFunc) idle_redraw_cb, tray);
+}
diff --git a/applets/notification_area/na-tray.h b/applets/notification_area/na-tray.h
new file mode 100644
index 00000000..1154d378
--- /dev/null
+++ b/applets/notification_area/na-tray.h
@@ -0,0 +1,71 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* na-tray-tray.h
+ * Copyright (C) 2002 Anders Carlsson <[email protected]>
+ * Copyright (C) 2003-2006 Vincent Untz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Used to be: eggtraytray.h
+ */
+
+#ifndef __NA_TRAY_H__
+#define __NA_TRAY_H__
+
+#ifdef GDK_WINDOWING_X11
+#include <gdk/gdkx.h>
+#endif
+#include <gtk/gtk.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NA_TYPE_TRAY (na_tray_get_type ())
+#define NA_TRAY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NA_TYPE_TRAY, NaTray))
+#define NA_TRAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NA_TYPE_TRAY, NaTrayClass))
+#define NA_IS_TRAY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NA_TYPE_TRAY))
+#define NA_IS_TRAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NA_TYPE_TRAY))
+#define NA_TRAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NA_TYPE_TRAY, NaTrayClass))
+
+typedef struct _NaTray NaTray;
+typedef struct _NaTrayPrivate NaTrayPrivate;
+typedef struct _NaTrayClass NaTrayClass;
+
+struct _NaTray
+{
+ GtkBin parent_instance;
+
+ NaTrayPrivate *priv;
+};
+
+struct _NaTrayClass
+{
+ GtkBinClass parent_class;
+};
+
+GType na_tray_get_type (void);
+NaTray *na_tray_new_for_screen (GdkScreen *screen,
+ GtkOrientation orientation);
+void na_tray_set_orientation (NaTray *tray,
+ GtkOrientation orientation);
+GtkOrientation na_tray_get_orientation (NaTray *tray);
+void na_tray_force_redraw (NaTray *tray);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NA_TRAY_H__ */
diff --git a/applets/notification_area/notification-area-menu.xml b/applets/notification_area/notification-area-menu.xml
new file mode 100644
index 00000000..fdbcc83f
--- /dev/null
+++ b/applets/notification_area/notification-area-menu.xml
@@ -0,0 +1,3 @@
+<menuitem name="Notification Area Help Item" action="SystemTrayHelp" />
+<menuitem name="Notification Area About Item" action="SystemTrayAbout" />
+
diff --git a/applets/notification_area/org.mate.panel.NotificationAreaApplet.mate-panel-applet.in.in b/applets/notification_area/org.mate.panel.NotificationAreaApplet.mate-panel-applet.in.in
new file mode 100644
index 00000000..4c9cc1e0
--- /dev/null
+++ b/applets/notification_area/org.mate.panel.NotificationAreaApplet.mate-panel-applet.in.in
@@ -0,0 +1,17 @@
+[Applet Factory]
+Id=NotificationAreaAppletFactory
+InProcess=@IN_PROCESS@
+Location=@LOCATION@
+_Name=Notification Area Factory
+_Description=Factory for notification area
+
+[NotificationArea]
+_Name=Notification Area
+_Description=Area where notification icons appear
+Icon=mate-panel-notification-area
+MateComponentId=OAFIID:MATE_NotificationAreaApplet;OAFIID:MATE_SystemTrayApplet;
+X-MATE-Bugzilla-Bugzilla=MATE
+X-MATE-Bugzilla-Product=mate-panel
+X-MATE-Bugzilla-Component=notification area
+X-MATE-Bugzilla-Version=@VERSION@
+X-MATE-Bugzilla-OtherBinaries=notification-area-applet
diff --git a/applets/notification_area/org.mate.panel.applet.NotificationAreaAppletFactory.service.in b/applets/notification_area/org.mate.panel.applet.NotificationAreaAppletFactory.service.in
new file mode 100644
index 00000000..cd7d21c0
--- /dev/null
+++ b/applets/notification_area/org.mate.panel.applet.NotificationAreaAppletFactory.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.mate.panel.applet.NotificationAreaAppletFactory
+Exec=@LOCATION@
diff --git a/applets/notification_area/testtray.c b/applets/notification_area/testtray.c
new file mode 100644
index 00000000..d052bedf
--- /dev/null
+++ b/applets/notification_area/testtray.c
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2002 Anders Carlsson <[email protected]>
+ * Copyright (C) 2003-2006 Vincent Untz
+ * Copyright (C) 2006, 2007 Christian Persch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <stdio.h>
+#include <gtk/gtk.h>
+#include "na-tray-manager.h"
+#include "na-tray.h"
+
+#define NOTIFICATION_AREA_ICON "mate-panel-notification-area"
+
+static guint n_windows = 0;
+
+typedef struct
+{
+ GdkScreen *screen;
+ guint screen_num;
+ GtkWidget *window;
+ NaTray *tray;
+ GtkWidget *box;
+ GtkLabel *count_label;
+} TrayData;
+
+static void
+do_add (GtkWidget *child, guint *n_children)
+{
+ *n_children += 1;
+}
+
+static void
+update_child_count (TrayData *data)
+{
+ guint n_children = 0;
+ char text[64];
+
+ if (!gtk_widget_get_realized (data->window))
+ return;
+
+ gtk_container_foreach (GTK_CONTAINER (data->box), (GtkCallback) do_add, &n_children);
+
+ g_snprintf (text, sizeof (text), "%u icons", n_children);
+ gtk_label_set_text (data->count_label, text);
+}
+
+static void
+tray_added_cb (GtkContainer *box, GtkWidget *icon, TrayData *data)
+{
+ g_print ("[Screen %u tray %p] Child %p added to tray: \"%s\"\n",
+ data->screen_num, data->tray, icon, "XXX");//na_tray_child_get_title (icon));
+
+ update_child_count (data);
+}
+
+static void
+tray_removed_cb (GtkContainer *box, GtkWidget *icon, TrayData *data)
+{
+ g_print ("[Screen %u tray %p] Child %p removed from tray\n",
+ data->screen_num, data->tray, icon);
+
+ update_child_count (data);
+}
+
+static void orientation_changed_cb (GtkComboBox *combo, TrayData *data)
+{
+ GtkOrientation orientation = (GtkOrientation) gtk_combo_box_get_active (combo);
+
+ g_print ("[Screen %u tray %p] Setting orientation to \"%s\"\n",
+ data->screen_num, data->tray, orientation == 0 ? "horizontal" : "vertical");
+
+ na_tray_set_orientation (data->tray, orientation);
+}
+
+static void
+maybe_quit (gpointer data,
+ GObject *zombie)
+{
+ if (--n_windows == 0) {
+ gtk_main_quit ();
+ }
+}
+
+static TrayData *create_tray_on_screen (GdkScreen *screen, gboolean force);
+
+static void
+warning_dialog_response_cb (GtkWidget *dialog,
+ gint response,
+ GdkScreen *screen)
+{
+ if (response == GTK_RESPONSE_YES) {
+ create_tray_on_screen (screen, TRUE);
+ }
+
+ gtk_widget_destroy (dialog);
+}
+
+static void
+add_tray_cb (GtkWidget *button, TrayData *data)
+{
+ create_tray_on_screen (data->screen, TRUE);
+}
+
+static TrayData *
+create_tray_on_screen (GdkScreen *screen,
+ gboolean force)
+{
+ GtkWidget *window, *hbox, *vbox, *button, *combo, *label;
+ TrayData *data;
+
+ n_windows++;
+
+ if (!force && na_tray_manager_check_running (screen)) {
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO,
+ "Override tray manager?");
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ "There is already a tray manager running on screen %d.",
+ gdk_screen_get_number (screen));
+ gtk_window_set_screen (GTK_WINDOW (dialog), screen);
+ g_signal_connect (dialog, "response", G_CALLBACK (warning_dialog_response_cb), screen);
+ gtk_window_present (GTK_WINDOW (dialog));
+ g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) maybe_quit, NULL);
+ return NULL;
+ }
+
+ data = g_new0 (TrayData, 1);
+ data->screen = screen;
+ data->screen_num = gdk_screen_get_number (screen);
+
+ data->window = window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ g_object_weak_ref (G_OBJECT (window), (GWeakNotify) maybe_quit, NULL);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+
+ button = gtk_button_new_with_mnemonic ("_Add another tray");
+ g_signal_connect (button, "clicked", G_CALLBACK (add_tray_cb), data);
+ gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
+
+ hbox = gtk_hbox_new (FALSE, 12);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+ label = gtk_label_new_with_mnemonic ("_Orientation:");
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ combo = gtk_combo_box_new_text ();
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Horizontal");
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Vertical");
+ g_signal_connect (combo, "changed",
+ G_CALLBACK (orientation_changed_cb), data);
+ gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0);
+
+ label = gtk_label_new (NULL);
+ data->count_label = GTK_LABEL (label);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+
+ data->tray = na_tray_new_for_screen (screen, GTK_ORIENTATION_HORIZONTAL);
+ gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (data->tray), TRUE, TRUE, 0);
+
+ data->box = gtk_bin_get_child (GTK_BIN (gtk_bin_get_child (GTK_BIN (data->tray))));
+ g_signal_connect_after (data->box, "add", G_CALLBACK (tray_added_cb), data);
+ g_signal_connect_after (data->box, "remove", G_CALLBACK (tray_removed_cb), data);
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
+
+ gtk_window_set_screen (GTK_WINDOW (window), screen);
+ gtk_window_set_default_size (GTK_WINDOW (window), -1, 200);
+
+ /* gtk_window_set_resizable (GTK_WINDOW (window), FALSE); */
+
+ gtk_widget_show_all (window);
+
+ update_child_count (data);
+
+ return data;
+}
+
+int
+main (int argc, char *argv[])
+{
+ GdkDisplay *display;
+ GdkScreen *screen;
+ int n_screens, i;
+
+ gtk_init (&argc, &argv);
+
+ gtk_window_set_default_icon_name (NOTIFICATION_AREA_ICON);
+
+ display = gdk_display_get_default ();
+ n_screens = gdk_display_get_n_screens (display);
+ for (i = 0; i < n_screens; ++i) {
+ screen = gdk_display_get_screen (display, i);
+
+ create_tray_on_screen (screen, FALSE);
+ }
+
+ gtk_main ();
+
+ return 0;
+}
diff --git a/applets/wncklet/Makefile.am b/applets/wncklet/Makefile.am
new file mode 100644
index 00000000..b5ccdfbc
--- /dev/null
+++ b/applets/wncklet/Makefile.am
@@ -0,0 +1,115 @@
+AM_CPPFLAGS = \
+ $(LIBMATE_PANEL_APPLET_CFLAGS) \
+ $(WNCKLET_CFLAGS) \
+ -I$(top_builddir) \
+ -I$(top_builddir)/applets/wncklet \
+ -I$(top_srcdir)/libmate-panel-applet \
+ -I$(top_builddir)/libmate-panel-applet \
+ -DMATELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
+ -DPAGER_BUILDERDIR=\""$(uidir)"\" \
+ -DTASKLIST_BUILDERDIR=\""$(uidir)"\" \
+ -DWNCK_MENU_UI_DIR=\""$(xmluidir)"\" \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+AM_CFLAGS = $(WARN_CFLAGS)
+
+WNCKLET_SOURCES = \
+ wncklet.c \
+ wncklet.h \
+ window-menu.c \
+ window-menu.h \
+ window-list.c \
+ window-list.h \
+ workspace-switcher.c \
+ workspace-switcher.h \
+ showdesktop.c \
+ showdesktop.h
+
+WNCKLET_LDADD = \
+ ../../libmate-panel-applet/libmate-panel-applet-3.la \
+ $(WNCKLET_LIBS) \
+ $(LIBMATE_PANEL_APPLET_LIBS)
+
+if WNCKLET_INPROCESS
+APPLET_IN_PROCESS = true
+APPLET_LOCATION = $(pkglibdir)/libwnck-applet.so
+
+wnck_appletlibdir = $(pkglibdir)
+wnck_appletlib_LTLIBRARIES = libwnck-applet.la
+libwnck_applet_la_SOURCES = $(WNCKLET_SOURCES)
+libwnck_applet_la_LIBADD = $(WNCKLET_LDADD)
+libwnck_applet_la_LDFLAGS = -module -avoid-version
+libwnck_applet_la_CFLAGS = $(AM_CFLAGS)
+else
+APPLET_IN_PROCESS = false
+APPLET_LOCATION = $(libexecdir)/wnck-applet
+
+libexec_PROGRAMS = wnck-applet
+wnck_applet_SOURCES = $(WNCKLET_SOURCES)
+wnck_applet_LDADD = $(WNCKLET_LDADD)
+wnck_applet_CFLAGS = $(AM_CFLAGS)
+endif
+
+appletdir = $(datadir)/mate-panel/applets
+applet_in_files = org.mate.panel.Wncklet.mate-panel-applet.in
+applet_DATA = $(applet_in_files:.mate-panel-applet.in=.mate-panel-applet)
+
+$(applet_in_files): $(applet_in_files).in Makefile
+ $(AM_V_GEN)sed \
+ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+ -e "s|\@IN_PROCESS\@|$(APPLET_IN_PROCESS)|" \
+ -e "s|\@VERSION\@|$(PACKAGE_VERSION)|" \
+ $< > $@
+
+@PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+
+if !WNCKLET_INPROCESS
+servicedir = $(datadir)/dbus-1/services
+service_in_files = org.mate.panel.applet.WnckletFactory.service.in
+service_DATA = $(service_in_files:.service.in=.service)
+
+org.mate.panel.applet.WnckletFactory.service: $(service_in_files)
+ $(AM_V_GEN)sed \
+ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+ $< > $@
+endif
+
+uidir = $(datadir)/mate-panel/ui
+ui_DATA = workspace-switcher.ui window-list.ui
+
+xmluidir = $(datadir)/mate-panel/ui
+xmlui_DATA = \
+ window-menu-menu.xml \
+ workspace-switcher-menu.xml \
+ showdesktop-menu.xml \
+ window-list-menu.xml
+
+schemasdir = $(MATECONF_SCHEMA_FILE_DIR)
+schemas_in_files = workspace-switcher.schemas.in window-list.schemas.in
+schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
+
+@INTLTOOL_SCHEMAS_RULE@
+
+if MATECONF_SCHEMAS_INSTALL
+install-data-local:
+ if test -z "$(DESTDIR)" ; then \
+ for p in $(schemas_DATA) ; do \
+ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(top_builddir)/applets/wncklet/$$p ; \
+ done \
+ fi
+uninstall-local:
+ for p in $(schema_DATA) ; do \
+ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-uninstall-rule $(top_builddir)/applets/wncklet/$$p ; \
+ done
+endif
+
+EXTRA_DIST = \
+ org.mate.panel.Wncklet.mate-panel-applet.in.in \
+ $(service_in_files) \
+ $(xmlui_DATA) \
+ $(schemas_in_files) \
+ $(ui_DATA)
+
+CLEANFILES = $(schemas_DATA) $(applet_DATA) $(applet_DATA).in $(service_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/applets/wncklet/Makefile.in b/applets/wncklet/Makefile.in
new file mode 100644
index 00000000..f034a466
--- /dev/null
+++ b/applets/wncklet/Makefile.in
@@ -0,0 +1,1075 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@WNCKLET_INPROCESS_FALSE@libexec_PROGRAMS = wnck-applet$(EXEEXT)
+subdir = applets/wncklet
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/d-type.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(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)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+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)$(wnck_appletlibdir)" \
+ "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(appletdir)" \
+ "$(DESTDIR)$(schemasdir)" "$(DESTDIR)$(servicedir)" \
+ "$(DESTDIR)$(uidir)" "$(DESTDIR)$(xmluidir)"
+LTLIBRARIES = $(wnck_appletlib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = \
+ ../../libmate-panel-applet/libmate-panel-applet-3.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+@WNCKLET_INPROCESS_TRUE@libwnck_applet_la_DEPENDENCIES = \
+@WNCKLET_INPROCESS_TRUE@ $(am__DEPENDENCIES_2)
+am__libwnck_applet_la_SOURCES_DIST = wncklet.c wncklet.h window-menu.c \
+ window-menu.h window-list.c window-list.h workspace-switcher.c \
+ workspace-switcher.h showdesktop.c showdesktop.h
+am__objects_1 = libwnck_applet_la-wncklet.lo \
+ libwnck_applet_la-window-menu.lo \
+ libwnck_applet_la-window-list.lo \
+ libwnck_applet_la-workspace-switcher.lo \
+ libwnck_applet_la-showdesktop.lo
+@WNCKLET_INPROCESS_TRUE@am_libwnck_applet_la_OBJECTS = \
+@WNCKLET_INPROCESS_TRUE@ $(am__objects_1)
+libwnck_applet_la_OBJECTS = $(am_libwnck_applet_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libwnck_applet_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libwnck_applet_la_CFLAGS) $(CFLAGS) \
+ $(libwnck_applet_la_LDFLAGS) $(LDFLAGS) -o $@
+@WNCKLET_INPROCESS_TRUE@am_libwnck_applet_la_rpath = -rpath \
+@WNCKLET_INPROCESS_TRUE@ $(wnck_appletlibdir)
+PROGRAMS = $(libexec_PROGRAMS)
+am__wnck_applet_SOURCES_DIST = wncklet.c wncklet.h window-menu.c \
+ window-menu.h window-list.c window-list.h workspace-switcher.c \
+ workspace-switcher.h showdesktop.c showdesktop.h
+am__objects_2 = wnck_applet-wncklet.$(OBJEXT) \
+ wnck_applet-window-menu.$(OBJEXT) \
+ wnck_applet-window-list.$(OBJEXT) \
+ wnck_applet-workspace-switcher.$(OBJEXT) \
+ wnck_applet-showdesktop.$(OBJEXT)
+@WNCKLET_INPROCESS_FALSE@am_wnck_applet_OBJECTS = $(am__objects_2)
+wnck_applet_OBJECTS = $(am_wnck_applet_OBJECTS)
+@WNCKLET_INPROCESS_FALSE@wnck_applet_DEPENDENCIES = \
+@WNCKLET_INPROCESS_FALSE@ $(am__DEPENDENCIES_2)
+wnck_applet_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(wnck_applet_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+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 = $(libwnck_applet_la_SOURCES) $(wnck_applet_SOURCES)
+DIST_SOURCES = $(am__libwnck_applet_la_SOURCES_DIST) \
+ $(am__wnck_applet_SOURCES_DIST)
+DATA = $(applet_DATA) $(schemas_DATA) $(service_DATA) $(ui_DATA) \
+ $(xmlui_DATA)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CLOCK_CFLAGS = @CLOCK_CFLAGS@
+CLOCK_EDS_ICONDIR = @CLOCK_EDS_ICONDIR@
+CLOCK_LIBS = @CLOCK_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGG_SMCLIENT_CFLAGS = @EGG_SMCLIENT_CFLAGS@
+EGG_SMCLIENT_LIBS = @EGG_SMCLIENT_LIBS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FISH_CFLAGS = @FISH_CFLAGS@
+FISH_LIBS = @FISH_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_QUERYMODULES = @GIO_QUERYMODULES@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBMATE_PANEL_APPLET_CFLAGS = @LIBMATE_PANEL_APPLET_CFLAGS@
+LIBMATE_PANEL_APPLET_LIBS = @LIBMATE_PANEL_APPLET_LIBS@
+LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS@
+LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MATE_PANEL_APPLET_LT_VERSION = @LIB_MATE_PANEL_APPLET_LT_VERSION@
+LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION = @LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECOMPONENT_ACT_IDLDIR = @MATECOMPONENT_ACT_IDLDIR@
+MATECOMPONENT_CFLAGS = @MATECOMPONENT_CFLAGS@
+MATECOMPONENT_IDLDIR = @MATECOMPONENT_IDLDIR@
+MATECOMPONENT_LIBS = @MATECOMPONENT_LIBS@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MATECORBA_IDL = @MATECORBA_IDL@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NETWORK_MANAGER_CFLAGS = @NETWORK_MANAGER_CFLAGS@
+NETWORK_MANAGER_LIBS = @NETWORK_MANAGER_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOTIFICATION_AREA_CFLAGS = @NOTIFICATION_AREA_CFLAGS@
+NOTIFICATION_AREA_LIBS = @NOTIFICATION_AREA_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANEL_CFLAGS = @PANEL_CFLAGS@
+PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE = @PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+PANEL_LIBS = @PANEL_LIBS@
+PANEL_MODULE_MATECOMPONENT_CFLAGS = @PANEL_MODULE_MATECOMPONENT_CFLAGS@
+PANEL_MODULE_MATECOMPONENT_LIBS = @PANEL_MODULE_MATECOMPONENT_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+REBUILD = @REBUILD@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TZ_CFLAGS = @TZ_CFLAGS@
+TZ_LIBS = @TZ_LIBS@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WNCKLET_CFLAGS = @WNCKLET_CFLAGS@
+WNCKLET_LIBS = @WNCKLET_LIBS@
+XGETTEXT = @XGETTEXT@
+XMKMF = @XMKMF@
+XRANDR_CFLAGS = @XRANDR_CFLAGS@
+XRANDR_LIBS = @XRANDR_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+appletsdir = @appletsdir@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+modulesdir = @modulesdir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = \
+ $(LIBMATE_PANEL_APPLET_CFLAGS) \
+ $(WNCKLET_CFLAGS) \
+ -I$(top_builddir) \
+ -I$(top_builddir)/applets/wncklet \
+ -I$(top_srcdir)/libmate-panel-applet \
+ -I$(top_builddir)/libmate-panel-applet \
+ -DMATELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
+ -DPAGER_BUILDERDIR=\""$(uidir)"\" \
+ -DTASKLIST_BUILDERDIR=\""$(uidir)"\" \
+ -DWNCK_MENU_UI_DIR=\""$(xmluidir)"\" \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+AM_CFLAGS = $(WARN_CFLAGS)
+WNCKLET_SOURCES = \
+ wncklet.c \
+ wncklet.h \
+ window-menu.c \
+ window-menu.h \
+ window-list.c \
+ window-list.h \
+ workspace-switcher.c \
+ workspace-switcher.h \
+ showdesktop.c \
+ showdesktop.h
+
+WNCKLET_LDADD = \
+ ../../libmate-panel-applet/libmate-panel-applet-3.la \
+ $(WNCKLET_LIBS) \
+ $(LIBMATE_PANEL_APPLET_LIBS)
+
+@WNCKLET_INPROCESS_FALSE@APPLET_IN_PROCESS = false
+@WNCKLET_INPROCESS_TRUE@APPLET_IN_PROCESS = true
+@WNCKLET_INPROCESS_FALSE@APPLET_LOCATION = $(libexecdir)/wnck-applet
+@WNCKLET_INPROCESS_TRUE@APPLET_LOCATION = $(pkglibdir)/libwnck-applet.so
+@WNCKLET_INPROCESS_TRUE@wnck_appletlibdir = $(pkglibdir)
+@WNCKLET_INPROCESS_TRUE@wnck_appletlib_LTLIBRARIES = libwnck-applet.la
+@WNCKLET_INPROCESS_TRUE@libwnck_applet_la_SOURCES = $(WNCKLET_SOURCES)
+@WNCKLET_INPROCESS_TRUE@libwnck_applet_la_LIBADD = $(WNCKLET_LDADD)
+@WNCKLET_INPROCESS_TRUE@libwnck_applet_la_LDFLAGS = -module -avoid-version
+@WNCKLET_INPROCESS_TRUE@libwnck_applet_la_CFLAGS = $(AM_CFLAGS)
+@WNCKLET_INPROCESS_FALSE@wnck_applet_SOURCES = $(WNCKLET_SOURCES)
+@WNCKLET_INPROCESS_FALSE@wnck_applet_LDADD = $(WNCKLET_LDADD)
+@WNCKLET_INPROCESS_FALSE@wnck_applet_CFLAGS = $(AM_CFLAGS)
+appletdir = $(datadir)/mate-panel/applets
+applet_in_files = org.mate.panel.Wncklet.mate-panel-applet.in
+applet_DATA = $(applet_in_files:.mate-panel-applet.in=.mate-panel-applet)
+@WNCKLET_INPROCESS_FALSE@servicedir = $(datadir)/dbus-1/services
+@WNCKLET_INPROCESS_FALSE@service_in_files = org.mate.panel.applet.WnckletFactory.service.in
+@WNCKLET_INPROCESS_FALSE@service_DATA = $(service_in_files:.service.in=.service)
+uidir = $(datadir)/mate-panel/ui
+ui_DATA = workspace-switcher.ui window-list.ui
+xmluidir = $(datadir)/mate-panel/ui
+xmlui_DATA = \
+ window-menu-menu.xml \
+ workspace-switcher-menu.xml \
+ showdesktop-menu.xml \
+ window-list-menu.xml
+
+schemasdir = $(MATECONF_SCHEMA_FILE_DIR)
+schemas_in_files = workspace-switcher.schemas.in window-list.schemas.in
+schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
+EXTRA_DIST = \
+ org.mate.panel.Wncklet.mate-panel-applet.in.in \
+ $(service_in_files) \
+ $(xmlui_DATA) \
+ $(schemas_in_files) \
+ $(ui_DATA)
+
+CLEANFILES = $(schemas_DATA) $(applet_DATA) $(applet_DATA).in $(service_DATA)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applets/wncklet/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applets/wncklet/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-wnck_appletlibLTLIBRARIES: $(wnck_appletlib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(wnck_appletlibdir)" || $(MKDIR_P) "$(DESTDIR)$(wnck_appletlibdir)"
+ @list='$(wnck_appletlib_LTLIBRARIES)'; test -n "$(wnck_appletlibdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(wnck_appletlibdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(wnck_appletlibdir)"; \
+ }
+
+uninstall-wnck_appletlibLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(wnck_appletlib_LTLIBRARIES)'; test -n "$(wnck_appletlibdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(wnck_appletlibdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(wnck_appletlibdir)/$$f"; \
+ done
+
+clean-wnck_appletlibLTLIBRARIES:
+ -test -z "$(wnck_appletlib_LTLIBRARIES)" || rm -f $(wnck_appletlib_LTLIBRARIES)
+ @list='$(wnck_appletlib_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libwnck-applet.la: $(libwnck_applet_la_OBJECTS) $(libwnck_applet_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libwnck_applet_la_LINK) $(am_libwnck_applet_la_rpath) $(libwnck_applet_la_OBJECTS) $(libwnck_applet_la_LIBADD) $(LIBS)
+install-libexecPROGRAMS: $(libexec_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)"
+ @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p || test -f $$p1; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-libexecPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(libexecdir)" && rm -f $$files
+
+clean-libexecPROGRAMS:
+ @list='$(libexec_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+wnck-applet$(EXEEXT): $(wnck_applet_OBJECTS) $(wnck_applet_DEPENDENCIES)
+ @rm -f wnck-applet$(EXEEXT)
+ $(AM_V_CCLD)$(wnck_applet_LINK) $(wnck_applet_OBJECTS) $(wnck_applet_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwnck_applet_la-showdesktop.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwnck_applet_la-window-list.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwnck_applet_la-window-menu.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwnck_applet_la-wncklet.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwnck_applet_la-workspace-switcher.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wnck_applet-showdesktop.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wnck_applet-window-list.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wnck_applet-window-menu.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wnck_applet-wncklet.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wnck_applet-workspace-switcher.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+libwnck_applet_la-wncklet.lo: wncklet.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwnck_applet_la_CFLAGS) $(CFLAGS) -MT libwnck_applet_la-wncklet.lo -MD -MP -MF $(DEPDIR)/libwnck_applet_la-wncklet.Tpo -c -o libwnck_applet_la-wncklet.lo `test -f 'wncklet.c' || echo '$(srcdir)/'`wncklet.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwnck_applet_la-wncklet.Tpo $(DEPDIR)/libwnck_applet_la-wncklet.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='wncklet.c' object='libwnck_applet_la-wncklet.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwnck_applet_la_CFLAGS) $(CFLAGS) -c -o libwnck_applet_la-wncklet.lo `test -f 'wncklet.c' || echo '$(srcdir)/'`wncklet.c
+
+libwnck_applet_la-window-menu.lo: window-menu.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwnck_applet_la_CFLAGS) $(CFLAGS) -MT libwnck_applet_la-window-menu.lo -MD -MP -MF $(DEPDIR)/libwnck_applet_la-window-menu.Tpo -c -o libwnck_applet_la-window-menu.lo `test -f 'window-menu.c' || echo '$(srcdir)/'`window-menu.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwnck_applet_la-window-menu.Tpo $(DEPDIR)/libwnck_applet_la-window-menu.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='window-menu.c' object='libwnck_applet_la-window-menu.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwnck_applet_la_CFLAGS) $(CFLAGS) -c -o libwnck_applet_la-window-menu.lo `test -f 'window-menu.c' || echo '$(srcdir)/'`window-menu.c
+
+libwnck_applet_la-window-list.lo: window-list.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwnck_applet_la_CFLAGS) $(CFLAGS) -MT libwnck_applet_la-window-list.lo -MD -MP -MF $(DEPDIR)/libwnck_applet_la-window-list.Tpo -c -o libwnck_applet_la-window-list.lo `test -f 'window-list.c' || echo '$(srcdir)/'`window-list.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwnck_applet_la-window-list.Tpo $(DEPDIR)/libwnck_applet_la-window-list.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='window-list.c' object='libwnck_applet_la-window-list.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwnck_applet_la_CFLAGS) $(CFLAGS) -c -o libwnck_applet_la-window-list.lo `test -f 'window-list.c' || echo '$(srcdir)/'`window-list.c
+
+libwnck_applet_la-workspace-switcher.lo: workspace-switcher.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwnck_applet_la_CFLAGS) $(CFLAGS) -MT libwnck_applet_la-workspace-switcher.lo -MD -MP -MF $(DEPDIR)/libwnck_applet_la-workspace-switcher.Tpo -c -o libwnck_applet_la-workspace-switcher.lo `test -f 'workspace-switcher.c' || echo '$(srcdir)/'`workspace-switcher.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwnck_applet_la-workspace-switcher.Tpo $(DEPDIR)/libwnck_applet_la-workspace-switcher.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='workspace-switcher.c' object='libwnck_applet_la-workspace-switcher.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwnck_applet_la_CFLAGS) $(CFLAGS) -c -o libwnck_applet_la-workspace-switcher.lo `test -f 'workspace-switcher.c' || echo '$(srcdir)/'`workspace-switcher.c
+
+libwnck_applet_la-showdesktop.lo: showdesktop.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwnck_applet_la_CFLAGS) $(CFLAGS) -MT libwnck_applet_la-showdesktop.lo -MD -MP -MF $(DEPDIR)/libwnck_applet_la-showdesktop.Tpo -c -o libwnck_applet_la-showdesktop.lo `test -f 'showdesktop.c' || echo '$(srcdir)/'`showdesktop.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwnck_applet_la-showdesktop.Tpo $(DEPDIR)/libwnck_applet_la-showdesktop.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='showdesktop.c' object='libwnck_applet_la-showdesktop.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwnck_applet_la_CFLAGS) $(CFLAGS) -c -o libwnck_applet_la-showdesktop.lo `test -f 'showdesktop.c' || echo '$(srcdir)/'`showdesktop.c
+
+wnck_applet-wncklet.o: wncklet.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wnck_applet_CFLAGS) $(CFLAGS) -MT wnck_applet-wncklet.o -MD -MP -MF $(DEPDIR)/wnck_applet-wncklet.Tpo -c -o wnck_applet-wncklet.o `test -f 'wncklet.c' || echo '$(srcdir)/'`wncklet.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wnck_applet-wncklet.Tpo $(DEPDIR)/wnck_applet-wncklet.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='wncklet.c' object='wnck_applet-wncklet.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) $(wnck_applet_CFLAGS) $(CFLAGS) -c -o wnck_applet-wncklet.o `test -f 'wncklet.c' || echo '$(srcdir)/'`wncklet.c
+
+wnck_applet-wncklet.obj: wncklet.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wnck_applet_CFLAGS) $(CFLAGS) -MT wnck_applet-wncklet.obj -MD -MP -MF $(DEPDIR)/wnck_applet-wncklet.Tpo -c -o wnck_applet-wncklet.obj `if test -f 'wncklet.c'; then $(CYGPATH_W) 'wncklet.c'; else $(CYGPATH_W) '$(srcdir)/wncklet.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wnck_applet-wncklet.Tpo $(DEPDIR)/wnck_applet-wncklet.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='wncklet.c' object='wnck_applet-wncklet.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) $(wnck_applet_CFLAGS) $(CFLAGS) -c -o wnck_applet-wncklet.obj `if test -f 'wncklet.c'; then $(CYGPATH_W) 'wncklet.c'; else $(CYGPATH_W) '$(srcdir)/wncklet.c'; fi`
+
+wnck_applet-window-menu.o: window-menu.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wnck_applet_CFLAGS) $(CFLAGS) -MT wnck_applet-window-menu.o -MD -MP -MF $(DEPDIR)/wnck_applet-window-menu.Tpo -c -o wnck_applet-window-menu.o `test -f 'window-menu.c' || echo '$(srcdir)/'`window-menu.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wnck_applet-window-menu.Tpo $(DEPDIR)/wnck_applet-window-menu.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='window-menu.c' object='wnck_applet-window-menu.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) $(wnck_applet_CFLAGS) $(CFLAGS) -c -o wnck_applet-window-menu.o `test -f 'window-menu.c' || echo '$(srcdir)/'`window-menu.c
+
+wnck_applet-window-menu.obj: window-menu.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wnck_applet_CFLAGS) $(CFLAGS) -MT wnck_applet-window-menu.obj -MD -MP -MF $(DEPDIR)/wnck_applet-window-menu.Tpo -c -o wnck_applet-window-menu.obj `if test -f 'window-menu.c'; then $(CYGPATH_W) 'window-menu.c'; else $(CYGPATH_W) '$(srcdir)/window-menu.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wnck_applet-window-menu.Tpo $(DEPDIR)/wnck_applet-window-menu.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='window-menu.c' object='wnck_applet-window-menu.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) $(wnck_applet_CFLAGS) $(CFLAGS) -c -o wnck_applet-window-menu.obj `if test -f 'window-menu.c'; then $(CYGPATH_W) 'window-menu.c'; else $(CYGPATH_W) '$(srcdir)/window-menu.c'; fi`
+
+wnck_applet-window-list.o: window-list.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wnck_applet_CFLAGS) $(CFLAGS) -MT wnck_applet-window-list.o -MD -MP -MF $(DEPDIR)/wnck_applet-window-list.Tpo -c -o wnck_applet-window-list.o `test -f 'window-list.c' || echo '$(srcdir)/'`window-list.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wnck_applet-window-list.Tpo $(DEPDIR)/wnck_applet-window-list.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='window-list.c' object='wnck_applet-window-list.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) $(wnck_applet_CFLAGS) $(CFLAGS) -c -o wnck_applet-window-list.o `test -f 'window-list.c' || echo '$(srcdir)/'`window-list.c
+
+wnck_applet-window-list.obj: window-list.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wnck_applet_CFLAGS) $(CFLAGS) -MT wnck_applet-window-list.obj -MD -MP -MF $(DEPDIR)/wnck_applet-window-list.Tpo -c -o wnck_applet-window-list.obj `if test -f 'window-list.c'; then $(CYGPATH_W) 'window-list.c'; else $(CYGPATH_W) '$(srcdir)/window-list.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wnck_applet-window-list.Tpo $(DEPDIR)/wnck_applet-window-list.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='window-list.c' object='wnck_applet-window-list.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) $(wnck_applet_CFLAGS) $(CFLAGS) -c -o wnck_applet-window-list.obj `if test -f 'window-list.c'; then $(CYGPATH_W) 'window-list.c'; else $(CYGPATH_W) '$(srcdir)/window-list.c'; fi`
+
+wnck_applet-workspace-switcher.o: workspace-switcher.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wnck_applet_CFLAGS) $(CFLAGS) -MT wnck_applet-workspace-switcher.o -MD -MP -MF $(DEPDIR)/wnck_applet-workspace-switcher.Tpo -c -o wnck_applet-workspace-switcher.o `test -f 'workspace-switcher.c' || echo '$(srcdir)/'`workspace-switcher.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wnck_applet-workspace-switcher.Tpo $(DEPDIR)/wnck_applet-workspace-switcher.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='workspace-switcher.c' object='wnck_applet-workspace-switcher.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) $(wnck_applet_CFLAGS) $(CFLAGS) -c -o wnck_applet-workspace-switcher.o `test -f 'workspace-switcher.c' || echo '$(srcdir)/'`workspace-switcher.c
+
+wnck_applet-workspace-switcher.obj: workspace-switcher.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wnck_applet_CFLAGS) $(CFLAGS) -MT wnck_applet-workspace-switcher.obj -MD -MP -MF $(DEPDIR)/wnck_applet-workspace-switcher.Tpo -c -o wnck_applet-workspace-switcher.obj `if test -f 'workspace-switcher.c'; then $(CYGPATH_W) 'workspace-switcher.c'; else $(CYGPATH_W) '$(srcdir)/workspace-switcher.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wnck_applet-workspace-switcher.Tpo $(DEPDIR)/wnck_applet-workspace-switcher.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='workspace-switcher.c' object='wnck_applet-workspace-switcher.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) $(wnck_applet_CFLAGS) $(CFLAGS) -c -o wnck_applet-workspace-switcher.obj `if test -f 'workspace-switcher.c'; then $(CYGPATH_W) 'workspace-switcher.c'; else $(CYGPATH_W) '$(srcdir)/workspace-switcher.c'; fi`
+
+wnck_applet-showdesktop.o: showdesktop.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wnck_applet_CFLAGS) $(CFLAGS) -MT wnck_applet-showdesktop.o -MD -MP -MF $(DEPDIR)/wnck_applet-showdesktop.Tpo -c -o wnck_applet-showdesktop.o `test -f 'showdesktop.c' || echo '$(srcdir)/'`showdesktop.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wnck_applet-showdesktop.Tpo $(DEPDIR)/wnck_applet-showdesktop.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='showdesktop.c' object='wnck_applet-showdesktop.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) $(wnck_applet_CFLAGS) $(CFLAGS) -c -o wnck_applet-showdesktop.o `test -f 'showdesktop.c' || echo '$(srcdir)/'`showdesktop.c
+
+wnck_applet-showdesktop.obj: showdesktop.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wnck_applet_CFLAGS) $(CFLAGS) -MT wnck_applet-showdesktop.obj -MD -MP -MF $(DEPDIR)/wnck_applet-showdesktop.Tpo -c -o wnck_applet-showdesktop.obj `if test -f 'showdesktop.c'; then $(CYGPATH_W) 'showdesktop.c'; else $(CYGPATH_W) '$(srcdir)/showdesktop.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wnck_applet-showdesktop.Tpo $(DEPDIR)/wnck_applet-showdesktop.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='showdesktop.c' object='wnck_applet-showdesktop.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) $(wnck_applet_CFLAGS) $(CFLAGS) -c -o wnck_applet-showdesktop.obj `if test -f 'showdesktop.c'; then $(CYGPATH_W) 'showdesktop.c'; else $(CYGPATH_W) '$(srcdir)/showdesktop.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-appletDATA: $(applet_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(appletdir)" || $(MKDIR_P) "$(DESTDIR)$(appletdir)"
+ @list='$(applet_DATA)'; test -n "$(appletdir)" || 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)$(appletdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(appletdir)" || exit $$?; \
+ done
+
+uninstall-appletDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(applet_DATA)'; test -n "$(appletdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(appletdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(appletdir)" && rm -f $$files
+install-schemasDATA: $(schemas_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(schemasdir)" || $(MKDIR_P) "$(DESTDIR)$(schemasdir)"
+ @list='$(schemas_DATA)'; test -n "$(schemasdir)" || 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)$(schemasdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(schemasdir)" || exit $$?; \
+ done
+
+uninstall-schemasDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(schemas_DATA)'; test -n "$(schemasdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(schemasdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(schemasdir)" && rm -f $$files
+install-serviceDATA: $(service_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(servicedir)" || $(MKDIR_P) "$(DESTDIR)$(servicedir)"
+ @list='$(service_DATA)'; test -n "$(servicedir)" || 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)$(servicedir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(servicedir)" || exit $$?; \
+ done
+
+uninstall-serviceDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(service_DATA)'; test -n "$(servicedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(servicedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(servicedir)" && rm -f $$files
+install-uiDATA: $(ui_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(uidir)" || $(MKDIR_P) "$(DESTDIR)$(uidir)"
+ @list='$(ui_DATA)'; test -n "$(uidir)" || 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)$(uidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(uidir)" || exit $$?; \
+ done
+
+uninstall-uiDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(uidir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(uidir)" && rm -f $$files
+install-xmluiDATA: $(xmlui_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(xmluidir)" || $(MKDIR_P) "$(DESTDIR)$(xmluidir)"
+ @list='$(xmlui_DATA)'; test -n "$(xmluidir)" || 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)$(xmluidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(xmluidir)" || exit $$?; \
+ done
+
+uninstall-xmluiDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(xmlui_DATA)'; test -n "$(xmluidir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(xmluidir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(xmluidir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(wnck_appletlibdir)" "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(appletdir)" "$(DESTDIR)$(schemasdir)" "$(DESTDIR)$(servicedir)" "$(DESTDIR)$(uidir)" "$(DESTDIR)$(xmluidir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@MATECONF_SCHEMAS_INSTALL_FALSE@uninstall-local:
+@MATECONF_SCHEMAS_INSTALL_FALSE@install-data-local:
+clean: clean-am
+
+clean-am: clean-generic clean-libexecPROGRAMS clean-libtool \
+ clean-wnck_appletlibLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-appletDATA install-data-local \
+ install-schemasDATA install-serviceDATA install-uiDATA \
+ install-wnck_appletlibLTLIBRARIES install-xmluiDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libexecPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-appletDATA uninstall-libexecPROGRAMS \
+ uninstall-local uninstall-schemasDATA uninstall-serviceDATA \
+ uninstall-uiDATA uninstall-wnck_appletlibLTLIBRARIES \
+ uninstall-xmluiDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libexecPROGRAMS clean-libtool \
+ clean-wnck_appletlibLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-appletDATA install-data \
+ install-data-am install-data-local install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-libexecPROGRAMS \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-schemasDATA install-serviceDATA \
+ install-strip install-uiDATA install-wnck_appletlibLTLIBRARIES \
+ install-xmluiDATA installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-appletDATA uninstall-libexecPROGRAMS uninstall-local \
+ uninstall-schemasDATA uninstall-serviceDATA uninstall-uiDATA \
+ uninstall-wnck_appletlibLTLIBRARIES uninstall-xmluiDATA
+
+
+$(applet_in_files): $(applet_in_files).in Makefile
+ $(AM_V_GEN)sed \
+ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+ -e "s|\@IN_PROCESS\@|$(APPLET_IN_PROCESS)|" \
+ -e "s|\@VERSION\@|$(PACKAGE_VERSION)|" \
+ $< > $@
+
+@PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+
+@WNCKLET_INPROCESS_FALSE@org.mate.panel.applet.WnckletFactory.service: $(service_in_files)
+@WNCKLET_INPROCESS_FALSE@ $(AM_V_GEN)sed \
+@WNCKLET_INPROCESS_FALSE@ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+@WNCKLET_INPROCESS_FALSE@ $< > $@
+
+@INTLTOOL_SCHEMAS_RULE@
+
+@MATECONF_SCHEMAS_INSTALL_TRUE@install-data-local:
+@MATECONF_SCHEMAS_INSTALL_TRUE@ if test -z "$(DESTDIR)" ; then \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ for p in $(schemas_DATA) ; do \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(top_builddir)/applets/wncklet/$$p ; \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ done \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ fi
+@MATECONF_SCHEMAS_INSTALL_TRUE@uninstall-local:
+@MATECONF_SCHEMAS_INSTALL_TRUE@ for p in $(schema_DATA) ; do \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-uninstall-rule $(top_builddir)/applets/wncklet/$$p ; \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ done
+
+-include $(top_srcdir)/git.mk
+
+# 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.
+.NOEXPORT:
diff --git a/applets/wncklet/org.mate.panel.Wncklet.mate-panel-applet.in.in b/applets/wncklet/org.mate.panel.Wncklet.mate-panel-applet.in.in
new file mode 100644
index 00000000..4003305b
--- /dev/null
+++ b/applets/wncklet/org.mate.panel.Wncklet.mate-panel-applet.in.in
@@ -0,0 +1,50 @@
+[Applet Factory]
+Id=WnckletFactory
+InProcess=@IN_PROCESS@
+Location=@LOCATION@
+_Name=Window Navigation Applet Factory
+_Description=Factory for the window navigation related applets
+
+[WindowMenuApplet]
+_Name=Window Selector
+_Description=Switch between open windows using a menu
+Icon=mate-panel-window-menu
+MateComponentId=OAFIID:MATE_WindowMenuApplet;
+X-MATE-Bugzilla-Bugzilla=MATE
+X-MATE-Bugzilla-Product=mate-panel
+X-MATE-Bugzilla-Component=window selector
+X-MATE-Bugzilla-Version=@VERSION@
+X-MATE-Bugzilla-OtherBinaries=wnck-applet
+
+[WorkspaceSwitcherApplet]
+_Name=Workspace Switcher
+_Description=Switch between workspaces
+Icon=mate-panel-workspace-switcher
+MateComponentId=OAFIID:MATE_WorkspaceSwitcherApplet;OAFIID:MATE_PagerApplet;
+X-MATE-Bugzilla-Bugzilla=MATE
+X-MATE-Bugzilla-Product=mate-panel
+X-MATE-Bugzilla-Component=workspace switcher
+X-MATE-Bugzilla-Version=@VERSION@
+X-MATE-Bugzilla-OtherBinaries=wnck-applet
+
+[WindowListApplet]
+_Name=Window List
+_Description=Switch between open windows using buttons
+Icon=mate-panel-window-list
+MateComponentId=OAFIID:MATE_TasklistApplet;OAFIID:MATE_WindowListApplet;
+X-MATE-Bugzilla-Bugzilla=MATE
+X-MATE-Bugzilla-Product=mate-panel
+X-MATE-Bugzilla-Component=window list
+X-MATE-Bugzilla-Version=@VERSION@
+X-MATE-Bugzilla-OtherBinaries=wnck-applet
+
+[ShowDesktopApplet]
+_Name=Show Desktop
+_Description=Hide application windows and show the desktop
+Icon=user-desktop
+MateComponentId=OAFIID:MATE_ShowDesktopApplet;
+X-MATE-Bugzilla-Bugzilla=MATE
+X-MATE-Bugzilla-Product=mate-panel
+X-MATE-Bugzilla-Component=Show Desktop Button
+X-MATE-Bugzilla-Version=@VERSION@
+X-MATE-Bugzilla-OtherBinaries=wnck-applet
diff --git a/applets/wncklet/org.mate.panel.applet.WnckletFactory.service.in b/applets/wncklet/org.mate.panel.applet.WnckletFactory.service.in
new file mode 100644
index 00000000..b6c6a98b
--- /dev/null
+++ b/applets/wncklet/org.mate.panel.applet.WnckletFactory.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.mate.panel.applet.WnckletFactory
+Exec=@LOCATION@
diff --git a/applets/wncklet/showdesktop-menu.xml b/applets/wncklet/showdesktop-menu.xml
new file mode 100644
index 00000000..3770f275
--- /dev/null
+++ b/applets/wncklet/showdesktop-menu.xml
@@ -0,0 +1,3 @@
+<menuitem name="Show Desktop Help Item" action="ShowDesktopHelp"/>
+<menuitem name="Show Desktop About Item" action="ShowDesktopAbout"/>
+
diff --git a/applets/wncklet/showdesktop.c b/applets/wncklet/showdesktop.c
new file mode 100644
index 00000000..7cfcb88d
--- /dev/null
+++ b/applets/wncklet/showdesktop.c
@@ -0,0 +1,533 @@
+/* -*- mode: C; c-file-style: "linux" -*- */
+/* "Show desktop" panel applet */
+
+/*
+ * Copyright (C) 2002 Red Hat, Inc.
+ * Developed by Havoc Pennington
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#define WNCK_I_KNOW_THIS_IS_UNSTABLE 1
+
+#ifdef HAVE_CONFIG_H
+ #include <config.h>
+#endif
+
+#include <glib/gi18n.h>
+
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+
+#include <libwnck/screen.h>
+
+#include "wncklet.h"
+#include "showdesktop.h"
+
+#include <string.h>
+
+#define TIMEOUT_ACTIVATE_SECONDS 1
+#define SHOW_DESKTOP_ICON "user-desktop"
+
+
+typedef struct {
+ /* widgets */
+ GtkWidget* applet;
+ GtkWidget* button;
+ GtkWidget* image;
+
+ GtkOrientation orient;
+ int size;
+
+ WnckScreen* wnck_screen;
+
+ guint showing_desktop: 1;
+ guint button_activate;
+
+ GtkIconTheme* icon_theme;
+} ShowDesktopData;
+
+static void display_help_dialog(GtkAction* action, ShowDesktopData* sdd);
+static void display_about_dialog(GtkAction* action, ShowDesktopData* sdd);
+
+static void update_icon(ShowDesktopData* sdd);
+static void update_button_state(ShowDesktopData* sdd);
+static void update_button_display(ShowDesktopData* sdd);
+
+static void theme_changed_callback(GtkIconTheme* icon_theme, ShowDesktopData* sdd);
+
+static void button_toggled_callback(GtkWidget* button, ShowDesktopData* sdd);
+static void show_desktop_changed_callback(WnckScreen* screen, ShowDesktopData* sdd);
+
+/* this is when the panel orientation changes */
+
+static void applet_change_orient(MatePanelApplet* applet, MatePanelAppletOrient orient, ShowDesktopData* sdd)
+{
+ GtkOrientation new_orient;
+
+ switch (orient)
+ {
+ case MATE_PANEL_APPLET_ORIENT_LEFT:
+ case MATE_PANEL_APPLET_ORIENT_RIGHT:
+ new_orient = GTK_ORIENTATION_VERTICAL;
+ break;
+ case MATE_PANEL_APPLET_ORIENT_UP:
+ case MATE_PANEL_APPLET_ORIENT_DOWN:
+ default:
+ new_orient = GTK_ORIENTATION_HORIZONTAL;
+ break;
+ }
+
+ if (new_orient == sdd->orient)
+ return;
+
+ sdd->orient = new_orient;
+
+ update_icon (sdd);
+}
+
+/* this is when the panel size changes */
+static void button_size_allocated(GtkWidget* button, GtkAllocation* allocation, ShowDesktopData* sdd)
+{
+ /*
+ if ((sdd->orient == GTK_ORIENTATION_HORIZONTAL) && (sdd->size == allocation->height))
+ {
+ return;
+ }
+ else if ((sdd->orient == GTK_ORIENTATION_VERTICAL) && (sdd->size == allocation->width))
+ {
+ return;
+ }
+ */
+
+ if (((sdd->orient == GTK_ORIENTATION_HORIZONTAL) && (sdd->size == allocation->height)) || ((sdd->orient == GTK_ORIENTATION_VERTICAL) && (sdd->size == allocation->width)))
+ return;
+
+ switch (sdd->orient)
+ {
+ case GTK_ORIENTATION_HORIZONTAL:
+ sdd->size = allocation->height;
+ break;
+ case GTK_ORIENTATION_VERTICAL:
+ sdd->size = allocation->width;
+ break;
+ }
+
+ update_icon(sdd);
+}
+
+static void update_icon(ShowDesktopData* sdd)
+{
+ GtkStyle* style;
+ int width, height;
+ GdkPixbuf* icon;
+ GdkPixbuf* scaled;
+ int icon_size;
+ GError* error;
+ int focus_width = 0;
+ int focus_pad = 0;
+ int thickness = 0;
+
+ if (!sdd->icon_theme)
+ return;
+
+ gtk_widget_style_get (sdd->button, "focus-line-width", &focus_width, "focus-padding", &focus_pad, NULL);
+
+ style = gtk_widget_get_style(sdd->button);
+
+ switch (sdd->orient)
+ {
+ case GTK_ORIENTATION_HORIZONTAL:
+ thickness = style->ythickness;
+ break;
+ case GTK_ORIENTATION_VERTICAL:
+ thickness = style->xthickness;
+ break;
+ }
+
+ icon_size = sdd->size - 2 * (focus_width + focus_pad + thickness);
+
+ if (icon_size < 22)
+ icon_size = 16;
+ else if (icon_size < 32)
+ icon_size = 22;
+ else if (icon_size < 48)
+ icon_size = 32;
+
+ error = NULL;
+ icon = gtk_icon_theme_load_icon (sdd->icon_theme, SHOW_DESKTOP_ICON, icon_size, 0, &error);
+
+ if (icon == NULL)
+ {
+ g_printerr(_("Failed to load %s: %s\n"), SHOW_DESKTOP_ICON, error ? error->message : _("Icon not found"));
+
+ if (error)
+ {
+ g_error_free(error);
+ error = NULL;
+ }
+
+ gtk_image_set_from_stock(GTK_IMAGE (sdd->image), GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_SMALL_TOOLBAR);
+ return;
+ }
+
+ width = gdk_pixbuf_get_width(icon);
+ height = gdk_pixbuf_get_height(icon);
+
+ scaled = NULL;
+
+ /* Make it fit on the given panel */
+ switch (sdd->orient)
+ {
+ case GTK_ORIENTATION_HORIZONTAL:
+ width = (icon_size * width) / height;
+ height = icon_size;
+ break;
+ case GTK_ORIENTATION_VERTICAL:
+ height = (icon_size * height) / width;
+ width = icon_size;
+ break;
+ }
+
+ scaled = gdk_pixbuf_scale_simple(icon, width, height, GDK_INTERP_BILINEAR);
+
+ if (scaled != NULL)
+ {
+ gtk_image_set_from_pixbuf(GTK_IMAGE(sdd->image), scaled);
+ g_object_unref(scaled);
+ }
+ else
+ {
+ gtk_image_set_from_pixbuf (GTK_IMAGE (sdd->image), icon);
+ }
+
+ g_object_unref (icon);
+}
+
+static const GtkActionEntry show_desktop_menu_actions[] = {
+ {
+ "ShowDesktopHelp",
+ GTK_STOCK_HELP,
+ N_("_Help"),
+ NULL,
+ NULL,
+ G_CALLBACK(display_help_dialog)
+ },
+ {
+ "ShowDesktopAbout",
+ GTK_STOCK_ABOUT,
+ N_("_About"),
+ NULL,
+ NULL,
+ G_CALLBACK(display_about_dialog)
+ }
+};
+
+/* This updates things that should be consistent with the button's appearance,
+ * and update_button_state updates the button appearance itself
+ */
+static void update_button_display(ShowDesktopData* sdd)
+{
+ const char* tip;
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sdd->button)))
+ {
+ tip = _("Click here to restore hidden windows.");
+ }
+ else
+ {
+ tip = _("Click here to hide all windows and show the desktop.");
+ }
+
+ gtk_widget_set_tooltip_text(sdd->button, tip);
+}
+
+static void update_button_state(ShowDesktopData* sdd)
+{
+ if (sdd->showing_desktop)
+ {
+ g_signal_handlers_block_by_func(G_OBJECT(sdd->button), G_CALLBACK(button_toggled_callback), sdd);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sdd->button), TRUE);
+ g_signal_handlers_unblock_by_func(G_OBJECT(sdd->button), G_CALLBACK(button_toggled_callback), sdd);
+ }
+ else
+ {
+ g_signal_handlers_block_by_func(G_OBJECT(sdd->button), G_CALLBACK(button_toggled_callback), sdd);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sdd->button), FALSE);
+ g_signal_handlers_unblock_by_func(G_OBJECT(sdd->button), G_CALLBACK(button_toggled_callback), sdd);
+ }
+
+ update_button_display (sdd);
+}
+
+static void applet_destroyed(GtkWidget* applet, ShowDesktopData* sdd)
+{
+ if (sdd->button_activate != 0)
+ {
+ g_source_remove(sdd->button_activate);
+ sdd->button_activate = 0;
+ }
+
+ if (sdd->wnck_screen != NULL)
+ {
+ g_signal_handlers_disconnect_by_func(sdd->wnck_screen, show_desktop_changed_callback, sdd);
+ sdd->wnck_screen = NULL;
+ }
+
+ if (sdd->icon_theme != NULL)
+ {
+ g_signal_handlers_disconnect_by_func(sdd->icon_theme, theme_changed_callback, sdd);
+ sdd->icon_theme = NULL;
+ }
+
+ g_free (sdd);
+}
+
+static gboolean do_not_eat_button_press(GtkWidget* widget, GdkEventButton* event)
+{
+ if (event->button != 1)
+ {
+ g_signal_stop_emission_by_name(widget, "button_press_event");
+ }
+
+ return FALSE;
+}
+
+static gboolean button_motion_timeout(gpointer data)
+{
+ ShowDesktopData* sdd = (ShowDesktopData*) data;
+
+ sdd->button_activate = 0;
+
+ g_signal_emit_by_name(G_OBJECT(sdd->button), "clicked", sdd);
+
+ return FALSE;
+}
+
+static void button_drag_leave(GtkWidget* widget, GdkDragContext* context, guint time, ShowDesktopData* sdd)
+{
+ if (sdd->button_activate != 0)
+ {
+ g_source_remove(sdd->button_activate);
+ sdd->button_activate = 0;
+ }
+}
+
+static gboolean button_drag_motion(GtkWidget* widget, GdkDragContext* context, gint x, gint y, guint time, ShowDesktopData* sdd)
+{
+ if (sdd->button_activate == 0)
+ sdd->button_activate = g_timeout_add_seconds (TIMEOUT_ACTIVATE_SECONDS, button_motion_timeout, sdd);
+
+ gdk_drag_status(context, 0, time);
+
+ return TRUE;
+}
+
+static void show_desktop_applet_realized(MatePanelApplet* applet, gpointer data)
+{
+ ShowDesktopData* sdd;
+ GdkScreen* screen;
+
+ sdd = (ShowDesktopData*) data;
+
+ if (sdd->wnck_screen != NULL)
+ g_signal_handlers_disconnect_by_func(sdd->wnck_screen, show_desktop_changed_callback, sdd);
+
+ if (sdd->icon_theme != NULL)
+ g_signal_handlers_disconnect_by_func(sdd->icon_theme, theme_changed_callback, sdd);
+
+ screen = gtk_widget_get_screen(sdd->applet);
+ sdd->wnck_screen = wnck_screen_get(gdk_screen_get_number (screen));
+
+ if (sdd->wnck_screen != NULL)
+ wncklet_connect_while_alive(sdd->wnck_screen, "showing_desktop_changed", G_CALLBACK(show_desktop_changed_callback), sdd, sdd->applet);
+ else
+ g_warning("Could not get WnckScreen!");
+
+ show_desktop_changed_callback(sdd->wnck_screen, sdd);
+
+ sdd->icon_theme = gtk_icon_theme_get_for_screen (screen);
+ wncklet_connect_while_alive(sdd->icon_theme, "changed", G_CALLBACK(theme_changed_callback), sdd, sdd->applet);
+
+ update_icon (sdd);
+}
+
+static void theme_changed_callback(GtkIconTheme* icon_theme, ShowDesktopData* sdd)
+{
+ update_icon (sdd);
+}
+
+gboolean show_desktop_applet_fill(MatePanelApplet* applet)
+{
+ ShowDesktopData* sdd;
+ GtkActionGroup* action_group;
+ gchar* ui_path;
+ AtkObject* atk_obj;
+
+ mate_panel_applet_set_flags(applet, MATE_PANEL_APPLET_EXPAND_MINOR);
+
+ sdd = g_new0(ShowDesktopData, 1);
+
+ sdd->applet = GTK_WIDGET(applet);
+
+ sdd->image = gtk_image_new();
+
+ switch (mate_panel_applet_get_orient(applet))
+ {
+ case MATE_PANEL_APPLET_ORIENT_LEFT:
+ case MATE_PANEL_APPLET_ORIENT_RIGHT:
+ sdd->orient = GTK_ORIENTATION_VERTICAL;
+ break;
+ case MATE_PANEL_APPLET_ORIENT_UP:
+ case MATE_PANEL_APPLET_ORIENT_DOWN:
+ default:
+ sdd->orient = GTK_ORIENTATION_HORIZONTAL;
+ break;
+ }
+
+ sdd->size = mate_panel_applet_get_size(MATE_PANEL_APPLET(sdd->applet));
+
+ g_signal_connect(G_OBJECT(sdd->applet), "realize", G_CALLBACK(show_desktop_applet_realized), sdd);
+
+ sdd->button = gtk_toggle_button_new ();
+
+ gtk_widget_set_name (sdd->button, "showdesktop-button");
+ gtk_rc_parse_string ("\n"
+ " style \"showdesktop-button-style\"\n"
+ " {\n"
+ " GtkWidget::focus-line-width=0\n"
+ " GtkWidget::focus-padding=0\n"
+ " }\n"
+ "\n"
+ " widget \"*.showdesktop-button\" style \"showdesktop-button-style\"\n"
+ "\n");
+
+ atk_obj = gtk_widget_get_accessible(sdd->button);
+ atk_object_set_name (atk_obj, _("Show Desktop Button"));
+ g_signal_connect(G_OBJECT(sdd->button), "button_press_event", G_CALLBACK(do_not_eat_button_press), NULL);
+
+ g_signal_connect(G_OBJECT(sdd->button), "toggled", G_CALLBACK(button_toggled_callback), sdd);
+
+ gtk_container_set_border_width(GTK_CONTAINER(sdd->button), 0);
+ gtk_container_add(GTK_CONTAINER(sdd->button), sdd->image);
+ gtk_container_add(GTK_CONTAINER(sdd->applet), sdd->button);
+
+ g_signal_connect (G_OBJECT(sdd->button), "size_allocate", G_CALLBACK(button_size_allocated), sdd);
+
+ /* FIXME: Update this comment. */
+ /* we have to bind change_orient before we do applet_widget_add
+ since we need to get an initial change_orient signal to set our
+ initial oriantation, and we get that during the _add call */
+ g_signal_connect(G_OBJECT (sdd->applet), "change_orient", G_CALLBACK (applet_change_orient), sdd);
+
+ mate_panel_applet_set_background_widget(MATE_PANEL_APPLET (sdd->applet), GTK_WIDGET(sdd->applet));
+
+ action_group = gtk_action_group_new("ShowDesktop Applet Actions");
+ gtk_action_group_set_translation_domain(action_group, GETTEXT_PACKAGE);
+ gtk_action_group_add_actions(action_group, show_desktop_menu_actions, G_N_ELEMENTS (show_desktop_menu_actions), sdd);
+ ui_path = g_build_filename(WNCK_MENU_UI_DIR, "showdesktop-menu.xml", NULL);
+ mate_panel_applet_setup_menu_from_file(MATE_PANEL_APPLET(sdd->applet), ui_path, action_group);
+ g_free(ui_path);
+ g_object_unref(action_group);
+
+ g_signal_connect(G_OBJECT(sdd->applet), "destroy", G_CALLBACK(applet_destroyed), sdd);
+
+ gtk_drag_dest_set(GTK_WIDGET(sdd->button), 0, NULL, 0, 0);
+
+ g_signal_connect(G_OBJECT(sdd->button), "drag_motion", G_CALLBACK (button_drag_motion), sdd);
+ g_signal_connect(G_OBJECT(sdd->button), "drag_leave", G_CALLBACK (button_drag_leave), sdd);
+
+ gtk_widget_show_all(sdd->applet);
+
+ return TRUE;
+}
+
+static void display_help_dialog(GtkAction* action, ShowDesktopData* sdd)
+{
+ wncklet_display_help(sdd->applet, "user-guide", "gospanel-564", SHOW_DESKTOP_ICON);
+}
+
+static void display_about_dialog(GtkAction* action, ShowDesktopData* sdd)
+{
+ static const gchar* authors[] = {
+ "Havoc Pennington <[email protected]>",
+ NULL
+ };
+ static const char* documenters[] = {
+ "Sun MATE Documentation Team <[email protected]>",
+ NULL
+ };
+
+ /* Translator credits */
+ //const char* translator_credits = _("translator-credits");
+ char copyright[] = \
+ "Copyright \xc2\xa9 2002 Red Hat, Inc.";
+
+ gtk_show_about_dialog(GTK_WINDOW(sdd->applet),
+ "program-name", _("Show Desktop Button"),
+ "authors", authors,
+ "comments", _("This button lets you hide all windows and show the desktop."),
+ "copyright", copyright,
+ "documenters", documenters,
+ "icon-name", SHOW_DESKTOP_ICON,
+ "logo-icon-name", SHOW_DESKTOP_ICON,
+ "translator-credits", _("translator-credits"),
+ "version", VERSION,
+ "website", "http://matsusoft.com.ar/projects/mate/",
+ NULL);
+}
+
+static void button_toggled_callback(GtkWidget* button, ShowDesktopData* sdd)
+{
+ if (!gdk_x11_screen_supports_net_wm_hint(gtk_widget_get_screen(button), gdk_atom_intern("_NET_SHOWING_DESKTOP", FALSE)))
+ {
+ static GtkWidget* dialog = NULL;
+
+ if (dialog && gtk_widget_get_screen(dialog) != gtk_widget_get_screen(button))
+ gtk_widget_destroy (dialog);
+
+ if (dialog)
+ {
+ gtk_window_present(GTK_WINDOW(dialog));
+ return;
+ }
+
+ dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Your window manager does not support the show desktop button, or you are not running a window manager."));
+
+ g_object_add_weak_pointer(G_OBJECT(dialog), (gpointer) &dialog);
+
+ g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(gtk_widget_destroy), NULL);
+
+ gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
+ gtk_window_set_screen(GTK_WINDOW(dialog), gtk_widget_get_screen(button));
+ gtk_widget_show(dialog);
+
+ return;
+ }
+
+ if (sdd->wnck_screen != NULL)
+ wnck_screen_toggle_showing_desktop(sdd->wnck_screen, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)));
+
+ update_button_display (sdd);
+}
+
+static void show_desktop_changed_callback(WnckScreen* screen, ShowDesktopData* sdd)
+{
+ if (sdd->wnck_screen != NULL)
+ sdd->showing_desktop = wnck_screen_get_showing_desktop(sdd->wnck_screen);
+
+ update_button_state (sdd);
+}
diff --git a/applets/wncklet/showdesktop.h b/applets/wncklet/showdesktop.h
new file mode 100644
index 00000000..d52e2cae
--- /dev/null
+++ b/applets/wncklet/showdesktop.h
@@ -0,0 +1,42 @@
+/* -*- mode: C; c-file-style: "linux" -*- */
+/* "Show desktop" panel applet */
+
+/*
+ * Copyright (C) 2002 Red Hat, Inc.
+ * Developed by Havoc Pennington
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#ifndef _SHOWDESKTOP_H_
+#define _SHOWDESKTOP_H_
+
+#include <glib.h>
+#include <mate-panel-applet.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+gboolean show_desktop_applet_fill(MatePanelApplet* applet);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/applets/wncklet/window-list-menu.xml b/applets/wncklet/window-list-menu.xml
new file mode 100644
index 00000000..008d382d
--- /dev/null
+++ b/applets/wncklet/window-list-menu.xml
@@ -0,0 +1,4 @@
+<menuitem name="Tasklist Preferences Item" action="TasklistPreferences" />
+<menuitem name="Tasklist Help Item" action="TasklistHelp" />
+<menuitem name="Tasklist About Item" action="TasklistAbout" />
+
diff --git a/applets/wncklet/window-list.c b/applets/wncklet/window-list.c
new file mode 100644
index 00000000..edde537d
--- /dev/null
+++ b/applets/wncklet/window-list.c
@@ -0,0 +1,749 @@
+/* -*- mode: C; c-file-style: "linux" -*- */
+/*
+ * libwnck based tasklist applet.
+ * (C) 2001 Red Hat, Inc
+ * (C) 2001 Alexander Larsson
+ *
+ * Authors: Alexander Larsson
+ *
+ */
+
+#define WNCK_I_KNOW_THIS_IS_UNSTABLE 1
+
+#ifdef HAVE_CONFIG_H
+ #include <config.h>
+#endif
+
+#include <string.h>
+
+#include <mate-panel-applet.h>
+#include <mate-panel-applet-mateconf.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <libwnck/libwnck.h>
+#include <mateconf/mateconf-client.h>
+
+#include "wncklet.h"
+#include "window-list.h"
+
+#define WINDOW_LIST_ICON "mate-panel-window-list"
+
+typedef struct {
+ GtkWidget* applet;
+ GtkWidget* tasklist;
+
+ gboolean include_all_workspaces;
+ WnckTasklistGroupingType grouping;
+ gboolean move_unminimized_windows;
+
+ GtkOrientation orientation;
+ int size;
+
+ GtkIconTheme* icon_theme;
+
+ /* Properties: */
+ GtkWidget* properties_dialog;
+ GtkWidget* show_current_radio;
+ GtkWidget* show_all_radio;
+ GtkWidget* never_group_radio;
+ GtkWidget* auto_group_radio;
+ GtkWidget* always_group_radio;
+ GtkWidget* minimized_windows_label;
+ GtkWidget* move_minimized_radio;
+ GtkWidget* change_workspace_radio;
+
+ /* new options, must be translated! */
+ /*GtkWidget* style_group_radio;
+ GtkWidget* icon_group_radio;
+ GtkWidget* text_group_radio;*/
+
+
+
+ /* mateconf listeners id */
+ guint listeners [3];
+} TasklistData;
+
+static void display_properties_dialog(GtkAction* action, TasklistData* tasklist);
+static void display_help_dialog(GtkAction* action, TasklistData* tasklist);
+static void display_about_dialog(GtkAction* action, TasklistData* tasklist);
+
+static void tasklist_update(TasklistData* tasklist)
+{
+ if (tasklist->orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ gtk_widget_set_size_request(GTK_WIDGET(tasklist->tasklist), -1, tasklist->size);
+ }
+ else
+ {
+ gtk_widget_set_size_request(GTK_WIDGET(tasklist->tasklist), tasklist->size, -1);
+ }
+
+ wnck_tasklist_set_grouping(WNCK_TASKLIST(tasklist->tasklist), tasklist->grouping);
+ wnck_tasklist_set_include_all_workspaces(WNCK_TASKLIST(tasklist->tasklist), tasklist->include_all_workspaces);
+ wnck_tasklist_set_switch_workspace_on_unminimize(WNCK_TASKLIST(tasklist->tasklist), tasklist->move_unminimized_windows);
+}
+
+static void response_cb(GtkWidget* widget, int id, TasklistData* tasklist)
+{
+ if (id == GTK_RESPONSE_HELP)
+ {
+ wncklet_display_help(widget, "user-guide", "windowlist-prefs", WINDOW_LIST_ICON);
+ }
+ else
+ {
+ gtk_widget_hide(widget);
+ }
+}
+
+static void applet_realized(MatePanelApplet* applet, TasklistData* tasklist)
+{
+ tasklist->icon_theme = gtk_icon_theme_get_for_screen(gtk_widget_get_screen(tasklist->applet));
+}
+
+static void applet_change_orient(MatePanelApplet* applet, MatePanelAppletOrient orient, TasklistData* tasklist)
+{
+ GtkOrientation new_orient;
+
+ switch (orient)
+ {
+ case MATE_PANEL_APPLET_ORIENT_LEFT:
+ case MATE_PANEL_APPLET_ORIENT_RIGHT:
+ new_orient = GTK_ORIENTATION_VERTICAL;
+ break;
+ case MATE_PANEL_APPLET_ORIENT_UP:
+ case MATE_PANEL_APPLET_ORIENT_DOWN:
+ default:
+ new_orient = GTK_ORIENTATION_HORIZONTAL;
+ break;
+ }
+
+ if (new_orient == tasklist->orientation)
+ return;
+
+ tasklist->orientation = new_orient;
+
+ tasklist_update(tasklist);
+}
+
+static void applet_change_background(MatePanelApplet* applet, MatePanelAppletBackgroundType type, GdkColor* color, GdkPixmap* pixmap, TasklistData* tasklist)
+{
+ switch (type)
+ {
+ case PANEL_NO_BACKGROUND:
+ wnck_tasklist_set_button_relief(WNCK_TASKLIST(tasklist->tasklist), GTK_RELIEF_NORMAL);
+ break;
+ case PANEL_COLOR_BACKGROUND:
+ case PANEL_PIXMAP_BACKGROUND:
+ wnck_tasklist_set_button_relief(WNCK_TASKLIST(tasklist->tasklist), GTK_RELIEF_NONE);
+ break;
+ }
+}
+
+static void applet_change_pixel_size(MatePanelApplet* applet, gint size, TasklistData* tasklist)
+{
+ if (tasklist->size == size)
+ return;
+
+ tasklist->size = size;
+
+ tasklist_update(tasklist);
+}
+
+static void destroy_tasklist(GtkWidget* widget, TasklistData* tasklist)
+{
+ MateConfClient* client = mateconf_client_get_default();
+
+ mateconf_client_notify_remove(client, tasklist->listeners[0]);
+ mateconf_client_notify_remove(client, tasklist->listeners[1]);
+ mateconf_client_notify_remove(client, tasklist->listeners[2]);
+
+ g_object_unref(G_OBJECT(client));
+
+ tasklist->listeners[0] = 0;
+ tasklist->listeners[1] = 0;
+ tasklist->listeners[2] = 0;
+
+ if (tasklist->properties_dialog)
+ gtk_widget_destroy(tasklist->properties_dialog);
+
+ g_free(tasklist);
+}
+
+static const GtkActionEntry tasklist_menu_actions[] = {
+ {
+ "TasklistPreferences",
+ GTK_STOCK_PROPERTIES,
+ N_("_Preferences"),
+ NULL,
+ NULL,
+ G_CALLBACK(display_properties_dialog)
+ },
+ {
+ "TasklistHelp",
+ GTK_STOCK_HELP,
+ N_("_Help"),
+ NULL,
+ NULL,
+ G_CALLBACK(display_help_dialog)
+ },
+ {
+ "TasklistAbout",
+ GTK_STOCK_ABOUT,
+ N_("_About"),
+ NULL,
+ NULL,
+ G_CALLBACK(display_about_dialog)
+ }
+};
+
+static void tasklist_properties_update_content_radio(TasklistData* tasklist)
+{
+ GtkWidget* button;
+
+ if (tasklist->show_current_radio == NULL)
+ return;
+
+ if (tasklist->include_all_workspaces)
+ {
+ button = tasklist->show_all_radio;
+ }
+ else
+ {
+ button = tasklist->show_current_radio;
+ }
+
+ if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+
+ gtk_widget_set_sensitive(tasklist->minimized_windows_label, tasklist->include_all_workspaces);
+ gtk_widget_set_sensitive(tasklist->move_minimized_radio, tasklist->include_all_workspaces);
+ gtk_widget_set_sensitive(tasklist->change_workspace_radio, tasklist->include_all_workspaces);
+}
+
+static void display_all_workspaces_changed(MateConfClient* client, guint cnxn_id, MateConfEntry* entry, TasklistData* tasklist)
+{
+ gboolean value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ value = mateconf_value_get_bool(entry->value);
+
+ tasklist->include_all_workspaces = (value != 0);
+ tasklist_update(tasklist);
+
+ tasklist_properties_update_content_radio(tasklist);
+}
+
+static WnckTasklistGroupingType get_grouping_type(MateConfValue* value)
+{
+ WnckTasklistGroupingType type = -1;
+ const char* str;
+
+ g_assert(value != NULL);
+
+ /* Backwards compat for old type: */
+ if (value->type == MATECONF_VALUE_BOOL)
+ {
+ type = (mateconf_value_get_bool(value)) ? WNCK_TASKLIST_AUTO_GROUP : WNCK_TASKLIST_NEVER_GROUP;
+
+ }
+ else if (value->type == MATECONF_VALUE_STRING)
+ {
+ str = mateconf_value_get_string(value);
+
+ if (g_ascii_strcasecmp(str, "never") == 0)
+ {
+ type = WNCK_TASKLIST_NEVER_GROUP;
+ }
+ else if (g_ascii_strcasecmp(str, "auto") == 0)
+ {
+ type = WNCK_TASKLIST_AUTO_GROUP;
+ }
+ else if (g_ascii_strcasecmp(str, "always") == 0)
+ {
+ type = WNCK_TASKLIST_ALWAYS_GROUP;
+ }
+ }
+
+ return type;
+}
+
+static GtkWidget* get_grouping_button(TasklistData* tasklist, WnckTasklistGroupingType type)
+{
+ switch (type)
+ {
+ default:
+ case WNCK_TASKLIST_NEVER_GROUP:
+ return tasklist->never_group_radio;
+ break;
+ case WNCK_TASKLIST_AUTO_GROUP:
+ return tasklist->auto_group_radio;
+ break;
+ case WNCK_TASKLIST_ALWAYS_GROUP:
+ return tasklist->always_group_radio;
+ break;
+ }
+}
+
+static void group_windows_changed(MateConfClient* client, guint cnxn_id, MateConfEntry* entry, TasklistData* tasklist)
+{
+ WnckTasklistGroupingType type;
+ GtkWidget* button;
+
+ if (!entry->value || (entry->value->type != MATECONF_VALUE_BOOL && entry->value->type != MATECONF_VALUE_STRING))
+ return;
+
+ type = get_grouping_type(entry->value);
+
+ if (type == -1)
+ {
+ g_warning("tasklist: Unknown value for MateConf key 'group_windows'");
+ return;
+ }
+
+ tasklist->grouping = type;
+ tasklist_update(tasklist);
+
+ button = get_grouping_button(tasklist, type);
+
+ if (button && !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+ {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+ }
+}
+
+static void tasklist_update_unminimization_radio(TasklistData* tasklist)
+{
+ GtkWidget* button;
+
+ if (tasklist->move_minimized_radio == NULL)
+ return;
+
+ if (tasklist->move_unminimized_windows)
+ {
+ button = tasklist->move_minimized_radio;
+ }
+ else
+ {
+ button = tasklist->change_workspace_radio;
+ }
+
+ if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+}
+
+
+static void move_unminimized_windows_changed(MateConfClient* client, guint cnxn_id, MateConfEntry* entry, TasklistData* tasklist)
+{
+ gboolean value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ value = mateconf_value_get_bool(entry->value);
+
+ tasklist->move_unminimized_windows = (value != 0);
+ tasklist_update(tasklist);
+
+ tasklist_update_unminimization_radio(tasklist);
+}
+
+static void setup_mateconf(TasklistData* tasklist)
+{
+ MateConfClient* client;
+ char* key;
+
+ client = mateconf_client_get_default();
+
+ key = mate_panel_applet_mateconf_get_full_key(MATE_PANEL_APPLET(tasklist->applet), "display_all_workspaces");
+ tasklist->listeners[0] = mateconf_client_notify_add(client, key, (MateConfClientNotifyFunc) display_all_workspaces_changed, tasklist, NULL, NULL);
+ g_free(key);
+
+ key = mate_panel_applet_mateconf_get_full_key(MATE_PANEL_APPLET(tasklist->applet), "group_windows");
+ tasklist->listeners[1] = mateconf_client_notify_add(client, key, (MateConfClientNotifyFunc) group_windows_changed, tasklist, NULL, NULL);
+ g_free(key);
+
+ key = mate_panel_applet_mateconf_get_full_key(MATE_PANEL_APPLET(tasklist->applet), "move_unminimized_windows");
+ tasklist->listeners[2] = mateconf_client_notify_add(client, key, (MateConfClientNotifyFunc) move_unminimized_windows_changed, tasklist, NULL, NULL);
+ g_free(key);
+
+ g_object_unref(G_OBJECT(client));
+}
+
+static void applet_size_request(GtkWidget* widget, GtkRequisition* requisition, TasklistData* tasklist)
+{
+ int len;
+ const int* size_hints;
+ GtkRequisition child_req;
+ WnckTasklist* wncktl = WNCK_TASKLIST(tasklist->tasklist);
+
+ gtk_widget_get_child_requisition(tasklist->applet, &child_req);
+
+ size_hints = wnck_tasklist_get_size_hint_list(wncktl, &len);
+ g_assert(len % 2 == 0);
+
+ mate_panel_applet_set_size_hints(MATE_PANEL_APPLET(tasklist->applet), size_hints, len, 0);
+}
+
+static GdkPixbuf* icon_loader_func(const char* icon, int size, unsigned int flags, void* data)
+{
+ TasklistData* tasklist;
+ GdkPixbuf* retval;
+ char* icon_no_extension;
+ char* p;
+
+ tasklist = data;
+
+ if (icon == NULL || strcmp(icon, "") == 0)
+ return NULL;
+
+ if (g_path_is_absolute(icon))
+ {
+ if (g_file_test(icon, G_FILE_TEST_EXISTS))
+ {
+ return gdk_pixbuf_new_from_file_at_size(icon, size, size, NULL);
+ }
+ else
+ {
+ char* basename;
+
+ basename = g_path_get_basename(icon);
+ retval = icon_loader_func(basename, size, flags, data);
+ g_free(basename);
+
+ return retval;
+ }
+ }
+
+ /* This is needed because some .desktop files have an icon name *and*
+ * an extension as icon */
+ icon_no_extension = g_strdup(icon);
+ p = strrchr(icon_no_extension, '.');
+
+ if (p && (strcmp(p, ".png") == 0 || strcmp(p, ".xpm") == 0 || strcmp(p, ".svg") == 0))
+ {
+ *p = 0;
+ }
+
+ retval = gtk_icon_theme_load_icon(tasklist->icon_theme, icon_no_extension, size, 0, NULL);
+ g_free(icon_no_extension);
+
+ return retval;
+}
+
+gboolean window_list_applet_fill(MatePanelApplet* applet)
+{
+ TasklistData* tasklist;
+ GtkActionGroup* action_group;
+ gchar* ui_path;
+ GError* error;
+ MateConfValue* value;
+
+ tasklist = g_new0(TasklistData, 1);
+
+ tasklist->applet = GTK_WIDGET(applet);
+
+ mate_panel_applet_set_flags(MATE_PANEL_APPLET(tasklist->applet), MATE_PANEL_APPLET_EXPAND_MAJOR | MATE_PANEL_APPLET_EXPAND_MINOR | MATE_PANEL_APPLET_HAS_HANDLE);
+
+ mate_panel_applet_add_preferences(applet, "/schemas/apps/window_list_applet/prefs", NULL);
+
+ setup_mateconf(tasklist);
+
+ error = NULL;
+
+ tasklist->include_all_workspaces = mate_panel_applet_mateconf_get_bool(applet, "display_all_workspaces", &error);
+
+ if (error)
+ {
+ g_error_free(error);
+ tasklist->include_all_workspaces = FALSE; /* Default value */
+ }
+
+ error = NULL;
+ tasklist->grouping = -1;
+
+ value = mate_panel_applet_mateconf_get_value(applet, "group_windows", &error);
+
+ if (error)
+ {
+ g_error_free(error);
+ }
+ else if (value)
+ {
+ tasklist->grouping = get_grouping_type(value);
+ mateconf_value_free(value);
+ }
+
+ if (tasklist->grouping < 0)
+ tasklist->grouping = WNCK_TASKLIST_AUTO_GROUP; /* Default value */
+
+ error = NULL;
+ tasklist->move_unminimized_windows = mate_panel_applet_mateconf_get_bool(applet, "move_unminimized_windows", &error);
+
+ if (error)
+ {
+ g_error_free(error);
+ tasklist->move_unminimized_windows = TRUE; /* Default value */
+ }
+
+ tasklist->size = mate_panel_applet_get_size(applet);
+
+ switch (mate_panel_applet_get_orient(applet))
+ {
+ case MATE_PANEL_APPLET_ORIENT_LEFT:
+ case MATE_PANEL_APPLET_ORIENT_RIGHT:
+ tasklist->orientation = GTK_ORIENTATION_VERTICAL;
+ break;
+ case MATE_PANEL_APPLET_ORIENT_UP:
+ case MATE_PANEL_APPLET_ORIENT_DOWN:
+ default:
+ tasklist->orientation = GTK_ORIENTATION_HORIZONTAL;
+ break;
+ }
+
+ tasklist->tasklist = wnck_tasklist_new(NULL);
+
+ wnck_tasklist_set_icon_loader(WNCK_TASKLIST(tasklist->tasklist), icon_loader_func, tasklist, NULL);
+
+ g_signal_connect(G_OBJECT(tasklist->tasklist), "destroy", G_CALLBACK(destroy_tasklist), tasklist);
+
+ g_signal_connect(G_OBJECT(tasklist->applet), "size_request", G_CALLBACK(applet_size_request), tasklist);
+ tasklist_update(tasklist);
+ gtk_widget_show(tasklist->tasklist);
+
+ gtk_container_add(GTK_CONTAINER(tasklist->applet), tasklist->tasklist);
+
+ g_signal_connect(G_OBJECT(tasklist->applet), "realize", G_CALLBACK(applet_realized), tasklist);
+ g_signal_connect(G_OBJECT(tasklist->applet), "change_orient", G_CALLBACK(applet_change_orient), tasklist);
+ g_signal_connect(G_OBJECT(tasklist->applet), "change_size", G_CALLBACK(applet_change_pixel_size), tasklist);
+ g_signal_connect(G_OBJECT(tasklist->applet), "change_background", G_CALLBACK(applet_change_background), tasklist);
+
+ mate_panel_applet_set_background_widget(MATE_PANEL_APPLET(tasklist->applet), GTK_WIDGET(tasklist->applet));
+
+ action_group = gtk_action_group_new("Tasklist Applet Actions");
+ gtk_action_group_set_translation_domain(action_group, GETTEXT_PACKAGE);
+ gtk_action_group_add_actions(action_group, tasklist_menu_actions, G_N_ELEMENTS(tasklist_menu_actions), tasklist);
+ ui_path = g_build_filename(WNCK_MENU_UI_DIR, "window-list-menu.xml", NULL);
+ mate_panel_applet_setup_menu_from_file(MATE_PANEL_APPLET(tasklist->applet), ui_path, action_group);
+ g_free(ui_path);
+
+ if (mate_panel_applet_get_locked_down(MATE_PANEL_APPLET(tasklist->applet)))
+ {
+ GtkAction* action;
+
+ action = gtk_action_group_get_action(action_group, "TasklistPreferences");
+ gtk_action_set_visible(action, FALSE);
+ }
+
+ g_object_unref(action_group);
+
+ gtk_widget_show(tasklist->applet);
+
+ return TRUE;
+}
+
+
+static void display_help_dialog(GtkAction* action, TasklistData* tasklist)
+{
+ wncklet_display_help(tasklist->applet, "user-guide", "windowlist", WINDOW_LIST_ICON);
+}
+
+static void display_about_dialog(GtkAction* action, TasklistData* tasklist)
+{
+ static const gchar* authors[] = {
+ "Alexander Larsson <[email protected]>",
+ NULL
+ };
+
+ const char* documenters [] = {
+ "Sun MATE Documentation Team <[email protected]>",
+ NULL
+ };
+
+ char copyright[] = \
+ "Copyright \xc2\xa9 2001-2002 Red Hat, Inc.";
+
+ gtk_show_about_dialog(GTK_WINDOW(tasklist->applet),
+ "program-name", _("Window List"),
+ "authors", authors,
+ "comments", _("The Window List shows a list of all windows in a set of buttons and lets you browse them."),
+ "copyright", copyright,
+ "documenters", documenters,
+ "icon-name", WINDOW_LIST_ICON,
+ "logo-icon-name", WINDOW_LIST_ICON,
+ "translator-credits", _("translator-credits"),
+ "version", VERSION,
+ "website", "http://matsusoft.com.ar/projects/mate/",
+ NULL);
+}
+
+static void group_windows_toggled(GtkToggleButton* button, TasklistData* tasklist)
+{
+ if (gtk_toggle_button_get_active(button))
+ {
+ char* str = g_object_get_data(G_OBJECT(button), "group_value");
+ mate_panel_applet_mateconf_set_string(MATE_PANEL_APPLET(tasklist->applet), "group_windows", str, NULL);
+ }
+}
+
+/*static void group_button_toggled(GtkToggleButton* button, TasklistData* tasklist)
+{
+ if (gtk_toggle_button_get_active(button))
+ {
+ char* str = g_object_get_data(G_OBJECT(button), "group_value");
+
+ printf("str: %s\n", str);
+ // Add later!
+ //mate_panel_applet_mateconf_set_string(MATE_PANEL_APPLET(tasklist->applet), "group_button", str, NULL);
+ }
+}*/
+
+static void move_minimized_toggled(GtkToggleButton* button, TasklistData* tasklist)
+{
+ mate_panel_applet_mateconf_set_bool(MATE_PANEL_APPLET(tasklist->applet), "move_unminimized_windows", gtk_toggle_button_get_active(button), NULL);
+}
+
+static void display_all_workspaces_toggled(GtkToggleButton* button, TasklistData* tasklist)
+{
+ mate_panel_applet_mateconf_set_bool(MATE_PANEL_APPLET(tasklist->applet), "display_all_workspaces", gtk_toggle_button_get_active(button), NULL);
+}
+
+#define WID(s) GTK_WIDGET(gtk_builder_get_object(builder, s))
+
+static void setup_sensitivity(TasklistData* tasklist, MateConfClient* client, GtkBuilder* builder, const char* wid1, const char* wid2, const char* wid3, const char* key)
+{
+ MatePanelApplet* applet = MATE_PANEL_APPLET(tasklist->applet);
+ char* fullkey;
+ GtkWidget* w;
+
+ fullkey = mate_panel_applet_mateconf_get_full_key(applet, key);
+
+ if (mateconf_client_key_is_writable(client, fullkey, NULL))
+ {
+ g_free(fullkey);
+ return;
+ }
+
+ g_free(fullkey);
+
+ w = WID(wid1);
+ g_assert(w != NULL);
+ gtk_widget_set_sensitive(w, FALSE);
+
+ if (wid2 != NULL)
+ {
+ w = WID(wid2);
+ g_assert(w != NULL);
+ gtk_widget_set_sensitive(w, FALSE);
+ }
+
+ if (wid3 != NULL)
+ {
+ w = WID(wid3);
+ g_assert(w != NULL);
+ gtk_widget_set_sensitive(w, FALSE);
+ }
+}
+
+static void setup_dialog(GtkBuilder* builder, TasklistData* tasklist)
+{
+ MateConfClient* client;
+ GtkWidget* button;
+
+ client = mateconf_client_get_default();
+
+ tasklist->show_current_radio = WID("show_current_radio");
+ tasklist->show_all_radio = WID("show_all_radio");
+
+ setup_sensitivity(tasklist, client, builder, "show_current_radio", "show_all_radio", NULL, "display_all_workspaces" /* key */);
+
+ tasklist->never_group_radio = WID("never_group_radio");
+ tasklist->auto_group_radio = WID("auto_group_radio");
+ tasklist->always_group_radio = WID("always_group_radio");
+
+ setup_sensitivity(tasklist, client, builder, "never_group_radio", "auto_group_radio", "always_group_radio", "group_windows" /* key */);
+
+ tasklist->minimized_windows_label = WID("minimized_windows_label");
+ tasklist->move_minimized_radio = WID("move_minimized_radio");
+ tasklist->change_workspace_radio = WID("change_workspace_radio");
+
+
+ /*tasklist->style_group_radio = WID("style_button_radio");
+ tasklist->icon_group_radio = WID("icon_only_radio");
+ tasklist->text_group_radio = WID("text_only_radio");*/
+
+ setup_sensitivity(tasklist, client, builder, "move_minimized_radio", "change_workspace_radio", NULL, "move_unminimized_windows" /* key */);
+
+ /* Window grouping: */
+ button = get_grouping_button(tasklist, tasklist->grouping);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+ g_object_set_data(G_OBJECT(tasklist->never_group_radio), "group_value", "never");
+ g_object_set_data(G_OBJECT(tasklist->auto_group_radio), "group_value", "auto");
+ g_object_set_data(G_OBJECT(tasklist->always_group_radio), "group_value", "always");
+
+ g_signal_connect(G_OBJECT(tasklist->never_group_radio), "toggled", (GCallback) group_windows_toggled, tasklist);
+ g_signal_connect(G_OBJECT(tasklist->auto_group_radio), "toggled", (GCallback) group_windows_toggled, tasklist);
+ g_signal_connect(G_OBJECT(tasklist->always_group_radio), "toggled", (GCallback) group_windows_toggled, tasklist);
+
+ /* Button list */
+ //button = get_grouping_button(tasklist, tasklist->grouping);
+ //gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+ /*g_object_set_data(G_OBJECT(tasklist->style_group_radio), "group_value", "style");
+ g_object_set_data(G_OBJECT(tasklist->icon_group_radio), "group_value", "icon");
+ g_object_set_data(G_OBJECT(tasklist->text_group_radio), "group_value", "text");
+
+ g_signal_connect(G_OBJECT(tasklist->style_group_radio), "toggled", (GCallback) group_button_toggled, tasklist);
+ g_signal_connect(G_OBJECT(tasklist->icon_group_radio), "toggled", (GCallback) group_button_toggled, tasklist);
+ g_signal_connect(G_OBJECT(tasklist->text_group_radio), "toggled", (GCallback) group_button_toggled, tasklist);*/
+
+ /* move window when unminimizing: */
+ tasklist_update_unminimization_radio(tasklist);
+ g_signal_connect(G_OBJECT(tasklist->move_minimized_radio), "toggled", (GCallback) move_minimized_toggled, tasklist);
+
+ /* Tasklist content: */
+ tasklist_properties_update_content_radio (tasklist);
+ g_signal_connect(G_OBJECT(tasklist->show_all_radio), "toggled", (GCallback) display_all_workspaces_toggled, tasklist);
+
+ g_signal_connect_swapped(WID("done_button"), "clicked", (GCallback) gtk_widget_hide, tasklist->properties_dialog);
+ g_signal_connect(tasklist->properties_dialog, "response", G_CALLBACK(response_cb), tasklist);
+
+ g_object_unref(G_OBJECT(client));
+}
+
+static void display_properties_dialog(GtkAction* action, TasklistData* tasklist)
+{
+ if (tasklist->properties_dialog == NULL)
+ {
+ GtkBuilder* builder;
+ GError* error;
+
+ builder = gtk_builder_new();
+ gtk_builder_set_translation_domain(builder, GETTEXT_PACKAGE);
+
+ error = NULL;
+ gtk_builder_add_from_file(builder, TASKLIST_BUILDERDIR "/window-list.ui", &error);
+
+ if (error)
+ {
+ g_warning("Error loading preferences: %s", error->message);
+ g_error_free(error);
+ return;
+ }
+
+ tasklist->properties_dialog = WID("tasklist_properties_dialog");
+
+ g_object_add_weak_pointer(G_OBJECT(tasklist->properties_dialog), (void**) &tasklist->properties_dialog);
+
+ setup_dialog(builder, tasklist);
+
+ g_object_unref(builder);
+ }
+
+ gtk_window_set_icon_name(GTK_WINDOW(tasklist->properties_dialog), WINDOW_LIST_ICON);
+
+ gtk_window_set_resizable(GTK_WINDOW(tasklist->properties_dialog), FALSE);
+ gtk_window_set_screen(GTK_WINDOW(tasklist->properties_dialog), gtk_widget_get_screen(tasklist->applet));
+ gtk_window_present(GTK_WINDOW(tasklist->properties_dialog));
+}
diff --git a/applets/wncklet/window-list.h b/applets/wncklet/window-list.h
new file mode 100644
index 00000000..aa5c2811
--- /dev/null
+++ b/applets/wncklet/window-list.h
@@ -0,0 +1,25 @@
+/*
+ * libwnck based tasklist Applet.
+ * (C) 2001 Alexander Larsson
+ *
+ * Authors: Alexander Larsson
+ *
+ */
+
+#ifndef __WINDOW_LIST_H__
+#define __WINDOW_LIST_H__
+
+#include <glib.h>
+#include <mate-panel-applet.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+gboolean window_list_applet_fill(MatePanelApplet* applet);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/applets/wncklet/window-list.schemas.in b/applets/wncklet/window-list.schemas.in
new file mode 100644
index 00000000..b60c3222
--- /dev/null
+++ b/applets/wncklet/window-list.schemas.in
@@ -0,0 +1,77 @@
+<mateconfschemafile>
+ <schemalist>
+
+ <schema>
+ <key>/schemas/apps/window_list_applet/prefs/display_all_workspaces</key>
+ <owner>window-list-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Show windows from all workspaces</short>
+ <long>
+ If true, the window list will show windows from all workspaces.
+ Otherwise it will only display windows from the current workspace.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/window_list_applet/prefs/group_windows</key>
+ <owner>window-list-applet</owner>
+ <type>string</type>
+ <default>never</default>
+ <locale name="C">
+ <short>When to group windows</short>
+ <long>
+ Decides when to group windows from the same application on the
+ window list. Possible values are "never", "auto" and "always".
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/window_list_applet/prefs/move_unminimized_windows</key>
+ <owner>window-list-applet</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Move windows to current workspace when unminimized</short>
+ <long>
+ If true, then when unminimizing a window, move it to the
+ current workspace. Otherwise, switch to the workspace of
+ the window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/window_list_applet/prefs/minimum_size</key>
+ <owner>window-list-applet</owner>
+ <type>int</type>
+ <default>50</default>
+ <locale name="C">
+ <short>Minimum window list size</short>
+ <long>
+ The use of this key was deprecated in MATE 2.20. The schema is
+ retained for compatibility with older versions.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/window_list_applet/prefs/maximum_size</key>
+ <owner>window-list-applet</owner>
+ <type>int</type>
+ <default>4096</default>
+ <locale name="C">
+ <short>Maximum window list size</short>
+ <long>
+ The use of this key was deprecated in MATE 2.20. The schema is
+ retained for compatibility with older versions.
+ </long>
+ </locale>
+ </schema>
+
+ </schemalist>
+
+</mateconfschemafile>
diff --git a/applets/wncklet/window-list.ui b/applets/wncklet/window-list.ui
new file mode 100644
index 00000000..9d6f4e71
--- /dev/null
+++ b/applets/wncklet/window-list.ui
@@ -0,0 +1,443 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy toplevel-contextual -->
+ <object class="GtkDialog" id="tasklist_properties_dialog">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Window List Preferences</property>
+ <property name="type_hint">normal</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox2">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="border_width">5</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkVBox" id="vbox7">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Window List Content</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox9">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkRadioButton" id="show_current_radio">
+ <property name="label" translatable="yes">Sh_ow windows from current workspace</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="show_all_radio">
+ <property name="label" translatable="yes">Show windows from a_ll workspaces</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">show_current_radio</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+
+
+
+
+
+
+
+
+
+<!-- agregado -- >
+ <child>
+ <object class="GtkVBox" id="vbox15">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+
+ <child>
+
+ <object class="GtkLabel" id="label15">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Button list</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+
+ </child>
+
+ <child>
+ <object class="GtkAlignment" id="alignment16">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="left_padding">12</property>
+
+ < ! -- lista de opciones -- >
+ <child>
+ <object class="GtkVBox" id="vbox16">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <object class="GtkRadioButton" id="style_group_radio">
+ <property name="label" translatable="yes">Show application icon and title</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GtkRadioButton" id="icon_group_radio">
+ <property name="label" translatable="yes">Show only application icon image</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">style_group_radio</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GtkRadioButton" id="text_group_radio">
+ <property name="label" translatable="yes">Show only application text title</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">style_group_radio</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+
+ </object>
+ </child>
+
+ </object>
+
+ <packing>
+ < !-- posicion dentro de la primer tabla vertical -- >
+ <property name="position">1</property>
+ </packing>
+
+ </child>
+
+ </object>
+
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+
+ </child>
+
+< ! -- !agregado -->
+
+
+
+
+
+
+
+
+
+
+ <child>
+ <object class="GtkVBox" id="vbox11">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Window Grouping</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment2">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox12">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkRadioButton" id="never_group_radio">
+ <property name="label" translatable="yes">_Never group windows</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="auto_group_radio">
+ <property name="label" translatable="yes">Group windows when _space is limited</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">never_group_radio</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="always_group_radio">
+ <property name="label" translatable="yes">_Always group windows</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">never_group_radio</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox13">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="minimized_windows_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Restoring Minimized Windows</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment3">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox14">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkRadioButton" id="move_minimized_radio">
+ <property name="label" translatable="yes">Restore to current _workspace</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="change_workspace_radio">
+ <property name="label" translatable="yes">Restore to na_tive workspace</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">move_minimized_radio</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area2">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkButton" id="help_button">
+ <property name="label">gtk-help</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="done_button">
+ <property name="label">gtk-close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-11">help_button</action-widget>
+ <action-widget response="0">done_button</action-widget>
+ </action-widgets>
+ </object>
+</interface>
diff --git a/applets/wncklet/window-menu-menu.xml b/applets/wncklet/window-menu-menu.xml
new file mode 100644
index 00000000..2646b2d0
--- /dev/null
+++ b/applets/wncklet/window-menu-menu.xml
@@ -0,0 +1,3 @@
+<menuitem name="WindowMenu Help Item" action="WindowMenuHelp" />
+<menuitem name="WindowMenu About Item" action="WindowMenuAbout" />
+
diff --git a/applets/wncklet/window-menu.c b/applets/wncklet/window-menu.c
new file mode 100644
index 00000000..dabdb7e8
--- /dev/null
+++ b/applets/wncklet/window-menu.c
@@ -0,0 +1,269 @@
+/* window-menu.c: Window Selector applet
+ *
+ * Copyright (C) 2003 Sun Microsystems, Inc.
+ * Copyright (C) 2001 Free Software Foundation, Inc.
+ * Copyright (C) 2000 Helix Code, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors:
+ * Mark McLoughlin <[email protected]>
+ * George Lebl <[email protected]>
+ * Jacob Berkman <[email protected]>
+ */
+
+#define WNCK_I_KNOW_THIS_IS_UNSTABLE 1
+
+#ifdef HAVE_CONFIG_H
+ #include <config.h>
+#endif
+
+#include <string.h>
+#include <mate-panel-applet.h>
+
+#include <glib/gi18n.h>
+#include <gdk/gdkkeysyms.h>
+
+#include <libwnck/selector.h>
+
+#include "wncklet.h"
+#include "window-menu.h"
+
+#define WINDOW_MENU_ICON "mate-panel-window-menu"
+
+typedef struct {
+ GtkWidget* applet;
+ GtkWidget* selector;
+ int size;
+ MatePanelAppletOrient orient;
+} WindowMenu;
+
+static void window_menu_help(GtkAction* action, WindowMenu* window_menu)
+{
+ wncklet_display_help(window_menu->applet, "user-guide", "panel-windowselector", WINDOW_MENU_ICON);
+}
+
+static void window_menu_about(GtkAction* action, WindowMenu* window_menu)
+{
+ static const char* authors[] = {
+ "Mark McLoughlin <[email protected]>",
+ "George Lebl <[email protected]>",
+ "Jacob Berkman <[email protected]>",
+ NULL
+ };
+
+ const char* documenters[] = {
+ "Sun MATE Documentation Team <[email protected]>",
+ NULL
+ };
+
+ char copyright[] = \
+ "Copyright \xc2\xa9 2003 Sun Microsystems, Inc.\n"
+ "Copyright \xc2\xa9 2001 Free Software Foundation, Inc.\n"
+ "Copyright \xc2\xa9 2000 Helix Code, Inc.";
+
+ gtk_show_about_dialog(GTK_WINDOW(window_menu->applet),
+ "program-name", _("Window Selector"),
+ "authors", authors,
+ "comments", _("The Window Selector shows a list of all windows in a menu and lets you browse them."),
+ "copyright", copyright,
+ "documenters", documenters,
+ "icon-name", WINDOW_MENU_ICON,
+ "logo-icon-name", WINDOW_MENU_ICON,
+ "translator-credits", _("translator-credits"),
+ "version", VERSION,
+ "website", "http://matsusoft.com.ar/projects/mate/",
+ NULL);
+}
+
+static const GtkActionEntry window_menu_actions[] = {
+ {
+ "WindowMenuHelp",
+ GTK_STOCK_HELP,
+ N_("_Help"),
+ NULL,
+ NULL,
+ G_CALLBACK(window_menu_help)
+ },
+ {
+ "WindowMenuAbout",
+ GTK_STOCK_ABOUT,
+ N_("_About"),
+ NULL,
+ NULL,
+ G_CALLBACK(window_menu_about)
+ }
+};
+
+static void window_menu_destroy(GtkWidget* widget, WindowMenu* window_menu)
+{
+ g_free(window_menu);
+}
+
+static gboolean window_menu_on_expose(GtkWidget* widget, GdkEventExpose* event, gpointer data)
+{
+ WindowMenu* window_menu = data;
+
+ if (gtk_widget_has_focus(window_menu->applet))
+ gtk_paint_focus(gtk_widget_get_style(widget), gtk_widget_get_window(widget), gtk_widget_get_state(widget), NULL, widget, "menu-applet", 0, 0, -1, -1);
+
+ return FALSE;
+}
+
+static inline void force_no_focus_padding(GtkWidget* widget)
+{
+ gboolean first_time = TRUE;
+
+ if (first_time)
+ {
+ gtk_rc_parse_string("\n"
+ " style \"window-menu-applet-button-style\"\n"
+ " {\n"
+ " GtkWidget::focus-line-width=0\n"
+ " GtkWidget::focus-padding=0\n"
+ " }\n"
+ "\n"
+ " widget \"*.PanelApplet-window-menu-applet-button\" style \"window-menu-applet-button-style\"\n"
+ "\n");
+ first_time = FALSE;
+ }
+
+ gtk_widget_set_name(widget, "PanelApplet-window-menu-applet-button");
+}
+
+static void window_menu_size_allocate(MatePanelApplet* applet, GtkAllocation* allocation, WindowMenu* window_menu)
+{
+ MatePanelAppletOrient orient;
+ GList* children;
+ GtkWidget* child;
+
+ orient = mate_panel_applet_get_orient(applet);
+
+ children = gtk_container_get_children(GTK_CONTAINER(window_menu->selector));
+ child = GTK_WIDGET(children->data);
+ g_list_free(children);
+
+ if (orient == MATE_PANEL_APPLET_ORIENT_LEFT || orient == MATE_PANEL_APPLET_ORIENT_RIGHT)
+ {
+ if (window_menu->size == allocation->width && orient == window_menu->orient)
+ return;
+
+ window_menu->size = allocation->width;
+ gtk_widget_set_size_request(child, window_menu->size, -1);
+ }
+ else
+ {
+ if (window_menu->size == allocation->height && orient == window_menu->orient)
+ return;
+
+ window_menu->size = allocation->height;
+ gtk_widget_set_size_request(child, -1, window_menu->size);
+ }
+
+ window_menu->orient = orient;
+}
+
+static gboolean window_menu_key_press_event(GtkWidget* widget, GdkEventKey* event, WindowMenu* window_menu)
+{
+ GtkMenuShell* menu_shell;
+ WnckSelector* selector;
+
+ switch (event->keyval)
+ {
+ case GDK_KP_Enter:
+ case GDK_ISO_Enter:
+ case GDK_3270_Enter:
+ case GDK_Return:
+ case GDK_space:
+ case GDK_KP_Space:
+ selector = WNCK_SELECTOR(window_menu->selector);
+ /*
+ * We need to call _gtk_menu_shell_activate() here as is done in
+ * window_key_press_handler in gtkmenubar.c which pops up menu
+ * when F10 is pressed.
+ *
+ * As that function is private its code is replicated here.
+ */
+ menu_shell = GTK_MENU_SHELL(selector);
+
+ if (!menu_shell->active)
+ {
+ gtk_grab_add(GTK_WIDGET(menu_shell));
+ menu_shell->have_grab = TRUE;
+ menu_shell->active = TRUE;
+ }
+
+ gtk_menu_shell_select_first(menu_shell, FALSE);
+ return TRUE;
+ default:
+ break;
+ }
+
+ return FALSE;
+}
+
+static gboolean filter_button_press(GtkWidget* widget, GdkEventButton* event, gpointer data)
+{
+ if (event->button != 1)
+ g_signal_stop_emission_by_name(widget, "button_press_event");
+
+ return FALSE;
+}
+
+gboolean window_menu_applet_fill(MatePanelApplet* applet)
+{
+ WindowMenu* window_menu;
+ GtkActionGroup* action_group;
+ gchar* ui_path;
+
+ window_menu = g_new0(WindowMenu, 1);
+
+ window_menu->applet = GTK_WIDGET(applet);
+ force_no_focus_padding(window_menu->applet);
+ gtk_widget_set_tooltip_text(window_menu->applet, _("Window Selector"));
+
+ mate_panel_applet_set_flags(applet, MATE_PANEL_APPLET_EXPAND_MINOR);
+ window_menu->size = mate_panel_applet_get_size(applet);
+ window_menu->orient = mate_panel_applet_get_orient(applet);
+
+ g_signal_connect(window_menu->applet, "destroy", G_CALLBACK(window_menu_destroy), window_menu);
+
+ action_group = gtk_action_group_new("WindowMenu Applet Actions");
+ gtk_action_group_set_translation_domain(action_group, GETTEXT_PACKAGE);
+ gtk_action_group_add_actions(action_group, window_menu_actions, G_N_ELEMENTS(window_menu_actions), window_menu);
+ ui_path = g_build_filename(WNCK_MENU_UI_DIR, "window-menu-menu.xml", NULL);
+ mate_panel_applet_setup_menu_from_file(applet, ui_path, action_group);
+ g_free(ui_path);
+ g_object_unref(action_group);
+
+ window_menu->selector = wnck_selector_new();
+ gtk_container_add(GTK_CONTAINER(window_menu->applet), window_menu->selector);
+
+ mate_panel_applet_set_background_widget(MATE_PANEL_APPLET(window_menu->applet), GTK_WIDGET(window_menu->selector));
+
+ g_signal_connect(window_menu->applet, "key_press_event", G_CALLBACK(window_menu_key_press_event), window_menu);
+ g_signal_connect(window_menu->applet, "size-allocate", G_CALLBACK(window_menu_size_allocate), window_menu);
+
+ g_signal_connect_after(G_OBJECT(window_menu->applet), "focus-in-event", G_CALLBACK(gtk_widget_queue_draw), window_menu);
+ g_signal_connect_after(G_OBJECT(window_menu->applet), "focus-out-event", G_CALLBACK(gtk_widget_queue_draw), window_menu);
+ g_signal_connect_after(G_OBJECT(window_menu->selector), "expose-event", G_CALLBACK(window_menu_on_expose), window_menu);
+
+ g_signal_connect(G_OBJECT(window_menu->selector), "button_press_event", G_CALLBACK(filter_button_press), window_menu);
+
+ gtk_widget_show_all(GTK_WIDGET(window_menu->applet));
+
+ return TRUE;
+}
diff --git a/applets/wncklet/window-menu.h b/applets/wncklet/window-menu.h
new file mode 100644
index 00000000..0da59d16
--- /dev/null
+++ b/applets/wncklet/window-menu.h
@@ -0,0 +1,45 @@
+/* window-menu.h: Window Menu applet
+ *
+ * Copyright (C) 2003 Sun Microsystems, Inc.
+ * Copyright (C) 2001 Free Software Foundation, Inc.
+ * Copyright (C) 2000 Helix Code, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors:
+ * Mark McLoughlin <[email protected]>
+ * Glynn Foster <[email protected]>
+ * George Lebl <[email protected]>
+ * Jacob Berkman <[email protected]>
+ */
+
+#ifndef __WINDOW_MENU_H__
+#define __WINDOW_MENU_H__
+
+#include <glib.h>
+#include <mate-panel-applet.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+gboolean window_menu_applet_fill(MatePanelApplet* applet);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/applets/wncklet/wncklet.c b/applets/wncklet/wncklet.c
new file mode 100644
index 00000000..43135620
--- /dev/null
+++ b/applets/wncklet/wncklet.c
@@ -0,0 +1,144 @@
+/* wncklet.c: A collection of window navigation applets
+ *
+ * Copyright (C) 2003 Sun Microsystems, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors:
+ * Mark McLoughlin <[email protected]>
+ */
+
+#ifdef HAVE_CONFIG_H
+ #include <config.h>
+#endif
+
+#include <string.h>
+#include <mate-panel-applet.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <libwnck/screen.h>
+#include <libwnck/util.h>
+
+#include "wncklet.h"
+#include "window-menu.h"
+#include "workspace-switcher.h"
+#include "window-list.h"
+#include "showdesktop.h"
+
+void wncklet_display_help(GtkWidget* widget, const char* doc_id, const char* link_id, const char* icon_name)
+{
+ GError* error = NULL;
+ char* uri;
+
+ if (link_id)
+ uri = g_strdup_printf("ghelp:%s?%s", doc_id, link_id);
+ else
+ uri = g_strdup_printf("ghelp:%s", doc_id);
+
+ gtk_show_uri(gtk_widget_get_screen(widget), uri, gtk_get_current_event_time(), &error);
+
+ g_free(uri);
+
+ if (error && g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ {
+ g_error_free(error);
+ }
+ else if (error)
+ {
+ GtkWidget* parent;
+ GtkWidget* dialog;
+ char* primary;
+
+ if (GTK_IS_WINDOW(widget))
+ parent = widget;
+ else
+ parent = NULL;
+
+ primary = g_markup_printf_escaped(_("Could not display help document '%s'"), doc_id);
+ dialog = gtk_message_dialog_new(parent ? GTK_WINDOW(parent) : NULL, GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", primary);
+
+ gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), "%s", error->message);
+
+ g_error_free(error);
+ g_free(primary);
+
+ g_signal_connect(dialog, "response", G_CALLBACK(gtk_widget_destroy), NULL);
+
+ gtk_window_set_icon_name(GTK_WINDOW(dialog), icon_name);
+ gtk_window_set_screen(GTK_WINDOW(dialog), gtk_widget_get_screen(widget));
+
+ if (parent == NULL)
+ {
+ /* we have no parent window */
+ gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), FALSE);
+ gtk_window_set_title(GTK_WINDOW(dialog), _("Error displaying help document"));
+ }
+
+ gtk_widget_show(dialog);
+ }
+}
+
+WnckScreen* wncklet_get_screen(GtkWidget* applet)
+{
+ int screen_num;
+
+ if (!gtk_widget_has_screen(applet))
+ return wnck_screen_get_default();
+
+ screen_num = gdk_screen_get_number(gtk_widget_get_screen(applet));
+
+ return wnck_screen_get(screen_num);
+}
+
+void wncklet_connect_while_alive(gpointer object, const char* signal, GCallback func, gpointer func_data, gpointer alive_object)
+{
+ GClosure* closure;
+
+ closure = g_cclosure_new(func, func_data, NULL);
+ g_object_watch_closure(G_OBJECT(alive_object), closure);
+ g_signal_connect_closure_by_id(object, g_signal_lookup(signal, G_OBJECT_TYPE(object)), 0, closure, FALSE);
+}
+
+static gboolean wncklet_factory(MatePanelApplet* applet, const char* iid, gpointer data)
+{
+ gboolean retval = FALSE;
+ static gboolean type_registered = FALSE;
+
+ if (!type_registered)
+ {
+ wnck_set_client_type(WNCK_CLIENT_TYPE_PAGER);
+ type_registered = TRUE;
+ }
+
+ if (!strcmp(iid, "WindowMenuApplet"))
+ retval = window_menu_applet_fill(applet);
+ else if (!strcmp(iid, "WorkspaceSwitcherApplet") || !strcmp(iid, "PagerApplet"))
+ retval = workspace_switcher_applet_fill(applet);
+ else if (!strcmp(iid, "WindowListApplet") || !strcmp(iid, "TasklistApplet"))
+ retval = window_list_applet_fill(applet);
+ else if (!strcmp(iid, "ShowDesktopApplet"))
+ retval = show_desktop_applet_fill(applet);
+
+ return retval;
+}
+
+
+#ifdef WNCKLET_INPROCESS
+ MATE_PANEL_APPLET_IN_PROCESS_FACTORY("WnckletFactory", PANEL_TYPE_APPLET, "WindowNavigationApplets", wncklet_factory, NULL)
+#else
+ MATE_PANEL_APPLET_OUT_PROCESS_FACTORY("WnckletFactory", PANEL_TYPE_APPLET, "WindowNavigationApplets", wncklet_factory, NULL)
+#endif
diff --git a/applets/wncklet/wncklet.h b/applets/wncklet/wncklet.h
new file mode 100644
index 00000000..933cf452
--- /dev/null
+++ b/applets/wncklet/wncklet.h
@@ -0,0 +1,48 @@
+/* wncklet.h
+ *
+ * Copyright (C) 2003 Wipro Technologies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Arvind Samptur <[email protected]>
+ *
+ */
+
+#ifndef __WNCKLET_H__
+#define __WNCKLET_H__
+
+#define WNCK_I_KNOW_THIS_IS_UNSTABLE 1
+#include <libwnck/screen.h>
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <mate-panel-applet.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void wncklet_display_help(GtkWidget* widget, const char* doc_id, const char* link_id, const char* icon_name);
+
+WnckScreen* wncklet_get_screen(GtkWidget* applet);
+
+void wncklet_connect_while_alive(gpointer object, const char* signal, GCallback func, gpointer func_data, gpointer alive_object);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/applets/wncklet/workspace-switcher-menu.xml b/applets/wncklet/workspace-switcher-menu.xml
new file mode 100644
index 00000000..d7354eb8
--- /dev/null
+++ b/applets/wncklet/workspace-switcher-menu.xml
@@ -0,0 +1,6 @@
+<menuitem name="Pager Preferences Item" action="PagerPreferences" />
+<menuitem name="Pager Help Item" action="PagerHelp" />
+<menuitem name="Pager About Item" action="PagerAbout" />
+
+
+
diff --git a/applets/wncklet/workspace-switcher.c b/applets/wncklet/workspace-switcher.c
new file mode 100644
index 00000000..cd241bea
--- /dev/null
+++ b/applets/wncklet/workspace-switcher.c
@@ -0,0 +1,932 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+/*
+ * libwnck based pager applet.
+ * (C) 2001 Alexander Larsson
+ * (C) 2001 Red Hat, Inc
+ *
+ * Authors: Alexander Larsson
+ *
+ */
+
+#define WNCK_I_KNOW_THIS_IS_UNSTABLE 1
+
+#ifdef HAVE_CONFIG_H
+ #include <config.h>
+#endif
+
+#include <string.h>
+
+#include <mate-panel-applet.h>
+#include <mate-panel-applet-mateconf.h>
+
+#include <stdlib.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <libwnck/libwnck.h>
+#include <mateconf/mateconf-client.h>
+
+#include "workspace-switcher.h"
+
+#include "wncklet.h"
+
+/* even 16 is pretty darn dubious. */
+#define MAX_REASONABLE_ROWS 16
+#define DEFAULT_ROWS 1
+
+#define NEVER_SENSITIVE "never_sensitive"
+#define NUM_WORKSPACES "/apps/marco/general/num_workspaces"
+#define WORKSPACE_NAME "/apps/marco/workspace_names/name_1"
+
+#define WORKSPACE_SWITCHER_ICON "mate-panel-workspace-switcher"
+
+typedef enum {
+ PAGER_WM_MARCO,
+ PAGER_WM_COMPIZ,
+ PAGER_WM_UNKNOWN
+} PagerWM;
+
+typedef struct {
+ GtkWidget* applet;
+
+ GtkWidget* pager;
+
+ WnckScreen* screen;
+ PagerWM wm;
+
+ /* Properties: */
+ GtkWidget* properties_dialog;
+ GtkWidget* workspaces_frame;
+ GtkWidget* workspace_names_label;
+ GtkWidget* workspace_names_scroll;
+ GtkWidget* display_workspaces_toggle;
+ GtkWidget* all_workspaces_radio;
+ GtkWidget* current_only_radio;
+ GtkWidget* num_rows_spin; /* for vertical layout this is cols */
+ GtkWidget* label_row_col;
+ GtkWidget* num_workspaces_spin;
+ GtkWidget* workspaces_tree;
+ GtkListStore* workspaces_store;
+
+ GtkOrientation orientation;
+ int n_rows; /* for vertical layout this is cols */
+ WnckPagerDisplayMode display_mode;
+ gboolean display_all;
+
+ /* mateconf listeners id */
+ guint listeners[3];
+} PagerData;
+
+static void display_properties_dialog(GtkAction* action, PagerData* pager);
+static void display_help_dialog(GtkAction* action, PagerData* pager);
+static void display_about_dialog(GtkAction* action, PagerData* pager);
+
+static void pager_update(PagerData* pager)
+{
+ wnck_pager_set_orientation(WNCK_PAGER(pager->pager), pager->orientation);
+ wnck_pager_set_n_rows(WNCK_PAGER(pager->pager), pager->n_rows);
+ wnck_pager_set_show_all(WNCK_PAGER(pager->pager), pager->display_all);
+
+ if (pager->wm == PAGER_WM_MARCO)
+ wnck_pager_set_display_mode(WNCK_PAGER(pager->pager), pager->display_mode);
+ else
+ wnck_pager_set_display_mode(WNCK_PAGER(pager->pager), WNCK_PAGER_DISPLAY_CONTENT);
+}
+
+static void update_properties_for_wm(PagerData* pager)
+{
+ switch (pager->wm)
+ {
+ case PAGER_WM_MARCO:
+ if (pager->workspaces_frame)
+ gtk_widget_show(pager->workspaces_frame);
+ if (pager->workspace_names_label)
+ gtk_widget_show(pager->workspace_names_label);
+ if (pager->workspace_names_scroll)
+ gtk_widget_show(pager->workspace_names_scroll);
+ if (pager->display_workspaces_toggle)
+ gtk_widget_show(pager->display_workspaces_toggle);
+ break;
+ case PAGER_WM_COMPIZ:
+ if (pager->workspaces_frame)
+ gtk_widget_show(pager->workspaces_frame);
+ if (pager->workspace_names_label)
+ gtk_widget_hide(pager->workspace_names_label);
+ if (pager->workspace_names_scroll)
+ gtk_widget_hide(pager->workspace_names_scroll);
+ if (pager->display_workspaces_toggle)
+ gtk_widget_hide(pager->display_workspaces_toggle);
+ break;
+ case PAGER_WM_UNKNOWN:
+ if (pager->workspaces_frame)
+ gtk_widget_hide(pager->workspaces_frame);
+ break;
+ default:
+ g_assert_not_reached();
+ }
+
+ if (pager->properties_dialog)
+ gtk_window_reshow_with_initial_size(GTK_WINDOW(pager->properties_dialog));
+}
+
+static void window_manager_changed(WnckScreen* screen, PagerData* pager)
+{
+ const char *wm_name;
+
+ wm_name = wnck_screen_get_window_manager_name(screen);
+
+ if (!wm_name)
+ pager->wm = PAGER_WM_UNKNOWN;
+ else if (strcmp(wm_name, "Marco") == 0)
+ pager->wm = PAGER_WM_MARCO;
+ else if (strcmp(wm_name, "Compiz") == 0)
+ pager->wm = PAGER_WM_COMPIZ;
+ else
+ pager->wm = PAGER_WM_UNKNOWN;
+
+ update_properties_for_wm(pager);
+ pager_update(pager);
+}
+
+static void applet_realized(MatePanelApplet* applet, PagerData* pager)
+{
+ pager->screen = wncklet_get_screen(GTK_WIDGET(applet));
+
+ window_manager_changed(pager->screen, pager);
+ wncklet_connect_while_alive(pager->screen, "window_manager_changed", G_CALLBACK(window_manager_changed), pager, pager->applet);
+}
+
+static void applet_unrealized(MatePanelApplet* applet, PagerData* pager)
+{
+ pager->screen = NULL;
+ pager->wm = PAGER_WM_UNKNOWN;
+}
+
+static void applet_change_orient(MatePanelApplet* applet, MatePanelAppletOrient orient, PagerData* pager)
+{
+ GtkOrientation new_orient;
+
+ switch (orient)
+ {
+ case MATE_PANEL_APPLET_ORIENT_LEFT:
+ case MATE_PANEL_APPLET_ORIENT_RIGHT:
+ new_orient = GTK_ORIENTATION_VERTICAL;
+ break;
+ case MATE_PANEL_APPLET_ORIENT_UP:
+ case MATE_PANEL_APPLET_ORIENT_DOWN:
+ default:
+ new_orient = GTK_ORIENTATION_HORIZONTAL;
+ break;
+ }
+
+ if (new_orient == pager->orientation)
+ return;
+
+ pager->orientation = new_orient;
+ pager_update(pager);
+
+ if (pager->label_row_col)
+ gtk_label_set_text(GTK_LABEL(pager->label_row_col), pager->orientation == GTK_ORIENTATION_HORIZONTAL ? _("rows") : _("columns"));
+}
+
+static void applet_change_background(MatePanelApplet* applet, MatePanelAppletBackgroundType type, GdkColor* color, GdkPixmap* pixmap, PagerData* pager)
+{
+ switch (type)
+ {
+ case PANEL_NO_BACKGROUND:
+ wnck_pager_set_shadow_type(WNCK_PAGER(pager->pager), GTK_SHADOW_IN);
+ break;
+ case PANEL_COLOR_BACKGROUND:
+ wnck_pager_set_shadow_type(WNCK_PAGER(pager->pager), GTK_SHADOW_NONE);
+ break;
+ case PANEL_PIXMAP_BACKGROUND:
+ wnck_pager_set_shadow_type(WNCK_PAGER(pager->pager), GTK_SHADOW_NONE);
+ break;
+ }
+}
+
+static gboolean applet_scroll(MatePanelApplet* applet, GdkEventScroll* event, PagerData* pager)
+{
+ GdkScrollDirection absolute_direction;
+ int index;
+ int n_workspaces;
+ int n_columns;
+ int in_last_row;
+
+ if (event->type != GDK_SCROLL)
+ return FALSE;
+
+ index = wnck_workspace_get_number(wnck_screen_get_active_workspace(pager->screen));
+ n_workspaces = wnck_screen_get_workspace_count(pager->screen);
+ n_columns = n_workspaces / pager->n_rows;
+
+ if (n_workspaces % pager->n_rows != 0)
+ n_columns++;
+
+ in_last_row = n_workspaces % n_columns;
+
+ absolute_direction = event->direction;
+
+ if (gtk_widget_get_direction(GTK_WIDGET(applet)) == GTK_TEXT_DIR_RTL)
+ {
+ switch (event->direction)
+ {
+ case GDK_SCROLL_DOWN:
+ case GDK_SCROLL_UP:
+ break;
+ case GDK_SCROLL_RIGHT:
+ absolute_direction = GDK_SCROLL_LEFT;
+ break;
+ case GDK_SCROLL_LEFT:
+ absolute_direction = GDK_SCROLL_RIGHT;
+ break;
+ }
+ }
+
+ switch (absolute_direction)
+ {
+ case GDK_SCROLL_DOWN:
+ if (index + n_columns < n_workspaces)
+ {
+ index += n_columns;
+ }
+ else if ((index < n_workspaces - 1 && index + in_last_row != n_workspaces - 1) || (index == n_workspaces - 1 && in_last_row != 0))
+ {
+ index = (index % n_columns) + 1;
+ }
+ break;
+
+ case GDK_SCROLL_RIGHT:
+ if (index < n_workspaces - 1)
+ index++;
+ break;
+
+ case GDK_SCROLL_UP:
+ if (index - n_columns >= 0)
+ {
+ index -= n_columns;
+ }
+ else if (index > 0)
+ {
+ index = ((pager->n_rows - 1) * n_columns) + (index % n_columns) - 1;
+ }
+
+ if (index >= n_workspaces)
+ index -= n_columns;
+ break;
+
+ case GDK_SCROLL_LEFT:
+ if (index > 0)
+ index--;
+ break;
+ default:
+ g_assert_not_reached();
+ break;
+ }
+
+ wnck_workspace_activate(wnck_screen_get_workspace(pager->screen, index), event->time);
+
+ return TRUE;
+}
+
+static void destroy_pager(GtkWidget* widget, PagerData* pager)
+{
+ MateConfClient* client = mateconf_client_get_default();
+
+ mateconf_client_notify_remove(client, pager->listeners[0]);
+ mateconf_client_notify_remove(client, pager->listeners[1]);
+ mateconf_client_notify_remove(client, pager->listeners[2]);
+
+ g_object_unref(G_OBJECT(client));
+
+ pager->listeners[0] = 0;
+ pager->listeners[1] = 0;
+ pager->listeners[2] = 0;
+
+ if (pager->properties_dialog)
+ gtk_widget_destroy(pager->properties_dialog);
+
+ g_free(pager);
+}
+
+static const GtkActionEntry pager_menu_actions[] = {
+ {
+ "PagerPreferences",
+ GTK_STOCK_PROPERTIES,
+ N_("_Preferences"),
+ NULL,
+ NULL,
+ G_CALLBACK(display_properties_dialog)
+ },
+ {
+ "PagerHelp",
+ GTK_STOCK_HELP,
+ N_("_Help"),
+ NULL,
+ NULL,
+ G_CALLBACK(display_help_dialog)
+ },
+ {
+ "PagerAbout",
+ GTK_STOCK_ABOUT,
+ N_("_About"),
+ NULL,
+ NULL,
+ G_CALLBACK(display_about_dialog)
+ }
+};
+
+static void num_rows_changed(MateConfClient* client, guint cnxn_id, MateConfEntry* entry, PagerData* pager)
+{
+ int n_rows = DEFAULT_ROWS;
+
+ if (entry->value != NULL && entry->value->type == MATECONF_VALUE_INT)
+ {
+ n_rows = mateconf_value_get_int(entry->value);
+ }
+
+ n_rows = CLAMP(n_rows, 1, MAX_REASONABLE_ROWS);
+
+ pager->n_rows = n_rows;
+ pager_update(pager);
+
+ if (pager->num_rows_spin && gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(pager->num_rows_spin)) != n_rows)
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(pager->num_rows_spin), pager->n_rows);
+}
+
+static void display_workspace_names_changed(MateConfClient* client, guint cnxn_id, MateConfEntry* entry, PagerData* pager)
+{
+ gboolean value = FALSE; /* Default value */
+
+ if (entry->value != NULL && entry->value->type == MATECONF_VALUE_BOOL)
+ {
+ value = mateconf_value_get_bool(entry->value);
+ }
+
+ if (value)
+ {
+ pager->display_mode = WNCK_PAGER_DISPLAY_NAME;
+ }
+ else
+ {
+ pager->display_mode = WNCK_PAGER_DISPLAY_CONTENT;
+ }
+
+ pager_update(pager);
+
+ if (pager->display_workspaces_toggle && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pager->display_workspaces_toggle)) != value)
+ {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pager->display_workspaces_toggle), value);
+ }
+}
+
+
+static void all_workspaces_changed(MateConfClient* client, guint cnxn_id, MateConfEntry* entry, PagerData* pager)
+{
+ gboolean value = TRUE; /* Default value */
+
+ if (entry->value != NULL && entry->value->type == MATECONF_VALUE_BOOL)
+ {
+ value = mateconf_value_get_bool(entry->value);
+ }
+
+ pager->display_all = value;
+ pager_update(pager);
+
+ if (pager->all_workspaces_radio)
+ {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pager->all_workspaces_radio)) != value)
+ {
+ if (value)
+ {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pager->all_workspaces_radio), TRUE);
+ }
+ else
+ {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pager->current_only_radio), TRUE);
+ }
+ }
+
+ if (!g_object_get_data(G_OBJECT(pager->num_rows_spin), NEVER_SENSITIVE))
+ gtk_widget_set_sensitive(pager->num_rows_spin, value);
+ }
+}
+
+static void setup_mateconf(PagerData* pager)
+{
+ MateConfClient* client;
+ char* key;
+
+ client = mateconf_client_get_default();
+
+ key = mate_panel_applet_mateconf_get_full_key(MATE_PANEL_APPLET(pager->applet), "num_rows");
+ pager->listeners[0] = mateconf_client_notify_add(client, key, (MateConfClientNotifyFunc) num_rows_changed, pager, NULL, NULL);
+
+ g_free(key);
+
+
+ key = mate_panel_applet_mateconf_get_full_key(MATE_PANEL_APPLET(pager->applet), "display_workspace_names");
+ pager->listeners[1] = mateconf_client_notify_add(client, key, (MateConfClientNotifyFunc) display_workspace_names_changed, pager, NULL, NULL);
+
+ g_free(key);
+
+ key = mate_panel_applet_mateconf_get_full_key(MATE_PANEL_APPLET(pager->applet), "display_all_workspaces");
+ pager->listeners[2] = mateconf_client_notify_add(client, key, (MateConfClientNotifyFunc) all_workspaces_changed, pager, NULL, NULL);
+
+ g_free(key);
+
+ g_object_unref(G_OBJECT(client));
+}
+
+gboolean workspace_switcher_applet_fill(MatePanelApplet* applet)
+{
+ PagerData* pager;
+ GtkActionGroup* action_group;
+ gchar* ui_path;
+ GError* error;
+ gboolean display_names;
+
+ mate_panel_applet_add_preferences(applet, "/schemas/apps/workspace_switcher_applet/prefs", NULL);
+
+ pager = g_new0(PagerData, 1);
+
+ pager->applet = GTK_WIDGET(applet);
+
+ mate_panel_applet_set_flags(MATE_PANEL_APPLET(pager->applet), MATE_PANEL_APPLET_EXPAND_MINOR);
+
+ setup_mateconf(pager);
+
+ error = NULL;
+ pager->n_rows = mate_panel_applet_mateconf_get_int(applet, "num_rows", &error);
+
+ if (error)
+ {
+ g_printerr(_("Error loading num_rows value for Workspace Switcher: %s\n"), error->message);
+ g_error_free(error);
+ /* leave current value */
+ }
+
+ pager->n_rows = CLAMP(pager->n_rows, 1, MAX_REASONABLE_ROWS);
+
+ error = NULL;
+ display_names = mate_panel_applet_mateconf_get_bool(applet, "display_workspace_names", &error);
+
+ if (error)
+ {
+ g_printerr(_("Error loading display_workspace_names value for Workspace Switcher: %s\n"), error->message);
+ g_error_free(error);
+ /* leave current value */
+ }
+
+ if (display_names)
+ {
+ pager->display_mode = WNCK_PAGER_DISPLAY_NAME;
+ }
+ else
+ {
+ pager->display_mode = WNCK_PAGER_DISPLAY_CONTENT;
+ }
+
+ error = NULL;
+ pager->display_all = mate_panel_applet_mateconf_get_bool(applet, "display_all_workspaces", &error);
+
+ if (error)
+ {
+ g_printerr(_("Error loading display_all_workspaces value for Workspace Switcher: %s\n"), error->message);
+ g_error_free(error);
+ /* leave current value */
+ }
+
+ switch (mate_panel_applet_get_orient(applet))
+ {
+ case MATE_PANEL_APPLET_ORIENT_LEFT:
+ case MATE_PANEL_APPLET_ORIENT_RIGHT:
+ pager->orientation = GTK_ORIENTATION_VERTICAL;
+ break;
+ case MATE_PANEL_APPLET_ORIENT_UP:
+ case MATE_PANEL_APPLET_ORIENT_DOWN:
+ default:
+ pager->orientation = GTK_ORIENTATION_HORIZONTAL;
+ break;
+ }
+
+ pager->pager = wnck_pager_new(NULL);
+ pager->screen = NULL;
+ pager->wm = PAGER_WM_UNKNOWN;
+ wnck_pager_set_shadow_type(WNCK_PAGER(pager->pager), GTK_SHADOW_IN);
+
+ g_signal_connect(G_OBJECT(pager->pager), "destroy", G_CALLBACK(destroy_pager), pager);
+
+ gtk_container_add(GTK_CONTAINER(pager->applet), pager->pager);
+ gtk_widget_show(pager->pager);
+
+ g_signal_connect(G_OBJECT(pager->applet), "realize", G_CALLBACK(applet_realized), pager);
+ g_signal_connect(G_OBJECT(pager->applet), "unrealize", G_CALLBACK(applet_unrealized), pager);
+ g_signal_connect(G_OBJECT(pager->applet), "change_orient", G_CALLBACK(applet_change_orient), pager);
+ g_signal_connect(G_OBJECT(pager->applet), "scroll-event", G_CALLBACK(applet_scroll), pager);
+ g_signal_connect(G_OBJECT(pager->applet), "change_background", G_CALLBACK(applet_change_background), pager);
+
+ gtk_widget_show(pager->applet);
+
+ mate_panel_applet_set_background_widget(MATE_PANEL_APPLET(pager->applet), GTK_WIDGET(pager->applet));
+
+ action_group = gtk_action_group_new("WorkspaceSwitcher Applet Actions");
+ gtk_action_group_set_translation_domain(action_group, GETTEXT_PACKAGE);
+ gtk_action_group_add_actions(action_group, pager_menu_actions, G_N_ELEMENTS(pager_menu_actions), pager);
+ ui_path = g_build_filename(WNCK_MENU_UI_DIR, "workspace-switcher-menu.xml", NULL);
+ mate_panel_applet_setup_menu_from_file(MATE_PANEL_APPLET(pager->applet), ui_path, action_group);
+ g_free(ui_path);
+
+ if (mate_panel_applet_get_locked_down(MATE_PANEL_APPLET(pager->applet)))
+ {
+ GtkAction *action;
+
+ action = gtk_action_group_get_action(action_group, "PagerPreferences");
+ gtk_action_set_visible(action, FALSE);
+ }
+
+ g_object_unref(action_group);
+
+ return TRUE;
+}
+
+
+static void display_help_dialog(GtkAction* action, PagerData* pager)
+{
+ wncklet_display_help(pager->applet, "user-guide", "overview-workspaces", WORKSPACE_SWITCHER_ICON);
+}
+
+static void display_about_dialog(GtkAction* action, PagerData* pager)
+{
+ static const gchar* authors[] = {
+ "Alexander Larsson <[email protected]>",
+ NULL
+ };
+
+ const char* documenters[] = {
+ "John Fleck <[email protected]>",
+ "Sun MATE Documentation Team <[email protected]>",
+ NULL
+ };
+
+ char copyright[] = \
+ "Copyright \xc2\xa9 2001-2002 Red Hat, Inc.";
+
+ gtk_show_about_dialog(GTK_WINDOW(pager->applet),
+ "program-name", _("Workspace Switcher"),
+ "authors", authors,
+ "comments", _("The Workspace Switcher shows you a small version of your workspaces that lets you manage your windows."),
+ "copyright", copyright,
+ "documenters", documenters,
+ "icon-name", WORKSPACE_SWITCHER_ICON,
+ "logo-icon-name", WORKSPACE_SWITCHER_ICON,
+ "translator-credits", _("translator-credits"),
+ "version", VERSION,
+ "website", "http://matsusoft.com.ar/projects/mate/",
+ NULL);
+}
+
+
+static void display_workspace_names_toggled(GtkToggleButton*button, PagerData* pager)
+{
+ mate_panel_applet_mateconf_set_bool(MATE_PANEL_APPLET(pager->applet), "display_workspace_names", gtk_toggle_button_get_active(button), NULL);
+}
+
+static void all_workspaces_toggled(GtkToggleButton* button, PagerData* pager)
+{
+ mate_panel_applet_mateconf_set_bool(MATE_PANEL_APPLET(pager->applet), "display_all_workspaces", gtk_toggle_button_get_active(button), NULL);
+}
+
+static void num_rows_value_changed(GtkSpinButton* button, PagerData* pager)
+{
+ mate_panel_applet_mateconf_set_int(MATE_PANEL_APPLET(pager->applet), "num_rows", gtk_spin_button_get_value_as_int(button), NULL);
+}
+
+static void update_workspaces_model(PagerData* pager)
+{
+ int nr_ws, i;
+ WnckWorkspace* workspace;
+ GtkTreeIter iter;
+
+ nr_ws = wnck_screen_get_workspace_count(pager->screen);
+
+ if (pager->properties_dialog)
+ {
+ if (nr_ws != gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(pager->num_workspaces_spin)))
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(pager->num_workspaces_spin), nr_ws);
+
+ gtk_list_store_clear(pager->workspaces_store);
+
+ for (i = 0; i < nr_ws; i++)
+ {
+ workspace = wnck_screen_get_workspace(pager->screen, i);
+ gtk_list_store_append(pager->workspaces_store, &iter);
+ gtk_list_store_set(pager->workspaces_store, &iter, 0, wnck_workspace_get_name(workspace), -1);
+ }
+ }
+}
+
+static void workspace_renamed(WnckWorkspace* space, PagerData* pager)
+{
+ int i;
+ GtkTreeIter iter;
+
+ i = wnck_workspace_get_number(space);
+
+ if (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(pager->workspaces_store), &iter, NULL, i))
+ gtk_list_store_set(pager->workspaces_store, &iter, 0, wnck_workspace_get_name(space), -1);
+}
+
+static void workspace_created(WnckScreen* screen, WnckWorkspace* space, PagerData* pager)
+{
+ g_return_if_fail(WNCK_IS_SCREEN(screen));
+
+ update_workspaces_model(pager);
+
+ wncklet_connect_while_alive(space, "name_changed", G_CALLBACK(workspace_renamed), pager, pager->properties_dialog);
+}
+
+static void workspace_destroyed(WnckScreen* screen, WnckWorkspace* space, PagerData* pager)
+{
+ g_return_if_fail(WNCK_IS_SCREEN(screen));
+ update_workspaces_model(pager);
+}
+
+static void num_workspaces_value_changed(GtkSpinButton* button, PagerData* pager)
+{
+ /* Slow down a bit after the first change, since it's moving really to
+ * fast. See bug #336731 for background.
+ * FIXME: remove this if bug 410520 gets fixed. */
+ button->timer_step = 0.2;
+
+ wnck_screen_change_workspace_count(pager->screen, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(pager->num_workspaces_spin)));
+}
+
+static gboolean workspaces_tree_focused_out(GtkTreeView* treeview, GdkEventFocus* event, PagerData* pager)
+{
+ GtkTreeSelection* selection;
+
+ selection = gtk_tree_view_get_selection(treeview);
+ gtk_tree_selection_unselect_all(selection);
+ return TRUE;
+}
+
+static void workspace_name_edited(GtkCellRendererText* cell_renderer_text, const gchar* path, const gchar* new_text, PagerData* pager)
+{
+ const gint* indices;
+ WnckWorkspace* workspace;
+ GtkTreePath* p;
+
+ p = gtk_tree_path_new_from_string(path);
+ indices = gtk_tree_path_get_indices(p);
+ workspace = wnck_screen_get_workspace(pager->screen, indices[0]);
+
+ if (workspace != NULL)
+ {
+ gchar* temp_name = g_strdup(new_text);
+
+ wnck_workspace_change_name(workspace, g_strstrip(temp_name));
+
+ g_free(temp_name);
+ }
+ else
+ {
+ g_warning("Edited name of workspace %d which no longer exists", indices[0]);
+ }
+
+ gtk_tree_path_free(p);
+}
+
+static void properties_dialog_destroyed(GtkWidget* widget, PagerData* pager)
+{
+ pager->properties_dialog = NULL;
+ pager->workspaces_frame = NULL;
+ pager->workspace_names_label = NULL;
+ pager->workspace_names_scroll = NULL;
+ pager->display_workspaces_toggle = NULL;
+ pager->all_workspaces_radio = NULL;
+ pager->current_only_radio = NULL;
+ pager->num_rows_spin = NULL;
+ pager->label_row_col = NULL;
+ pager->num_workspaces_spin = NULL;
+ pager->workspaces_tree = NULL;
+ pager->workspaces_store = NULL;
+}
+
+static gboolean delete_event(GtkWidget* widget, gpointer data)
+{
+ gtk_widget_destroy(widget);
+ return TRUE;
+}
+
+static void response_cb(GtkWidget* widget, int id, PagerData* pager)
+{
+ if (id == GTK_RESPONSE_HELP)
+ wncklet_display_help(widget, "user-guide", "overview-workspaces", WORKSPACE_SWITCHER_ICON);
+ else
+ gtk_widget_destroy(widget);
+}
+
+static void close_dialog(GtkWidget* button, gpointer data)
+{
+ PagerData* pager = data;
+ GtkTreeViewColumn* col;
+
+ /* This is a hack. The "editable" signal for GtkCellRenderer is emitted
+ only on button press or focus cycle. Hence when the user changes the
+ name and closes the preferences dialog without a button-press he would
+ lose the name changes. So, we call the gtk_cell_editable_editing_done
+ to stop the editing. Thanks to Paolo for a better crack than the one I had.
+ */
+
+ col = gtk_tree_view_get_column(GTK_TREE_VIEW(pager->workspaces_tree), 0);
+
+ if (col->editable_widget != NULL && GTK_IS_CELL_EDITABLE(col->editable_widget))
+ gtk_cell_editable_editing_done(col->editable_widget);
+
+ gtk_widget_destroy(pager->properties_dialog);
+}
+
+#define WID(s) GTK_WIDGET(gtk_builder_get_object(builder, s))
+
+static void
+setup_sensitivity(PagerData* pager, GtkBuilder* builder, const char* wid1, const char* wid2, const char* wid3, const char* key)
+{
+ MatePanelApplet* applet = MATE_PANEL_APPLET(pager->applet);
+ MateConfClient* client = mateconf_client_get_default();
+ char* fullkey;
+ GtkWidget* w;
+
+ if (key[0] == '/')
+ fullkey = g_strdup(key);
+ else
+ fullkey = mate_panel_applet_mateconf_get_full_key(applet, key);
+
+ if (mateconf_client_key_is_writable(client, fullkey, NULL))
+ {
+ g_object_unref(G_OBJECT(client));
+ g_free(fullkey);
+ return;
+ }
+
+ g_object_unref(G_OBJECT(client));
+ g_free(fullkey);
+
+ w = WID(wid1);
+ g_assert(w != NULL);
+ g_object_set_data(G_OBJECT(w), NEVER_SENSITIVE, GINT_TO_POINTER(1));
+ gtk_widget_set_sensitive(w, FALSE);
+
+ if (wid2 != NULL)
+ {
+ w = WID(wid2);
+ g_assert(w != NULL);
+ g_object_set_data(G_OBJECT(w), NEVER_SENSITIVE, GINT_TO_POINTER(1));
+ gtk_widget_set_sensitive(w, FALSE);
+ }
+
+ if (wid3 != NULL)
+ {
+ w = WID(wid3);
+ g_assert(w != NULL);
+ g_object_set_data(G_OBJECT(w), NEVER_SENSITIVE, GINT_TO_POINTER(1));
+ gtk_widget_set_sensitive(w, FALSE);
+ }
+}
+
+static void setup_dialog(GtkBuilder* builder, PagerData* pager)
+{
+ gboolean value;
+ GtkTreeViewColumn* column;
+ GtkCellRenderer* cell;
+ int nr_ws, i;
+
+ pager->workspaces_frame = WID("workspaces_frame");
+ pager->workspace_names_label = WID("workspace_names_label");
+ pager->workspace_names_scroll = WID("workspace_names_scroll");
+
+ pager->display_workspaces_toggle = WID("workspace_name_toggle");
+ setup_sensitivity(pager, builder, "workspace_name_toggle", NULL, NULL, "display_workspace_names" /* key */);
+
+ pager->all_workspaces_radio = WID("all_workspaces_radio");
+ pager->current_only_radio = WID("current_only_radio");
+ setup_sensitivity(pager, builder, "all_workspaces_radio", "current_only_radio", "label_row_col", "display_all_workspaces" /* key */);
+
+ pager->num_rows_spin = WID("num_rows_spin");
+ pager->label_row_col = WID("label_row_col");
+ setup_sensitivity(pager, builder, "num_rows_spin", NULL, NULL, "num_rows" /* key */);
+
+ pager->num_workspaces_spin = WID("num_workspaces_spin");
+ setup_sensitivity(pager, builder, "num_workspaces_spin", NULL, NULL, NUM_WORKSPACES /* key */);
+
+ pager->workspaces_tree = WID("workspaces_tree_view");
+ setup_sensitivity(pager, builder, "workspaces_tree_view", NULL, NULL, WORKSPACE_NAME /* key */);
+
+ /* Display workspace names: */
+
+ g_signal_connect(G_OBJECT(pager->display_workspaces_toggle), "toggled", (GCallback) display_workspace_names_toggled, pager);
+
+ if (pager->display_mode == WNCK_PAGER_DISPLAY_NAME)
+ {
+ value = TRUE;
+ }
+ else
+ {
+ value = FALSE;
+ }
+
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pager->display_workspaces_toggle), value);
+
+ /* Display all workspaces: */
+ g_signal_connect(G_OBJECT(pager->all_workspaces_radio), "toggled", (GCallback) all_workspaces_toggled, pager);
+
+ if (pager->display_all)
+ {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pager->all_workspaces_radio), TRUE);
+
+ if (!g_object_get_data(G_OBJECT(pager->num_rows_spin), NEVER_SENSITIVE))
+ {
+ gtk_widget_set_sensitive(pager->num_rows_spin, TRUE);
+ }
+ }
+ else
+ {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pager->current_only_radio), TRUE);
+ gtk_widget_set_sensitive(pager->num_rows_spin, FALSE);
+ }
+
+ /* Num rows: */
+ g_signal_connect(G_OBJECT(pager->num_rows_spin), "value_changed", (GCallback) num_rows_value_changed, pager);
+
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(pager->num_rows_spin), pager->n_rows);
+ gtk_label_set_text(GTK_LABEL(pager->label_row_col), pager->orientation == GTK_ORIENTATION_HORIZONTAL ? _("rows") : _("columns"));
+
+ g_signal_connect(pager->properties_dialog, "destroy", G_CALLBACK(properties_dialog_destroyed), pager);
+ g_signal_connect(pager->properties_dialog, "delete_event", G_CALLBACK(delete_event), pager);
+ g_signal_connect(pager->properties_dialog, "response", G_CALLBACK(response_cb), pager);
+
+ g_signal_connect(WID("done_button"), "clicked", (GCallback) close_dialog, pager);
+
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(pager->num_workspaces_spin), wnck_screen_get_workspace_count(pager->screen));
+ g_signal_connect(G_OBJECT(pager->num_workspaces_spin), "value_changed", (GCallback) num_workspaces_value_changed, pager);
+
+ wncklet_connect_while_alive(pager->screen, "workspace_created", G_CALLBACK(workspace_created), pager, pager->properties_dialog);
+
+ wncklet_connect_while_alive(pager->screen, "workspace_destroyed", G_CALLBACK(workspace_destroyed), pager, pager->properties_dialog);
+
+ g_signal_connect(G_OBJECT(pager->workspaces_tree), "focus_out_event", (GCallback) workspaces_tree_focused_out, pager);
+
+ pager->workspaces_store = gtk_list_store_new(1, G_TYPE_STRING, NULL);
+ update_workspaces_model(pager);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(pager->workspaces_tree), GTK_TREE_MODEL(pager->workspaces_store));
+
+ g_object_unref(pager->workspaces_store);
+
+ cell = g_object_new(GTK_TYPE_CELL_RENDERER_TEXT, "editable", TRUE, NULL);
+ column = gtk_tree_view_column_new_with_attributes("workspace", cell, "text", 0, NULL);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(pager->workspaces_tree), column);
+ g_signal_connect(cell, "edited", (GCallback) workspace_name_edited, pager);
+
+ nr_ws = wnck_screen_get_workspace_count(pager->screen);
+
+ for (i = 0; i < nr_ws; i++)
+ {
+ wncklet_connect_while_alive(G_OBJECT(wnck_screen_get_workspace(pager->screen, i)), "name_changed", G_CALLBACK(workspace_renamed), pager, pager->properties_dialog);
+ }
+
+ update_properties_for_wm(pager);
+}
+
+static void display_properties_dialog(GtkAction* action, PagerData* pager)
+{
+ if (pager->properties_dialog == NULL)
+ {
+ GtkBuilder* builder;
+ GError* error;
+
+ builder = gtk_builder_new();
+ gtk_builder_set_translation_domain(builder, GETTEXT_PACKAGE);
+
+ error = NULL;
+ gtk_builder_add_from_file(builder, PAGER_BUILDERDIR "/workspace-switcher.ui", &error);
+
+ if (error)
+ {
+ g_warning("Error loading preferences: %s", error->message);
+ g_error_free(error);
+ return;
+ }
+
+ pager->properties_dialog = WID("pager_properties_dialog");
+
+ g_object_add_weak_pointer(G_OBJECT(pager->properties_dialog), (gpointer*) &pager->properties_dialog);
+
+ setup_dialog(builder, pager);
+
+ g_object_unref(builder);
+ }
+
+ gtk_window_set_icon_name(GTK_WINDOW(pager->properties_dialog), WORKSPACE_SWITCHER_ICON);
+ gtk_window_set_screen(GTK_WINDOW(pager->properties_dialog), gtk_widget_get_screen(pager->applet));
+ gtk_window_present(GTK_WINDOW(pager->properties_dialog));
+}
diff --git a/applets/wncklet/workspace-switcher.h b/applets/wncklet/workspace-switcher.h
new file mode 100644
index 00000000..7d7dead5
--- /dev/null
+++ b/applets/wncklet/workspace-switcher.h
@@ -0,0 +1,25 @@
+/*
+ * libwnck based pager Apple.
+ * (C) 2001 Alexander Larsson
+ *
+ * Authors: Alexander Larsson
+ *
+ */
+
+#ifndef __WORKSPACE_SWITCHER_APPLET_H__
+#define __WORKSPACE_SWITCHER_APPLET_H__
+
+#include <glib.h>
+#include <mate-panel-applet.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+gboolean workspace_switcher_applet_fill(MatePanelApplet* applet);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/applets/wncklet/workspace-switcher.schemas.in b/applets/wncklet/workspace-switcher.schemas.in
new file mode 100644
index 00000000..3096b9c3
--- /dev/null
+++ b/applets/wncklet/workspace-switcher.schemas.in
@@ -0,0 +1,52 @@
+<mateconfschemafile>
+ <schemalist>
+
+ <schema>
+ <key>/schemas/apps/workspace_switcher_applet/prefs/display_workspace_names</key>
+ <owner>workspace-switcher-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Display workspace names</short>
+ <long>
+ If true, the workspaces in the workspace switcher will display
+ the names of the workspaces. Otherwise they will display the
+ windows on the workspace. This setting only works when the window
+ manager is Marco.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/workspace_switcher_applet/prefs/display_all_workspaces</key>
+ <owner>workspace-switcher-applet</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Display all workspaces</short>
+ <long>
+ If true, the workspace switcher will show all workspaces. Otherwise
+ it will only show the current workspace.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/workspace_switcher_applet/prefs/num_rows</key>
+ <owner>workspace-switcher-applet</owner>
+ <type>int</type>
+ <default>1</default>
+ <locale name="C">
+ <short>Rows in workspace switcher</short>
+ <long>
+ This key specifies how many rows (for horizontal layout)
+ or columns (for vertical layout) the workspace switcher shows the
+ workspaces in. This key is only relevant if the
+ display_all_workspaces key is true.
+ </long>
+ </locale>
+ </schema>
+
+ </schemalist>
+
+</mateconfschemafile>
diff --git a/applets/wncklet/workspace-switcher.ui b/applets/wncklet/workspace-switcher.ui
new file mode 100644
index 00000000..8de7fb34
--- /dev/null
+++ b/applets/wncklet/workspace-switcher.ui
@@ -0,0 +1,323 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy toplevel-contextual -->
+ <object class="GtkDialog" id="pager_properties_dialog">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Workspace Switcher Preferences</property>
+ <property name="resizable">False</property>
+ <property name="type_hint">normal</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkVBox" id="vbox2">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment2">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox5">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkRadioButton" id="current_only_radio">
+ <property name="label" translatable="yes">Show _only the current workspace</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox9">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkRadioButton" id="all_workspaces_radio">
+ <property name="label" translatable="yes">Show _all workspaces in:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">current_only_radio</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox10">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkSpinButton" id="num_rows_spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">num_rows_adjustment</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_row_col">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">rows</property>
+ <property name="justify">center</property>
+ <property name="mnemonic_widget">num_rows_spin</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Switcher</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="workspaces_frame">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkHBox" id="hbox4">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="num_workspaces_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Number of _workspaces:</property>
+ <property name="use_underline">True</property>
+ <property name="justify">center</property>
+ <property name="mnemonic_widget">num_workspaces_spin</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="num_workspaces_spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">num_workspaces_adjustment</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="workspace_names_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Workspace na_mes:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">workspaces_tree_view</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="workspace_names_scroll">
+ <property name="height_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="workspaces_tree_view">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Workspace Names</property>
+ <property name="headers_visible">False</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="workspace_name_toggle">
+ <property name="label" translatable="yes">Show workspace _names in switcher</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Workspaces</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkButton" id="help_button">
+ <property name="label">gtk-help</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="done_button">
+ <property name="label">gtk-close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-11">help_button</action-widget>
+ <action-widget response="0">done_button</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkAdjustment" id="num_workspaces_adjustment">
+ <property name="value">1</property>
+ <property name="lower">1</property>
+ <property name="upper">36</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="num_rows_adjustment">
+ <property name="value">1</property>
+ <property name="lower">1</property>
+ <property name="upper">16</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+</interface>