← Back to team overview

ayatana-commits team mailing list archive

[Merge] lp:~ted/dbusmenu/no-error-with-no-proxy into lp:dbusmenu

 

Ted Gould has proposed merging lp:~ted/dbusmenu/no-error-with-no-proxy into lp:dbusmenu.

Requested reviews:
  Indicator Applet Developers (indicator-applet-developers)

For more details, see:
https://code.launchpad.net/~ted/dbusmenu/no-error-with-no-proxy/+merge/48106

Don't do a g_error.  No really, it makes everyone unhappy as it crashes the panel.  Thanks!
-- 
https://code.launchpad.net/~ted/dbusmenu/no-error-with-no-proxy/+merge/48106
Your team ayatana-commits is subscribed to branch lp:dbusmenu.
=== added file '.bzrignore'
--- .bzrignore	1970-01-01 00:00:00 +0000
+++ .bzrignore	2011-02-01 03:42:59 +0000
@@ -0,0 +1,11 @@
+compile
+m4
+src/libdatetime.la
+src/libdatetime_la-indicator-datetime.lo
+src/indicator-datetime-service
+po/indicator-datetime.pot
+indicator-datetime-[0-9].[0-9].[0-9].tar.gz
+data/indicator-datetime.service
+data/org.ayatana.indicator.datetime.gschema.valid
+src/gen-datetime-service.xml.c
+src/gen-datetime-service.xml.h

=== renamed file '.bzrignore' => '.bzrignore.moved'
=== added file 'AUTHORS'
--- AUTHORS	1970-01-01 00:00:00 +0000
+++ AUTHORS	2011-02-01 03:42:59 +0000
@@ -0,0 +1,2 @@
+# Generated by Makefile
+

=== renamed file 'AUTHORS' => 'AUTHORS.moved'
=== added file 'COPYING'
--- COPYING	1970-01-01 00:00:00 +0000
+++ COPYING	2011-02-01 03:42:59 +0000
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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 3 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, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.

=== renamed file 'COPYING' => 'COPYING.moved'
=== added file 'ChangeLog'
--- ChangeLog	1970-01-01 00:00:00 +0000
+++ ChangeLog	2011-02-01 03:42:59 +0000
@@ -0,0 +1,2 @@
+# Generated by Makefile
+

=== renamed file 'ChangeLog' => 'ChangeLog.moved'
=== added file 'Makefile.am'
--- Makefile.am	1970-01-01 00:00:00 +0000
+++ Makefile.am	2011-02-01 03:42:59 +0000
@@ -0,0 +1,36 @@
+
+SUBDIRS = \
+	src \
+	data \
+	tests \
+	po
+
+DISTCHECK_CONFIGURE_FLAGS = --enable-localinstall
+
+EXTRA_DIST = autogen.sh
+
+dist-hook:
+	@if test -d "$(top_srcdir)/.bzr"; \
+		then \
+			echo Creating ChangeLog && \
+				( cd "$(top_srcdir)" && \
+				echo '# Generated by Makefile. Do not edit.'; echo; \
+				$(top_srcdir)/missing --run bzr log --gnu-changelog ) > ChangeLog.tmp \
+				&& mv -f ChangeLog.tmp $(top_distdir)/ChangeLog \
+				|| (rm -f ChangeLog.tmp; \
+					echo Failed to generate ChangeLog >&2 ); \
+        else \
+			echo Failed to generate ChangeLog: not a branch >&2; \
+	fi
+	@if test -d "$(top_srcdir)/.bzr"; \
+		then \
+			echo Creating AUTHORS && \
+				( cd "$(top_srcdir)" && \
+				echo '# Generated by Makefile. Do not edit.'; echo; \
+				$(top_srcdir)/missing --run  bzr log --long --levels=0 | grep -e "^\s*author:" -e "^\s*committer:" | cut -d ":" -f 2 | cut -d "<" -f 1 | sort -u) > AUTHORS.tmp \
+				&& mv -f AUTHORS.tmp $(top_distdir)/AUTHORS \
+				|| (rm -f AUTHORS.tmp; \
+					echo Failed to generate AUTHORS >&2 ); \
+        else \
+			echo Failed to generate AUTHORS: not a branch >&2; \
+	fi

=== renamed file 'Makefile.am' => 'Makefile.am.moved'
=== added file 'NEWS'
=== renamed file 'NEWS' => 'NEWS.moved'
=== added file 'README'
=== renamed file 'README' => 'README.moved'
=== added file 'autogen.sh'
--- autogen.sh	1970-01-01 00:00:00 +0000
+++ autogen.sh	2011-02-01 03:42:59 +0000
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+PKG_NAME="indicator-datetime"
+
+which gnome-autogen.sh || {
+	echo "You need gnome-common from GNOME Git"
+	exit 1
+}
+
+USE_GNOME2_MACROS=1 \
+. gnome-autogen.sh $@

=== renamed file 'autogen.sh' => 'autogen.sh.moved'
=== added file 'configure.ac'
--- configure.ac	1970-01-01 00:00:00 +0000
+++ configure.ac	2011-02-01 03:42:59 +0000
@@ -0,0 +1,186 @@
+
+AC_INIT(indicator-datetime, 0.1.91, ted@xxxxxxxxxxxxx)
+AC_COPYRIGHT([Copyright 2009,2010 Canonical])
+
+AC_PREREQ(2.53)
+
+AM_CONFIG_HEADER(config.h)
+AM_INIT_AUTOMAKE(indicator-datetime, 0.1.91)
+
+AM_MAINTAINER_MODE
+
+IT_PROG_INTLTOOL([0.35.0])
+
+AC_ISC_POSIX
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_STDC_HEADERS
+AC_DISABLE_STATIC
+AC_PROG_LIBTOOL
+
+AC_SUBST(VERSION)
+AC_CONFIG_MACRO_DIR([m4])
+
+m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+
+AC_ARG_ENABLE([deprecations],
+  [AS_HELP_STRING([--enable-deprecations],
+    [allow deprecated API usage @<:@default=yes@:>@])],
+  [],
+  [enable_deprecations=yes])
+AS_IF([test "x$enable_deprecations" = xno],
+  [CFLAGS="$CFLAGS -DG_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGSEAL_ENABLE -DGTK_DISABLE_SINGLE_INCLUDES"]
+)
+
+AC_PATH_PROG([GLIB_MKENUMS], [glib-mkenums])
+AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal])
+
+PKG_PROG_PKG_CONFIG
+
+###########################
+# GTK+ version option
+###########################
+
+AC_ARG_WITH([gtk],
+  [AS_HELP_STRING([--with-gtk],
+    [Which version of gtk to use @<:@default=2@:>@])],
+  [],
+  [with_gtk=2])
+
+###########################
+# Dependencies
+###########################
+
+INDICATOR_REQUIRED_VERSION=0.3.0
+DBUSMENUGLIB_REQUIRED_VERSION=0.1.1
+DBUSMENUGTK_REQUIRED_VERSION=0.3.94
+GIO_REQUIRED_VERSION=2.25.11
+# Note: the GIO check below also ensures the proper glib with gsettings support is present
+INDICATOR_DISPLAY_OBJECTS=0.1.10
+GEOCLUE_REQUIRED_VERSION=0.12.0
+OOBS_REQUIRED_VERSION=2.31.0
+
+AS_IF([test "x$with_gtk" = x3],
+    [PKG_CHECK_MODULES(INDICATOR, indicator3 >= $INDICATOR_REQUIRED_VERSION
+                                  dbusmenu-glib-0.4 >= $DBUSMENUGLIB_REQUIRED_VERSION
+                                  dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+                                  libido3-0.1 >= $INDICATOR_DISPLAY_OBJECTS)
+        ],
+      [test "x$with_gtk" = x2],
+    [PKG_CHECK_MODULES(INDICATOR, indicator >= $INDICATOR_REQUIRED_VERSION
+                                  dbusmenu-glib-0.4 >= $DBUSMENUGLIB_REQUIRED_VERSION
+                                  dbusmenu-gtk-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION
+                                  libido-0.1 >= $INDICATOR_DISPLAY_OBJECTS)
+        ],
+    [AC_MSG_FAILURE([Value for --with-gtk was neither 2 nor 3])]
+)
+
+PKG_CHECK_MODULES(SERVICE,   indicator >= $INDICATOR_REQUIRED_VERSION
+                             dbusmenu-glib-0.4 >= $DBUSMENUGLIB_REQUIRED_VERSION
+                             libido-0.1 >= $INDICATOR_DISPLAY_OBJECTS
+                             gio-2.0 >= $GIO_REQUIRED_VERSION
+                             geoclue >= $GEOCLUE_REQUIRED_VERSION
+                             liboobs-1 >= $OOBS_REQUIRED_VERSION)
+
+AC_SUBST(INDICATOR_CFLAGS)
+AC_SUBST(INDICATOR_LIBS)
+
+AC_SUBST(SERVICE_CFLAGS)
+AC_SUBST(SERVICE_LIBS)
+
+###########################
+# Grab the GSettings Macros
+###########################
+
+GLIB_GSETTINGS
+
+###########################
+# Check to see if we're local
+###########################
+
+with_localinstall="no"
+AC_ARG_ENABLE(localinstall, AS_HELP_STRING([--enable-localinstall], [install all of the files localy instead of system directories (for distcheck)]), with_localinstall=$enableval, with_localinstall=no)
+
+###########################
+# Indicator Info
+###########################
+
+AS_IF([test "x$with_localinstall" = "xyes"],
+	[
+	INDICATORDIR="${libdir}/indicators/2/"
+	INDICATORICONSDIR="${datadir}/libindicate/icons/"
+	],
+	[AS_IF([test "x$with_gtk" = "x2"],
+		[
+		INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator`
+		INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator`
+		],
+		[
+		INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3`
+		INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3`
+		])])
+
+AC_SUBST(INDICATORDIR)
+AC_SUBST(INDICATORICONSDIR)
+
+###########################
+# DBus Service Info
+###########################
+
+if test "x$with_localinstall" = "xyes"; then
+	DBUSSERVICEDIR="${datadir}/dbus-1/services/"
+else
+	DBUSSERVICEDIR=`$PKG_CONFIG --variable=session_bus_services_dir dbus-1`
+fi
+AC_SUBST(DBUSSERVICEDIR)
+
+##############################
+# Custom Junk
+##############################
+
+AC_DEFUN([AC_DEFINE_PATH], [
+	test "x$prefix" = xNONE && prefix="$ac_default_prefix"
+	test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+	ac_define_path=`eval echo [$]$2`
+	ac_define_path=`eval echo [$]ac_define_path`
+	$1="$ac_define_path"
+	AC_SUBST($1)
+	ifelse($3, ,
+		AC_DEFINE_UNQUOTED($1, "$ac_define_path"),
+		AC_DEFINE_UNQUOTED($1, "$ac_define_path", $3))
+])
+
+###########################
+# Internationalization
+###########################
+
+GETTEXT_PACKAGE=indicator-datetime
+AC_SUBST(GETTEXT_PACKAGE)
+AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Name of the default get text domain])
+AC_DEFINE_PATH(GNOMELOCALEDIR, "${datadir}/locale", [locale directory])
+
+AM_GLIB_GNU_GETTEXT
+
+###########################
+# Files
+###########################
+
+AC_OUTPUT([
+Makefile
+src/Makefile
+data/Makefile
+tests/Makefile
+po/Makefile.in
+])
+
+###########################
+# Results
+###########################
+
+AC_MSG_NOTICE([
+
+Date and Time Indicator Configuration:
+
+	Prefix:        $prefix
+	Indicator Dir: $INDICATORDIR
+])

=== renamed file 'configure.ac' => 'configure.ac.moved'
=== added directory 'data'
=== added file 'data/Makefile.am'
--- data/Makefile.am	1970-01-01 00:00:00 +0000
+++ data/Makefile.am	2011-02-01 03:42:59 +0000
@@ -0,0 +1,17 @@
+#SUBDIRS = icons
+
+gsettings_SCHEMAS = \
+	com.canonical.indicator.datetime.gschema.xml
+@GSETTINGS_RULES@
+
+dbus_servicesdir = $(DBUSSERVICEDIR)
+dbus_services_DATA = indicator-datetime.service
+
+%.service: %.service.in
+	sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@
+
+EXTRA_DIST = \
+	$(gsettings_SCHEMAS) \
+	indicator-datetime.service.in
+
+CLEANFILES = indicator-datetime.service

=== added file 'data/com.canonical.indicator.datetime.gschema.xml'
--- data/com.canonical.indicator.datetime.gschema.xml	1970-01-01 00:00:00 +0000
+++ data/com.canonical.indicator.datetime.gschema.xml	2011-02-01 03:42:59 +0000
@@ -0,0 +1,61 @@
+<schemalist>
+	<enum id="time-enum">
+		<value nick="locale-default" value="0" />
+		<value nick="12-hour" value="1" />
+		<value nick="24-hour" value="2" />
+		<value nick="custom" value="3" />
+	</enum>
+	<schema id="com.canonical.indicator.datetime" path="/com/canonical/indicator/datetime/" gettext-domain="indicator-datetime">
+		<key name="time-format" enum="time-enum">
+			<default>'locale-default'</default>
+			<summary>What the time format should be</summary>
+			<description>
+			  Controls the time format that is displayed in the indicator.  For almost
+			  all users this should be the default for their locale.  If you think the
+			  setting is wrong for your locale please join or talk to the translation
+			  team for your language.  If you just want something different you can
+			  adjust this to be either 12 or 24 time.  Or, you can use a custom format
+			  string and set the custom-time-format setting.
+			</description>
+		</key>
+		<key name="show-seconds" type="b">
+			<default>false</default>
+			<summary>Show the number of seconds in the indicator</summary>
+			<description>
+			  Makes the datetime indicator show the number of seconds in the indicator.
+			  It's important to note that this will cause additional battery drain as
+			  the time will update 60 times as often, so it is not recommended.  Also,
+			  this setting will be ignored if the time-format value is set to custom.
+			</description>
+		</key>
+		<key name="show-day" type="b">
+			<default>false</default>
+			<summary>Show the day of the week in the indicator</summary>
+			<description>
+			  Puts the day of the week on the panel along with the time and/or date
+			  depending on settings.  This setting will be ignored if the time-format
+			  value is set to custom.
+			</description>
+		</key>
+		<key name="show-date" type="b">
+			<default>false</default>
+			<summary>Show the month and date in the indicator</summary>
+			<description>
+			  Puts the month and the date in the panel along with the time and/or day
+			  of the week depending on settings.  This setting will be ignored if the
+			  time-format value is set to custom.
+			</description>
+		</key>
+		<key name="custom-time-format" type="s">
+			<default>"%l:%M %p"</default>
+			<summary>The format string passed to strftime</summary>
+			<description>
+			  The format of the time and/or date that is visible on the panel when using
+			  the indicator.  For most users this will be a set of predefined values as
+			  determined by the configuration utility, but advanced users can change it
+			  to anything strftime can accept.  Look at the man page on strftime for
+			  more information.
+			</description>
+		</key>
+	</schema>
+</schemalist>

=== added file 'data/indicator-datetime.service.in'
--- data/indicator-datetime.service.in	1970-01-01 00:00:00 +0000
+++ data/indicator-datetime.service.in	2011-02-01 03:42:59 +0000
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=com.canonical.indicator.datetime
+Exec=@libexecdir@/indicator-datetime-service

=== added directory 'po'
=== renamed directory 'po' => 'po.moved'
=== added file 'po/LINGUAS'
--- po/LINGUAS	1970-01-01 00:00:00 +0000
+++ po/LINGUAS	2011-02-01 03:42:59 +0000
@@ -0,0 +1,31 @@
+ar
+bg
+cs
+da
+de
+el
+es
+fi
+fr
+he
+hi
+hr
+hu
+it
+ja
+ko
+nb
+nl
+pl
+pt
+pt_BR
+ro
+ru
+sk
+sl
+sr
+sv
+th
+tr
+zh_CN
+zh_TW

=== added file 'po/Makevars'
--- po/Makevars	1970-01-01 00:00:00 +0000
+++ po/Makevars	2011-02-01 03:42:59 +0000
@@ -0,0 +1,7 @@
+DOMAIN = $(PACKAGE)
+subdir = po
+top_builddir = ..
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --keyword=C_:1c,2 --keyword=T_ --from-code=UTF-8
+COPYRIGHT_HOLDER = Canonical Ltd.
+MSGID_BUGS_ADDRESS = ted@xxxxxxxxxxxxx
+EXTRA_LOCALE_CATEGORIES =

=== added file 'po/POTFILES.in'
--- po/POTFILES.in	1970-01-01 00:00:00 +0000
+++ po/POTFILES.in	2011-02-01 03:42:59 +0000
@@ -0,0 +1,2 @@
+src/indicator-datetime.c
+src/datetime-service.c

=== added file 'po/ar.po'
--- po/ar.po	1970-01-01 00:00:00 +0000
+++ po/ar.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,44 @@
+# Arabic translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:05-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Arabic\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "خطأ في الحصول على الوقت"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d صباحا"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d مساء"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "التقويم المفتوح (Open Calendar)"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "ضبط الوقت والتاريخ..."

=== added file 'po/bg.po'
--- po/bg.po	1970-01-01 00:00:00 +0000
+++ po/bg.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,44 @@
+# Bulgarian translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:05-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Bulgarian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Грешка при проверка на време"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d преди обяд"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d следобед"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Отвори календар"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Свери час и дата..."

=== added file 'po/cs.po'
--- po/cs.po	1970-01-01 00:00:00 +0000
+++ po/cs.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Czech translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Czech\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Chyba získání času"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d dop."
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d odp."
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Otevřít kalendář"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Nastavit čas a datum..."

=== added file 'po/da.po'
--- po/da.po	1970-01-01 00:00:00 +0000
+++ po/da.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Danish translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Danish\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Fejl ved hentning af klokkeslæt"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d.%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d.%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Ã…bn Kalender"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Indstil klokkeslæt og dato..."

=== added file 'po/de.po'
--- po/de.po	1970-01-01 00:00:00 +0000
+++ po/de.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# German translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: German\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Fehler beim Abrufen der Zeit"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Kalender öffnen"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Datum und Uhrzeit einstellen."

=== added file 'po/el.po'
--- po/el.po	1970-01-01 00:00:00 +0000
+++ po/el.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Greek translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Greek\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Σφάλμα κατά τη λήψη του χρόνου"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d π.μ."
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d μ.μ."
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Άνοιγμα ημερολογίου"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Ορισμός ώρας και ημερομηνίας..."

=== added file 'po/es.po'
--- po/es.po	1970-01-01 00:00:00 +0000
+++ po/es.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Spanish translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Spanish\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Error al obtener la hora"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Abrir calendario"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Ajustar fecha y hora..."

=== added file 'po/fi.po'
--- po/fi.po	1970-01-01 00:00:00 +0000
+++ po/fi.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Finnish translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Finnish\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Virheen noudettaessa aikaa"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AP"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d IP"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Avaa kalenteri"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Aseta kellonaika ja päivämäärä..."

=== added file 'po/fr.po'
--- po/fr.po	1970-01-01 00:00:00 +0000
+++ po/fr.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# French translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: French\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Erreur lors de l'obtention de l'heure"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Ouvrir le calendrier"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Régler la date et l'heure..."

=== added file 'po/he.po'
--- po/he.po	1970-01-01 00:00:00 +0000
+++ po/he.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Hebrew translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Hebrew\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "שגיאה בקבלת השעה"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "פתח לוח שנה"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "הגדרת שעה ותאריך..."

=== added file 'po/hi.po'
--- po/hi.po	1970-01-01 00:00:00 +0000
+++ po/hi.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,44 @@
+# Hindi translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Hindi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "समय प्राप्त करने में त्रुटि"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "प्रातः %d%d:%d%d बजे"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "सायं %d%d:%d%d बजे"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "कैलेंडर खोलें"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "समय और तिथि सेट करें..."

=== added file 'po/hr.po'
--- po/hr.po	1970-01-01 00:00:00 +0000
+++ po/hr.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,46 @@
+# Croatian translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Croatian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Greška pri dohvaćanju vremena"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Otvori kalendar"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Postavi vrijeme i datum..."

=== added file 'po/hu.po'
--- po/hu.po	1970-01-01 00:00:00 +0000
+++ po/hu.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Hungarian translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Hungarian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Hiba az idő lekérésekor"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d de."
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d du."
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Naptár megnyitása"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Idő és dátum beállítása..."

=== added file 'po/it.po'
--- po/it.po	1970-01-01 00:00:00 +0000
+++ po/it.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Italian translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Italian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Errore nell'acquisizione dell'orario"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Apri calendario"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Imposta data e ora..."

=== added file 'po/ja.po'
--- po/ja.po	1970-01-01 00:00:00 +0000
+++ po/ja.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Japanese translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Japanese\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "時刻を取得できません"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "午前 %d%d:%d%d"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "午後 %d%d:%d%d"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "カレンダーを開く"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "時刻と日付の設定..."

=== added file 'po/ko.po'
--- po/ko.po	1970-01-01 00:00:00 +0000
+++ po/ko.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Korean translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Korean\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "시간 가져오기 오류"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "오전 %d%d:%d%d"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "오후 %d%d:%d%d"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "일정 열기"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "시간 및 날짜 설정..."

=== added file 'po/nb.po'
--- po/nb.po	1970-01-01 00:00:00 +0000
+++ po/nb.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Norwegian Bokmal translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Norwegian Bokmal\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Feil under henting av klokkeslett"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Ã…pne kalender"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Angi dato og klokkeslett..."

=== added file 'po/nl.po'
--- po/nl.po	1970-01-01 00:00:00 +0000
+++ po/nl.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Dutch translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Dutch\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Fout bij lezen van tijd"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d%d%d VM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d%d%d NM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Kalender openen"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Datum en tijd instellen..."

=== added file 'po/pl.po'
--- po/pl.po	1970-01-01 00:00:00 +0000
+++ po/pl.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,46 @@
+# Polish translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Polish\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Wystąpił błąd pobierania godziny"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Otwórz kalendarz"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Ustaw godzinÄ™ i datÄ™..."

=== added file 'po/pt.po'
--- po/pt.po	1970-01-01 00:00:00 +0000
+++ po/pt.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Portuguese translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Portuguese\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Erro na obtenção das horas"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Abrir Calendário"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Acertar Hora e Data..."

=== added file 'po/pt_BR.po'
--- po/pt_BR.po	1970-01-01 00:00:00 +0000
+++ po/pt_BR.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Portuguese translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Brazilian Portuguese\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Erro ao obter hora"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Abrir o calendário"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Ajustar data e hora..."

=== added file 'po/ro.po'
--- po/ro.po	1970-01-01 00:00:00 +0000
+++ po/ro.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,46 @@
+# Romanian translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Romanian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2;\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Eroare la obținerea orei"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Deschide calendarul"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Setare oră și dată..."

=== added file 'po/ru.po'
--- po/ru.po	1970-01-01 00:00:00 +0000
+++ po/ru.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,46 @@
+# Russian translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Russian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Ошибка получения времени"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Открыть календарь"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Установить время и дату..."

=== added file 'po/sk.po'
--- po/sk.po	1970-01-01 00:00:00 +0000
+++ po/sk.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Slovak translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Slovak\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "ÄŒas zistenia chyby"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Otvoriť kalendár"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Nastaviť čas a dátum..."

=== added file 'po/sl.po'
--- po/sl.po	1970-01-01 00:00:00 +0000
+++ po/sl.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,46 @@
+# Slovenian translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Slovenian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
+"%100==4 ? 2 : 3);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Napaka pri pridobivanju podatka o času"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Odpri koledar"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Nastavi čas in datum ..."

=== added file 'po/sr.po'
--- po/sr.po	1970-01-01 00:00:00 +0000
+++ po/sr.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,46 @@
+# Serbian translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Serbian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Greška u prikazu vremena"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d%d%d pre podne"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d%d%d popodne"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Otvori kalendar"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Podesi vreme i datum"

=== added file 'po/sv.po'
--- po/sv.po	1970-01-01 00:00:00 +0000
+++ po/sv.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Swedish translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Swedish\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Ett fel uppstod då tid hämtades"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d FM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d EM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Öppna kalender"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Ange tid och datum..."

=== added file 'po/th.po'
--- po/th.po	1970-01-01 00:00:00 +0000
+++ po/th.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,44 @@
+# Thai translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Thai\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "ข้อผิดพลาดการขอข้อมูลเวลา"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d AM"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d PM"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "เปิดปฏิทิน"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "ตั้งเวลาและวันที่..."

=== added file 'po/tr.po'
--- po/tr.po	1970-01-01 00:00:00 +0000
+++ po/tr.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,45 @@
+# Turkish translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Turkish\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "Saati alma hatâsı"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "Öğleden Önce %d%d:%d%d"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "Öğleden Sonra %d%d:%d%d"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "Takvimi Aç"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "Saati ve Târihi Ayarla..."

=== added file 'po/zh_CN.po'
--- po/zh_CN.po	1970-01-01 00:00:00 +0000
+++ po/zh_CN.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,44 @@
+# Chinese translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Chinese (simplified)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "获取时间出错"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d 上午"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d 下午"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "打开日历"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "设置时间和日期..."

=== added file 'po/zh_TW.po'
--- po/zh_TW.po	1970-01-01 00:00:00 +0000
+++ po/zh_TW.po	2011-02-01 03:42:59 +0000
@@ -0,0 +1,44 @@
+# Chinese translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Canonical OEM, 2010.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: indicator-datetime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 15:20-0500\n"
+"PO-Revision-Date: 2010-03-03 10:06-0500\n"
+"Last-Translator: Canonical OEM\n"
+"Language-Team: Chinese (traditional)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/indicator-datetime.c:177
+msgid "Error getting time"
+msgstr "獲得時間發生錯誤"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:259
+#, c-format
+msgid "%d%d:%d%d AM"
+msgstr "%d%d:%d%d 上午"
+
+#. TRANSLATORS: This string is used for measuring the size of
+#. the font used for showing the time and is not shown to the
+#. user anywhere.
+#: ../src/indicator-datetime.c:266
+#, c-format
+msgid "%d%d:%d%d PM"
+msgstr "%d%d:%d%d 下午"
+
+#: ../src/indicator-datetime.c:351
+msgid "Open Calendar"
+msgstr "開啟行事曆"
+
+#: ../src/indicator-datetime.c:361
+msgid "Set Time and Date..."
+msgstr "設定時間和日期..."

=== added directory 'src'
=== added file 'src/Makefile.am'
--- src/Makefile.am	1970-01-01 00:00:00 +0000
+++ src/Makefile.am	2011-02-01 03:42:59 +0000
@@ -0,0 +1,56 @@
+
+libexec_PROGRAMS = indicator-datetime-service
+
+indicator_datetime_service_SOURCES = \
+	datetime-interface.c \
+	datetime-interface.h \
+	gen-datetime-service.xml.c \
+	calendar-menu-item.c \
+	calendar-menu-item.h \
+	datetime-service.c \
+	dbus-shared.h
+indicator_datetime_service_CFLAGS = \
+	-Wall \
+	-Werror \
+	$(SERVICE_CFLAGS) \
+	-DTIMEZONE_FILE="\"/etc/timezone\"" \
+	-DG_LOG_DOMAIN=\"Indicator-Datetime\"
+indicator_datetime_service_LDADD = \
+	$(SERVICE_LIBS)
+
+datetimelibdir = $(INDICATORDIR)
+datetimelib_LTLIBRARIES = libdatetime.la
+libdatetime_la_SOURCES = \
+	gen-datetime-service.xml.h \
+	dbus-shared.h \
+	indicator-datetime.c
+libdatetime_la_CFLAGS = \
+	$(INDICATOR_CFLAGS) \
+	-Wall -Werror \
+	-DG_LOG_DOMAIN=\"Indicator-Datetime\"
+libdatetime_la_LIBADD = \
+	$(INDICATOR_LIBS)
+libdatetime_la_LDFLAGS = \
+	-module \
+	-avoid-version
+
+gen-%.xml.c: %.xml
+	@echo "Building $@ from $<"
+	@echo "const char * _$(subst -,_,$(subst .,_,$(basename $<))) = " > $@
+	@sed -e "s:\":\\\\\":g" -e s:^:\": -e s:\$$:\\\\n\": $< >> $@
+	@echo ";" >> $@
+
+gen-%.xml.h: %.xml
+	@echo "Building $@ from $<"
+	@echo "extern const char * _$(subst -,_,$(subst .,_,$(basename $<)));" > $@
+
+BUILT_SOURCES = \
+	gen-datetime-service.xml.c \
+	gen-datetime-service.xml.h
+
+
+CLEANFILES = \
+	$(BUILT_SOURCES)
+
+EXTRA_DIST = \
+	datetime-service.xml

=== added file 'src/calendar-menu-item.c'
--- src/calendar-menu-item.c	1970-01-01 00:00:00 +0000
+++ src/calendar-menu-item.c	2011-02-01 03:42:59 +0000
@@ -0,0 +1,100 @@
+/*
+Calendar menu item dbusmenu "transport" for the corresponding IDO widget.
+
+Copyright 2010 Canonical Ltd.
+
+Authors:
+    David Barth <david.barth@xxxxxxxxxxxxx>
+
+This program is free software: you can redistribute it and/or modify it 
+under the terms of the GNU General Public License version 3, as published 
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but 
+WITHOUT ANY WARRANTY; without even the implied warranties of 
+MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 
+PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along 
+with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gdk/gdk.h>
+#include <glib/gi18n.h>
+#include "calendar-menu-item.h"
+
+#include "dbus-shared.h"
+
+#include <libdbusmenu-glib/client.h>
+#include <libdbusmenu-glib/server.h>
+#include <libdbusmenu-glib/menuitem.h>
+
+enum {
+	LAST_SIGNAL
+};
+
+/* static guint signals[LAST_SIGNAL] = { }; */
+
+typedef struct _CalendarMenuItemPrivate CalendarMenuItemPrivate;
+struct _CalendarMenuItemPrivate
+{
+	void * placeholder;
+};
+
+#define CALENDAR_MENU_ITEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_MENU_ITEM_TYPE, CalendarMenuItemPrivate))
+
+/* Prototypes */
+static void calendar_menu_item_class_init (CalendarMenuItemClass *klass);
+static void calendar_menu_item_init       (CalendarMenuItem *self);
+static void calendar_menu_item_dispose    (GObject *object);
+static void calendar_menu_item_finalize   (GObject *object);
+
+G_DEFINE_TYPE (CalendarMenuItem, calendar_menu_item, DBUSMENU_TYPE_MENUITEM);
+
+static void
+calendar_menu_item_class_init (CalendarMenuItemClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	g_type_class_add_private (klass, sizeof (CalendarMenuItemPrivate));
+
+	object_class->dispose = calendar_menu_item_dispose;
+	object_class->finalize = calendar_menu_item_finalize;
+
+	return;
+}
+
+static void
+calendar_menu_item_init (CalendarMenuItem *self)
+{
+	return;
+}
+
+static void
+calendar_menu_item_dispose (GObject *object)
+{
+	G_OBJECT_CLASS (calendar_menu_item_parent_class)->dispose (object);
+}
+
+static void
+calendar_menu_item_finalize (GObject *object)
+{
+	G_OBJECT_CLASS (calendar_menu_item_parent_class)->finalize (object);
+
+	return;
+}
+
+CalendarMenuItem *
+calendar_menu_item_new ()
+{
+	CalendarMenuItem * self = g_object_new(CALENDAR_MENU_ITEM_TYPE, NULL);
+
+	dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CALENDAR_MENUITEM_TYPE);
+
+	return self;
+}
+

=== added file 'src/calendar-menu-item.h'
--- src/calendar-menu-item.h	1970-01-01 00:00:00 +0000
+++ src/calendar-menu-item.h	2011-02-01 03:42:59 +0000
@@ -0,0 +1,59 @@
+/*
+Calendar menu item dbusmenu "transport" for the corresponding IDO widget.
+
+Copyright 2010 Canonical Ltd.
+
+Authors:
+    David Barth <david.barth@xxxxxxxxxxxxx>
+
+This program is free software: you can redistribute it and/or modify it 
+under the terms of the GNU General Public License version 3, as published 
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but 
+WITHOUT ANY WARRANTY; without even the implied warranties of 
+MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 
+PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along 
+with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __CALENDAR_MENU_ITEM_H__
+#define __CALENDAR_MENU_ITEM_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <libdbusmenu-glib/menuitem.h>
+
+G_BEGIN_DECLS
+
+#define CALENDAR_MENU_ITEM_TYPE            (calendar_menu_item_get_type ())
+#define CALENDAR_MENU_ITEM(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), CALENDAR_MENU_ITEM_TYPE, CalendarMenuItem))
+#define CALENDAR_MENU_ITEM_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), CALENDAR_MENU_ITEM_TYPE, CalendarMenuItemClass))
+#define IS_CALENDAR_MENU_ITEM(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CALENDAR_MENU_ITEM_TYPE))
+#define IS_CALENDAR_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CALENDAR_MENU_ITEM_TYPE))
+#define CALENDAR_MENU_ITEM_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), CALENDAR_MENU_ITEM_TYPE, CalendarMenuItemClass))
+
+#define CALENDAR_MENU_ITEM_SIGNAL_ACTIVATE   "activate"
+#define CALENDAR_MENUITEM_PROP_TEXT          "text"
+
+typedef struct _CalendarMenuItem      CalendarMenuItem;
+typedef struct _CalendarMenuItemClass CalendarMenuItemClass;
+
+struct _CalendarMenuItemClass {
+	DbusmenuMenuitemClass parent_class;
+};
+
+struct _CalendarMenuItem {
+	DbusmenuMenuitem parent;
+};
+
+GType calendar_menu_item_get_type (void);
+CalendarMenuItem * calendar_menu_item_new ();
+
+G_END_DECLS
+
+#endif /* __CALENDAR_MENU_ITEM_H__ */
+

=== added file 'src/datetime-interface.c'
--- src/datetime-interface.c	1970-01-01 00:00:00 +0000
+++ src/datetime-interface.c	2011-02-01 03:42:59 +0000
@@ -0,0 +1,207 @@
+/*
+An indicator to time and date related information in the menubar.
+
+Copyright 2010 Canonical Ltd.
+
+Authors:
+    Ted Gould <ted@xxxxxxxxxxxxx>
+
+This program is free software: you can redistribute it and/or modify it 
+under the terms of the GNU General Public License version 3, as published 
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but 
+WITHOUT ANY WARRANTY; without even the implied warranties of 
+MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 
+PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along 
+with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gio/gio.h>
+
+#include "datetime-interface.h"
+#include "gen-datetime-service.xml.h"
+#include "dbus-shared.h"
+
+/**
+	DatetimeInterfacePrivate:
+	@dbus_registration: The handle for this object being registered
+		on dbus.
+
+	Structure to define the memory for the private area
+	of the datetime interface instance.
+*/
+struct _DatetimeInterfacePrivate {
+	GDBusConnection * bus;
+	GCancellable * bus_cancel;
+	guint dbus_registration;
+};
+
+#define DATETIME_INTERFACE_GET_PRIVATE(o) (DATETIME_INTERFACE(o)->priv)
+
+/* GDBus Stuff */
+static GDBusNodeInfo *      node_info = NULL;
+static GDBusInterfaceInfo * interface_info = NULL;
+
+static void datetime_interface_class_init (DatetimeInterfaceClass *klass);
+static void datetime_interface_init       (DatetimeInterface *self);
+static void datetime_interface_dispose    (GObject *object);
+static void datetime_interface_finalize   (GObject *object);
+static void bus_get_cb (GObject * object, GAsyncResult * res, gpointer user_data);
+
+G_DEFINE_TYPE (DatetimeInterface, datetime_interface, G_TYPE_OBJECT);
+
+static void
+datetime_interface_class_init (DatetimeInterfaceClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	g_type_class_add_private (klass, sizeof (DatetimeInterfacePrivate));
+
+	object_class->dispose = datetime_interface_dispose;
+	object_class->finalize = datetime_interface_finalize;
+
+	/* Setting up the DBus interfaces */
+	if (node_info == NULL) {
+		GError * error = NULL;
+
+		node_info = g_dbus_node_info_new_for_xml(_datetime_service, &error);
+		if (error != NULL) {
+			g_error("Unable to parse Datetime Service Interface description: %s", error->message);
+			g_error_free(error);
+		}
+	}
+
+	if (interface_info == NULL) {
+		interface_info = g_dbus_node_info_lookup_interface(node_info, SERVICE_IFACE);
+
+		if (interface_info == NULL) {
+			g_error("Unable to find interface '" SERVICE_IFACE "'");
+		}
+	}
+
+	return;
+}
+
+static void
+datetime_interface_init (DatetimeInterface *self)
+{
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, DATETIME_INTERFACE_TYPE, DatetimeInterfacePrivate);
+
+	self->priv->bus = NULL;
+	self->priv->bus_cancel = NULL;
+	self->priv->dbus_registration = 0;
+
+	self->priv->bus_cancel = g_cancellable_new();
+	g_bus_get(G_BUS_TYPE_SESSION,
+	          self->priv->bus_cancel,
+	          bus_get_cb,
+	          self);
+
+	return;
+}
+
+static void
+bus_get_cb (GObject * object, GAsyncResult * res, gpointer user_data)
+{
+	GError * error = NULL;
+	GDBusConnection * connection = g_bus_get_finish(res, &error);
+
+	if (error != NULL) {
+		g_error("OMG! Unable to get a connection to DBus: %s", error->message);
+		g_error_free(error);
+		return;
+	}
+
+	DatetimeInterfacePrivate * priv = DATETIME_INTERFACE_GET_PRIVATE(user_data);
+
+	g_warn_if_fail(priv->bus == NULL);
+	priv->bus = connection;
+
+	if (priv->bus_cancel != NULL) {
+		g_object_unref(priv->bus_cancel);
+		priv->bus_cancel = NULL;
+	}
+
+	/* Now register our object on our new connection */
+	priv->dbus_registration = g_dbus_connection_register_object(priv->bus,
+	                                                            SERVICE_OBJ,
+	                                                            interface_info,
+	                                                            NULL,
+	                                                            user_data,
+	                                                            NULL,
+	                                                            &error);
+
+	if (error != NULL) {
+		g_error("Unable to register the object to DBus: %s", error->message);
+		g_error_free(error);
+		return;
+	}
+
+	return;	
+}
+
+static void
+datetime_interface_dispose (GObject *object)
+{
+	DatetimeInterfacePrivate * priv = DATETIME_INTERFACE_GET_PRIVATE(object);
+
+	if (priv->dbus_registration != 0) {
+		g_dbus_connection_unregister_object(priv->bus, priv->dbus_registration);
+		/* Don't care if it fails, there's nothing we can do */
+		priv->dbus_registration = 0;
+	}
+
+	if (priv->bus != NULL) {
+		g_object_unref(priv->bus);
+		priv->bus = NULL;
+	}
+
+	if (priv->bus_cancel != NULL) {
+		g_cancellable_cancel(priv->bus_cancel);
+		g_object_unref(priv->bus_cancel);
+		priv->bus_cancel = NULL;
+	}
+
+	G_OBJECT_CLASS (datetime_interface_parent_class)->dispose (object);
+	return;
+}
+
+static void
+datetime_interface_finalize (GObject *object)
+{
+
+	G_OBJECT_CLASS (datetime_interface_parent_class)->finalize (object);
+	return;
+}
+
+void
+datetime_interface_update (DatetimeInterface *self)
+{
+	g_return_if_fail(IS_DATETIME_INTERFACE(self));
+
+	DatetimeInterfacePrivate * priv = DATETIME_INTERFACE_GET_PRIVATE(self);
+	GError * error = NULL;
+
+	g_dbus_connection_emit_signal (priv->bus,
+	                               NULL,
+	                               SERVICE_OBJ,
+	                               SERVICE_IFACE,
+	                               "UpdateTime",
+	                               NULL,
+	                               &error);
+
+	if (error != NULL) {
+		g_error("Unable to send UpdateTime signal: %s", error->message);
+		g_error_free(error);
+		return;
+	}
+
+	return;
+}

=== added file 'src/datetime-interface.h'
--- src/datetime-interface.h	1970-01-01 00:00:00 +0000
+++ src/datetime-interface.h	2011-02-01 03:42:59 +0000
@@ -0,0 +1,57 @@
+/*
+An indicator to time and date related information in the menubar.
+
+Copyright 2010 Canonical Ltd.
+
+Authors:
+    Ted Gould <ted@xxxxxxxxxxxxx>
+
+This program is free software: you can redistribute it and/or modify it 
+under the terms of the GNU General Public License version 3, as published 
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but 
+WITHOUT ANY WARRANTY; without even the implied warranties of 
+MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 
+PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along 
+with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __DATETIME_INTERFACE_H__
+#define __DATETIME_INTERFACE_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define DATETIME_INTERFACE_TYPE            (datetime_interface_get_type ())
+#define DATETIME_INTERFACE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), DATETIME_INTERFACE_TYPE, DatetimeInterface))
+#define DATETIME_INTERFACE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), DATETIME_INTERFACE_TYPE, DatetimeInterfaceClass))
+#define IS_DATETIME_INTERFACE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DATETIME_INTERFACE_TYPE))
+#define IS_DATETIME_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DATETIME_INTERFACE_TYPE))
+#define DATETIME_INTERFACE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), DATETIME_INTERFACE_TYPE, DatetimeInterfaceClass))
+
+typedef struct _DatetimeInterface        DatetimeInterface;
+typedef struct _DatetimeInterfacePrivate DatetimeInterfacePrivate;
+typedef struct _DatetimeInterfaceClass   DatetimeInterfaceClass;
+
+struct _DatetimeInterfaceClass {
+	GObjectClass parent_class;
+
+	void (*update_time) (void);
+};
+
+struct _DatetimeInterface {
+	GObject parent;
+	DatetimeInterfacePrivate * priv;
+};
+
+GType              datetime_interface_get_type       (void);
+void               datetime_interface_update         (DatetimeInterface *self);
+
+G_END_DECLS
+
+#endif

=== added file 'src/datetime-service.c'
--- src/datetime-service.c	1970-01-01 00:00:00 +0000
+++ src/datetime-service.c	2011-02-01 03:42:59 +0000
@@ -0,0 +1,547 @@
+/*
+An indicator to time and date related information in the menubar.
+
+Copyright 2010 Canonical Ltd.
+
+Authors:
+    Ted Gould <ted@xxxxxxxxxxxxx>
+
+This program is free software: you can redistribute it and/or modify it 
+under the terms of the GNU General Public License version 3, as published 
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but 
+WITHOUT ANY WARRANTY; without even the implied warranties of 
+MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 
+PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along 
+with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include <libindicator/indicator-service.h>
+#include <locale.h>
+
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+
+#include <libdbusmenu-glib/server.h>
+#include <libdbusmenu-glib/client.h>
+#include <libdbusmenu-glib/menuitem.h>
+
+#include <geoclue/geoclue-master.h>
+#include <geoclue/geoclue-master-client.h>
+
+#include <oobs/oobs-timeconfig.h>
+
+#include "datetime-interface.h"
+#include "dbus-shared.h"
+
+static void geo_create_client (GeoclueMaster * master, GeoclueMasterClient * client, gchar * path, GError * error, gpointer user_data);
+static void setup_timer (void);
+
+static IndicatorService * service = NULL;
+static GMainLoop * mainloop = NULL;
+static DbusmenuServer * server = NULL;
+static DbusmenuMenuitem * root = NULL;
+static DatetimeInterface * dbus = NULL;
+static gchar * current_timezone = NULL;
+
+/* Global Items */
+static DbusmenuMenuitem * date = NULL;
+static DbusmenuMenuitem * calendar = NULL;
+static DbusmenuMenuitem * settings = NULL;
+static DbusmenuMenuitem * tzchange = NULL;
+
+/* Geoclue trackers */
+static GeoclueMasterClient * geo_master = NULL;
+static GeoclueAddress * geo_address = NULL;
+static gchar * geo_timezone = NULL;
+
+/* Check to see if our timezones are the same */
+static void
+check_timezone_sync (void) {
+	gboolean in_sync = FALSE;
+
+	if (geo_timezone == NULL) {
+		in_sync = TRUE;
+	}
+
+	if (current_timezone == NULL) {
+		in_sync = TRUE;
+	}
+
+	if (!in_sync && g_strcmp0(geo_timezone, current_timezone) == 0) {
+		in_sync = TRUE;
+	}
+
+	if (in_sync) {
+		g_debug("Timezones in sync");
+	} else {
+		g_debug("Timezones are different");
+	}
+
+	if (tzchange != NULL) {
+		if (in_sync) {
+			dbusmenu_menuitem_property_set_bool(tzchange, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE);
+		} else {
+			gchar * label = g_strdup_printf(_("Change timezone to: %s"), geo_timezone);
+
+			dbusmenu_menuitem_property_set(tzchange, DBUSMENU_MENUITEM_PROP_LABEL, label);
+			dbusmenu_menuitem_property_set_bool(tzchange, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE);
+
+			g_free(label);
+		}
+	}
+
+	return;
+}
+
+/* Update the current timezone */
+static void
+update_current_timezone (void) {
+	/* Clear old data */
+	if (current_timezone != NULL) {
+		g_free(current_timezone);
+		current_timezone = NULL;
+	}
+
+	GError * error = NULL;
+	gchar * tempzone = NULL;
+	if (!g_file_get_contents(TIMEZONE_FILE, &tempzone, NULL, &error)) {
+		g_warning("Unable to read timezone file '" TIMEZONE_FILE "': %s", error->message);
+		g_error_free(error);
+		return;
+	}
+
+	/* This shouldn't happen, so let's make it a big boom! */
+	g_return_if_fail(tempzone != NULL);
+
+	/* Note: this really makes sense as strstrip works in place
+	   so we end up with something a little odd without the dup
+	   so we have the dup to make sure everything is as expected
+	   for everyone else. */
+	current_timezone = g_strdup(g_strstrip(tempzone));
+	g_free(tempzone);
+
+	g_debug("System timezone is: %s", current_timezone);
+
+	check_timezone_sync();
+
+	return;
+}
+
+/* See how our timezone setting went */
+static void
+quick_set_tz_cb (OobsObject * obj, OobsResult result, gpointer user_data)
+{
+	if (result == OOBS_RESULT_OK) {
+		g_debug("Timezone set");
+	} else {
+		g_warning("Unable to quick set timezone");
+	}
+	return;
+}
+
+/* Set the timezone to the Geoclue discovered one */
+static void
+quick_set_tz (DbusmenuMenuitem * menuitem, guint timestamp, const gchar *command)
+{
+	g_debug("Quick setting timezone to: %s", geo_timezone);
+
+	g_return_if_fail(geo_timezone != NULL);
+
+	OobsObject * obj = oobs_time_config_get();
+	g_return_if_fail(obj != NULL);
+
+	OobsTimeConfig * timeconfig = OOBS_TIME_CONFIG(obj);
+	oobs_time_config_set_timezone(timeconfig, geo_timezone);
+
+	oobs_object_commit_async(obj, quick_set_tz_cb, NULL);
+
+	return;
+}
+
+/* Updates the label in the date menuitem */
+static gboolean
+update_datetime (gpointer user_data)
+{
+	g_debug("Updating Date/Time");
+
+	gchar longstr[128];
+	time_t t;
+	struct tm *ltime;
+
+	t = time(NULL);
+	ltime = localtime(&t);
+	if (ltime == NULL) {
+		g_warning("Error getting local time");
+		dbusmenu_menuitem_property_set(date, DBUSMENU_MENUITEM_PROP_LABEL, _("Error getting time"));
+		return FALSE;
+	}
+
+	/* Note: may require some localization tweaks */
+	strftime(longstr, 128, "%A, %e %B %Y", ltime);
+	
+	gchar * utf8 = g_locale_to_utf8(longstr, -1, NULL, NULL, NULL);
+	dbusmenu_menuitem_property_set(date, DBUSMENU_MENUITEM_PROP_LABEL, utf8);
+	g_free(utf8);
+
+	return FALSE;
+}
+
+/* Run a particular program based on an activation */
+static void
+activate_cb (DbusmenuMenuitem * menuitem, guint timestamp, const gchar *command)
+{
+	GError * error = NULL;
+
+	g_debug("Issuing command '%s'", command);
+	if (!g_spawn_command_line_async(command, &error)) {
+		g_warning("Unable to start %s: %s", (char *)command, error->message);
+		g_error_free(error);
+	}
+}
+
+/* Looks for the calendar application and enables the item if
+   we have one */
+static gboolean
+check_for_calendar (gpointer user_data)
+{
+	g_return_val_if_fail (calendar != NULL, FALSE);
+
+	gchar *evo = g_find_program_in_path("evolution");
+	if (evo != NULL) {
+		g_debug("Found the calendar application: %s", evo);
+		dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_ENABLED, TRUE);
+		dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE);
+		g_free(evo);
+	} else {
+		g_debug("Unable to find calendar app.");
+		dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE);
+	}
+
+	return FALSE;
+}
+
+/* Looks for the time and date admin application and enables the
+   item we have one */
+static gboolean
+check_for_timeadmin (gpointer user_data)
+{
+	g_return_val_if_fail (settings != NULL, FALSE);
+
+	gchar * timeadmin = g_find_program_in_path("time-admin");
+	if (timeadmin != NULL) {
+		g_debug("Found the time-admin application: %s", timeadmin);
+		dbusmenu_menuitem_property_set_bool(settings, DBUSMENU_MENUITEM_PROP_ENABLED, TRUE);
+		g_free(timeadmin);
+	} else {
+		g_debug("Unable to find time-admin app.");
+		dbusmenu_menuitem_property_set_bool(settings, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE);
+	}
+
+	return FALSE;
+}
+
+/* Does the work to build the default menu, really calls out
+   to other functions but this is the core to clean up the
+   main function. */
+static void
+build_menus (DbusmenuMenuitem * root)
+{
+	g_debug("Building Menus.");
+	if (date == NULL) {
+		date = dbusmenu_menuitem_new();
+		dbusmenu_menuitem_property_set     (date, DBUSMENU_MENUITEM_PROP_LABEL, _("No date yet..."));
+		dbusmenu_menuitem_property_set_bool(date, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE);
+		dbusmenu_menuitem_child_append(root, date);
+
+		g_idle_add(update_datetime, NULL);
+	}
+
+	if (calendar == NULL) {
+		calendar = dbusmenu_menuitem_new();
+		dbusmenu_menuitem_property_set (calendar, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CALENDAR_MENUITEM_TYPE);
+		/* insensitive until we check for available apps */
+		dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE);
+		g_signal_connect (G_OBJECT(calendar), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
+						  G_CALLBACK (activate_cb), "evolution -c calendar");
+		dbusmenu_menuitem_child_append(root, calendar);
+
+		g_idle_add(check_for_calendar, NULL);
+	}
+
+	DbusmenuMenuitem * separator = dbusmenu_menuitem_new();
+	dbusmenu_menuitem_property_set(separator, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR);
+	dbusmenu_menuitem_child_append(root, separator);
+
+	tzchange = dbusmenu_menuitem_new();
+	dbusmenu_menuitem_property_set(tzchange, DBUSMENU_MENUITEM_PROP_LABEL, "Set specific timezone");
+	dbusmenu_menuitem_property_set_bool(tzchange, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE);
+	g_signal_connect(G_OBJECT(tzchange), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(quick_set_tz), NULL);
+	dbusmenu_menuitem_child_append(root, tzchange);
+	check_timezone_sync();
+
+	settings = dbusmenu_menuitem_new();
+	dbusmenu_menuitem_property_set     (settings, DBUSMENU_MENUITEM_PROP_LABEL, _("Time & Date Settings..."));
+	/* insensitive until we check for available apps */
+	dbusmenu_menuitem_property_set_bool(settings, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE);
+	g_signal_connect(G_OBJECT(settings), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_cb), "time-admin");
+	dbusmenu_menuitem_child_append(root, settings);
+	g_idle_add(check_for_timeadmin, NULL);
+
+	return;
+}
+
+/* Run when the timezone file changes */
+static void
+timezone_changed (GFileMonitor * monitor, GFile * file, GFile * otherfile, GFileMonitorEvent event, gpointer user_data)
+{
+	update_current_timezone();
+	datetime_interface_update(DATETIME_INTERFACE(user_data));
+	update_datetime(NULL);
+	setup_timer();
+	return;
+}
+
+/* Set up monitoring the timezone file */
+static void
+build_timezone (DatetimeInterface * dbus)
+{
+	GFile * timezonefile = g_file_new_for_path(TIMEZONE_FILE);
+	GFileMonitor * monitor = g_file_monitor_file(timezonefile, G_FILE_MONITOR_NONE, NULL, NULL);
+	if (monitor != NULL) {
+		g_signal_connect(G_OBJECT(monitor), "changed", G_CALLBACK(timezone_changed), dbus);
+		g_debug("Monitoring timezone file: '" TIMEZONE_FILE "'");
+	} else {
+		g_warning("Unable to monitor timezone file: '" TIMEZONE_FILE "'");
+	}
+	return;
+}
+
+/* Source ID for the timer */
+static guint timer = 0;
+
+/* Execute at a given time, update and setup a new
+   timer to go again.  */
+static gboolean
+timer_func (gpointer user_data)
+{
+	timer = 0;
+	/* Reset up each time to reduce error */
+	setup_timer();
+	update_datetime(NULL);
+	return FALSE;
+}
+
+/* Sets up the time to launch the timer to update the
+   date in the datetime entry */
+static void
+setup_timer (void)
+{
+	if (timer != 0) {
+		g_source_remove(timer);
+		timer = 0;
+	}
+
+	time_t t;
+	t = time(NULL);
+	struct tm * ltime = localtime(&t);
+
+	timer = g_timeout_add_seconds(((23 - ltime->tm_hour) * 60 * 60) +
+	                              ((59 - ltime->tm_min) * 60) +
+	                              ((60 - ltime->tm_sec)) + 60 /* one minute past */,
+	                              timer_func, NULL);
+
+	return;
+}
+
+/* Callback from getting the address */
+static void
+geo_address_cb (GeoclueAddress * address, int timestamp, GHashTable * addy_data, GeoclueAccuracy * accuracy, GError * error, gpointer user_data)
+{
+	if (error != NULL) {
+		g_warning("Unable to get Geoclue address: %s", error->message);
+		return;
+	}
+
+	g_debug("Geoclue timezone is: %s", (gchar *)g_hash_table_lookup(addy_data, "timezone"));
+
+	if (geo_timezone != NULL) {
+		g_free(geo_timezone);
+		geo_timezone = NULL;
+	}
+
+	gpointer tz_hash = g_hash_table_lookup(addy_data, "timezone");
+	if (tz_hash != NULL) {
+		geo_timezone = g_strdup((gchar *)tz_hash);
+	}
+
+	check_timezone_sync();
+
+	return;
+}
+
+/* Callback from creating the address */
+static void
+geo_create_address (GeoclueMasterClient * master, GeoclueAddress * address, GError * error, gpointer user_data)
+{
+	if (error != NULL) {
+		g_warning("Unable to create GeoClue address: %s", error->message);
+		return;
+	}
+
+	g_debug("Created Geoclue Address");
+	geo_address = address;
+	g_object_ref(G_OBJECT(geo_address));
+
+	geoclue_address_get_address_async(geo_address, geo_address_cb, NULL);
+
+	g_signal_connect(G_OBJECT(address), "address-changed", G_CALLBACK(geo_address_cb), NULL);
+
+	return;
+}
+
+/* Callback from setting requirements */
+static void
+geo_req_set (GeoclueMasterClient * master, GError * error, gpointer user_data)
+{
+	if (error != NULL) {
+		g_warning("Unable to set Geoclue requirements: %s", error->message);
+	}
+	return;
+}
+
+/* Client is killing itself rather oddly */
+static void
+geo_client_invalid (GeoclueMasterClient * client, gpointer user_data)
+{
+	g_warning("Master client invalid, rebuilding.");
+
+	if (geo_master != NULL) {
+		g_object_unref(G_OBJECT(geo_master));
+	}
+	geo_master = NULL;
+
+	GeoclueMaster * master = geoclue_master_get_default();
+	geoclue_master_create_client_async(master, geo_create_client, NULL);
+
+	if (geo_timezone != NULL) {
+		g_free(geo_timezone);
+		geo_timezone = NULL;
+	}
+
+	check_timezone_sync();
+
+	return;
+}
+
+/* Address provider changed, we need to get that one */
+static void
+geo_address_change (GeoclueMasterClient * client, gchar * a, gchar * b, gchar * c, gchar * d, gpointer user_data)
+{
+	g_warning("Address provider changed.  Let's change");
+
+	if (geo_address != NULL) {
+		g_object_unref(G_OBJECT(geo_address));
+	}
+	geo_address = NULL;
+
+	geoclue_master_client_create_address_async(geo_master, geo_create_address, NULL);
+
+	if (geo_timezone != NULL) {
+		g_free(geo_timezone);
+		geo_timezone = NULL;
+	}
+
+	check_timezone_sync();
+
+	return;
+}
+
+/* Callback from creating the client */
+static void
+geo_create_client (GeoclueMaster * master, GeoclueMasterClient * client, gchar * path, GError * error, gpointer user_data)
+{
+	g_debug("Created Geoclue client at: %s", path);
+
+	geo_master = client;
+	g_object_ref(G_OBJECT(geo_master));
+
+	geoclue_master_client_set_requirements_async(geo_master,
+	                                             GEOCLUE_ACCURACY_LEVEL_REGION,
+	                                             0,
+	                                             FALSE,
+	                                             GEOCLUE_RESOURCE_ALL,
+	                                             geo_req_set,
+	                                             NULL);
+
+	geoclue_master_client_create_address_async(geo_master, geo_create_address, NULL);
+
+	g_signal_connect(G_OBJECT(client), "invalidated", G_CALLBACK(geo_client_invalid), NULL);
+	g_signal_connect(G_OBJECT(client), "address-provider-changed", G_CALLBACK(geo_address_change), NULL);
+
+	return;
+}
+
+/* Repsonds to the service object saying it's time to shutdown.
+   It stops the mainloop. */
+static void 
+service_shutdown (IndicatorService * service, gpointer user_data)
+{
+	g_warning("Shutting down service!");
+	g_main_loop_quit(mainloop);
+	return;
+}
+
+/* Function to build everything up.  Entry point from asm. */
+int
+main (int argc, char ** argv)
+{
+	g_type_init();
+
+	/* Acknowledging the service init and setting up the interface */
+	service = indicator_service_new_version(SERVICE_NAME, SERVICE_VERSION);
+	g_signal_connect(service, INDICATOR_SERVICE_SIGNAL_SHUTDOWN, G_CALLBACK(service_shutdown), NULL);
+
+	/* Setting up i18n and gettext.  Apparently, we need
+	   all of these. */
+	setlocale (LC_ALL, "");
+	bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
+	textdomain (GETTEXT_PACKAGE);
+
+	/* Cache the timezone */
+	update_current_timezone();
+
+	/* Building the base menu */
+	server = dbusmenu_server_new(MENU_OBJ);
+	root = dbusmenu_menuitem_new();
+	dbusmenu_server_set_root(server, root);
+	build_menus(root);
+
+	/* Setup geoclue */
+	GeoclueMaster * master = geoclue_master_get_default();
+	geoclue_master_create_client_async(master, geo_create_client, NULL);
+
+	/* Setup dbus interface */
+	dbus = g_object_new(DATETIME_INTERFACE_TYPE, NULL);
+
+	/* Setup timezone watch */
+	build_timezone(dbus);
+
+	/* Setup the timer */
+	setup_timer();
+
+	mainloop = g_main_loop_new(NULL, FALSE);
+	g_main_loop_run(mainloop);
+
+	g_object_unref(G_OBJECT(master));
+	g_object_unref(G_OBJECT(dbus));
+	g_object_unref(G_OBJECT(service));
+	g_object_unref(G_OBJECT(server));
+	g_object_unref(G_OBJECT(root));
+
+	return 0;
+}

=== added file 'src/datetime-service.xml'
--- src/datetime-service.xml	1970-01-01 00:00:00 +0000
+++ src/datetime-service.xml	2011-02-01 03:42:59 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/">
+	<interface name="com.canonical.indicator.datetime.service">
+
+<!-- Methods -->
+
+<!-- Signals -->
+		<signal name="UpdateTime" />
+
+	</interface>
+</node>

=== added file 'src/dbus-shared.h'
--- src/dbus-shared.h	1970-01-01 00:00:00 +0000
+++ src/dbus-shared.h	2011-02-01 03:42:59 +0000
@@ -0,0 +1,31 @@
+/*
+An indicator to show date and time information.
+
+Copyright 2010 Canonical Ltd.
+
+Authors:
+    Ted Gould <ted@xxxxxxxxxxxxx>
+
+This program is free software: you can redistribute it and/or modify it 
+under the terms of the GNU General Public License version 3, as published 
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but 
+WITHOUT ANY WARRANTY; without even the implied warranties of 
+MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 
+PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along 
+with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#define  SERVICE_NAME     "com.canonical.indicator.datetime"
+#define  SERVICE_IFACE    "com.canonical.indicator.datetime.service"
+#define  SERVICE_OBJ      "/com/canonical/indicator/datetime/service"
+#define  SERVICE_VERSION  1
+
+#define  MENU_OBJ      "/com/canonical/indicator/datetime/menu"
+
+#define  DBUSMENU_CALENDAR_MENUITEM_TYPE "x-canonical-calendar-item"
+

=== added file 'src/indicator-datetime.c'
--- src/indicator-datetime.c	1970-01-01 00:00:00 +0000
+++ src/indicator-datetime.c	2011-02-01 03:42:59 +0000
@@ -0,0 +1,1126 @@
+/*
+An indicator to time and date related information in the menubar.
+
+Copyright 2010 Canonical Ltd.
+
+Authors:
+    Ted Gould <ted@xxxxxxxxxxxxx>
+
+This program is free software: you can redistribute it and/or modify it 
+under the terms of the GNU General Public License version 3, as published 
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but 
+WITHOUT ANY WARRANTY; without even the implied warranties of 
+MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 
+PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along 
+with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <locale.h>
+#include <langinfo.h>
+#include <string.h>
+
+/* GStuff */
+#include <glib.h>
+#include <glib-object.h>
+#include <glib/gi18n-lib.h>
+#include <gio/gio.h>
+
+/* Indicator Stuff */
+#include <libindicator/indicator.h>
+#include <libindicator/indicator-object.h>
+#include <libindicator/indicator-service-manager.h>
+
+/* DBusMenu */
+#include <libdbusmenu-gtk/menu.h>
+#include <libido/idocalendarmenuitem.h>
+
+#include "dbus-shared.h"
+
+
+#define INDICATOR_DATETIME_TYPE            (indicator_datetime_get_type ())
+#define INDICATOR_DATETIME(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), INDICATOR_DATETIME_TYPE, IndicatorDatetime))
+#define INDICATOR_DATETIME_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), INDICATOR_DATETIME_TYPE, IndicatorDatetimeClass))
+#define IS_INDICATOR_DATETIME(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INDICATOR_DATETIME_TYPE))
+#define IS_INDICATOR_DATETIME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), INDICATOR_DATETIME_TYPE))
+#define INDICATOR_DATETIME_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), INDICATOR_DATETIME_TYPE, IndicatorDatetimeClass))
+
+typedef struct _IndicatorDatetime         IndicatorDatetime;
+typedef struct _IndicatorDatetimeClass    IndicatorDatetimeClass;
+typedef struct _IndicatorDatetimePrivate  IndicatorDatetimePrivate;
+
+struct _IndicatorDatetimeClass {
+	IndicatorObjectClass parent_class;
+};
+
+struct _IndicatorDatetime {
+	IndicatorObject parent;
+	IndicatorDatetimePrivate * priv;
+};
+
+struct _IndicatorDatetimePrivate {
+	GtkLabel * label;
+	guint timer;
+
+	gchar * time_string;
+
+	gint time_mode;
+	gboolean show_seconds;
+	gboolean show_date;
+	gboolean show_day;
+	gchar * custom_string;
+	gboolean custom_show_seconds;
+
+	guint idle_measure;
+	gint  max_width;
+
+	IndicatorServiceManager * sm;
+	DbusmenuGtkMenu * menu;
+
+	GCancellable * service_proxy_cancel;
+	GDBusProxy * service_proxy;
+	IdoCalendarMenuItem *ido_calendar;
+
+	GSettings * settings;
+};
+
+/* Enum for the properties so that they can be quickly
+   found and looked up. */
+enum {
+	PROP_0,
+	PROP_TIME_FORMAT,
+	PROP_SHOW_SECONDS,
+	PROP_SHOW_DAY,
+	PROP_SHOW_DATE,
+	PROP_CUSTOM_TIME_FORMAT
+};
+
+#define PROP_TIME_FORMAT_S              "time-format"
+#define PROP_SHOW_SECONDS_S             "show-seconds"
+#define PROP_SHOW_DAY_S                 "show-day"
+#define PROP_SHOW_DATE_S                "show-date"
+#define PROP_CUSTOM_TIME_FORMAT_S       "custom-time-format"
+
+#define SETTINGS_INTERFACE              "com.canonical.indicator.datetime"
+#define SETTINGS_TIME_FORMAT_S          "time-format"
+#define SETTINGS_SHOW_SECONDS_S         "show-seconds"
+#define SETTINGS_SHOW_DAY_S             "show-day"
+#define SETTINGS_SHOW_DATE_S            "show-date"
+#define SETTINGS_CUSTOM_TIME_FORMAT_S   "custom-time-format"
+
+enum {
+	SETTINGS_TIME_LOCALE = 0,
+	SETTINGS_TIME_12_HOUR = 1,
+	SETTINGS_TIME_24_HOUR = 2,
+	SETTINGS_TIME_CUSTOM = 3
+};
+
+/* TRANSLATORS: A format string for the strftime function for
+   a clock showing 12-hour time without seconds. */
+#define DEFAULT_TIME_12_FORMAT   N_("%l:%M %p")
+
+/* TRANSLATORS: A format string for the strftime function for
+   a clock showing 24-hour time without seconds. */
+#define DEFAULT_TIME_24_FORMAT   N_("%H:%M")
+
+#define DEFAULT_TIME_FORMAT      DEFAULT_TIME_12_FORMAT
+
+#define INDICATOR_DATETIME_GET_PRIVATE(o) \
+(G_TYPE_INSTANCE_GET_PRIVATE ((o), INDICATOR_DATETIME_TYPE, IndicatorDatetimePrivate))
+
+enum {
+	STRFTIME_MASK_NONE    = 0,      /* Hours or minutes as we always test those */
+	STRFTIME_MASK_SECONDS = 1 << 0, /* Seconds count */
+	STRFTIME_MASK_AMPM    = 1 << 1, /* AM/PM counts */
+	STRFTIME_MASK_WEEK    = 1 << 2, /* Day of the week maters (Sat, Sun, etc.) */
+	STRFTIME_MASK_DAY     = 1 << 3, /* Day of the month counts (Feb 1st) */
+	STRFTIME_MASK_MONTH   = 1 << 4, /* Which month matters */
+	STRFTIME_MASK_YEAR    = 1 << 5, /* Which year matters */
+	/* Last entry, combines all previous */
+	STRFTIME_MASK_ALL     = (STRFTIME_MASK_SECONDS | STRFTIME_MASK_AMPM | STRFTIME_MASK_WEEK | STRFTIME_MASK_DAY | STRFTIME_MASK_MONTH | STRFTIME_MASK_YEAR)
+};
+
+GType indicator_datetime_get_type (void);
+
+static void indicator_datetime_class_init (IndicatorDatetimeClass *klass);
+static void indicator_datetime_init       (IndicatorDatetime *self);
+static void set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec);
+static void get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec);
+static void indicator_datetime_dispose    (GObject *object);
+static void indicator_datetime_finalize   (GObject *object);
+static GtkLabel * get_label               (IndicatorObject * io);
+static GtkMenu *  get_menu                (IndicatorObject * io);
+static GVariant * bind_enum_set           (const GValue * value, const GVariantType * type, gpointer user_data);
+static gboolean bind_enum_get             (GValue * value, GVariant * variant, gpointer user_data);
+static gchar * generate_format_string     (IndicatorDatetime * self);
+static struct tm * update_label           (IndicatorDatetime * io);
+static void guess_label_size              (IndicatorDatetime * self);
+static void setup_timer                   (IndicatorDatetime * self, struct tm * ltime);
+static void update_time                   (IndicatorDatetime * self);
+static void receive_signal                (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, GVariant * parameters, gpointer user_data);
+static void service_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data);
+static gint generate_strftime_bitmask     (const char *time_str);
+
+/* Indicator Module Config */
+INDICATOR_SET_VERSION
+INDICATOR_SET_TYPE(INDICATOR_DATETIME_TYPE)
+
+G_DEFINE_TYPE (IndicatorDatetime, indicator_datetime, INDICATOR_OBJECT_TYPE);
+
+static void
+indicator_datetime_class_init (IndicatorDatetimeClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	g_type_class_add_private (klass, sizeof (IndicatorDatetimePrivate));
+
+	object_class->dispose = indicator_datetime_dispose;
+	object_class->finalize = indicator_datetime_finalize;
+
+	object_class->set_property = set_property;
+	object_class->get_property = get_property;
+
+	IndicatorObjectClass * io_class = INDICATOR_OBJECT_CLASS(klass);
+
+	io_class->get_label = get_label;
+	io_class->get_menu  = get_menu;
+
+	g_object_class_install_property (object_class,
+	                                 PROP_TIME_FORMAT,
+	                                 g_param_spec_int(PROP_TIME_FORMAT_S,
+	                                                  "A choice of which format should be used on the panel",
+	                                                  "Chooses between letting the locale choose the time, 12-hour time, 24-time or using the custom string passed to strftime().",
+	                                                  SETTINGS_TIME_LOCALE, /* min */
+	                                                  SETTINGS_TIME_CUSTOM, /* max */
+	                                                  SETTINGS_TIME_LOCALE, /* default */
+	                                                  G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+	g_object_class_install_property (object_class,
+	                                 PROP_SHOW_SECONDS,
+	                                 g_param_spec_boolean(PROP_SHOW_SECONDS_S,
+	                                                      "Whether to show seconds in the indicator.",
+	                                                      "Shows seconds along with the time in the indicator.  Also effects refresh interval.",
+	                                                      FALSE, /* default */
+	                                                      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+	g_object_class_install_property (object_class,
+	                                 PROP_SHOW_DAY,
+	                                 g_param_spec_boolean(PROP_SHOW_DAY_S,
+	                                                      "Whether to show the day of the week in the indicator.",
+	                                                      "Shows the day of the week along with the time in the indicator.",
+	                                                      FALSE, /* default */
+	                                                      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+	g_object_class_install_property (object_class,
+	                                 PROP_SHOW_DATE,
+	                                 g_param_spec_boolean(PROP_SHOW_DATE_S,
+	                                                      "Whether to show the day and month in the indicator.",
+	                                                      "Shows the day and month along with the time in the indicator.",
+	                                                      FALSE, /* default */
+	                                                      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+	g_object_class_install_property (object_class,
+	                                 PROP_CUSTOM_TIME_FORMAT,
+	                                 g_param_spec_string(PROP_CUSTOM_TIME_FORMAT_S,
+	                                                     "The format that is used to show the time on the panel.",
+	                                                     "A format string in the form used to pass to strftime to make a string for displaying on the panel.",
+	                                                     DEFAULT_TIME_FORMAT,
+	                                                     G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+	return;
+}
+
+static void
+indicator_datetime_init (IndicatorDatetime *self)
+{
+	self->priv = INDICATOR_DATETIME_GET_PRIVATE(self);
+
+	self->priv->label = NULL;
+	self->priv->timer = 0;
+
+	self->priv->idle_measure = 0;
+	self->priv->max_width = 0;
+
+	self->priv->time_mode = SETTINGS_TIME_LOCALE;
+	self->priv->show_seconds = FALSE;
+	self->priv->show_date = FALSE;
+	self->priv->show_day = FALSE;
+	self->priv->custom_string = g_strdup(DEFAULT_TIME_FORMAT);
+	self->priv->custom_show_seconds = FALSE;
+
+	self->priv->time_string = generate_format_string(self);
+
+	self->priv->service_proxy = NULL;
+
+	self->priv->sm = NULL;
+	self->priv->menu = NULL;
+
+	self->priv->settings = g_settings_new(SETTINGS_INTERFACE);
+	if (self->priv->settings != NULL) {
+		g_settings_bind_with_mapping(self->priv->settings,
+		                SETTINGS_TIME_FORMAT_S,
+		                self,
+		                PROP_TIME_FORMAT_S,
+		                G_SETTINGS_BIND_DEFAULT,
+		                bind_enum_get,
+		                bind_enum_set,
+		                NULL, NULL); /* Userdata and destroy func */
+		g_settings_bind(self->priv->settings,
+		                SETTINGS_SHOW_SECONDS_S,
+		                self,
+		                PROP_SHOW_SECONDS_S,
+		                G_SETTINGS_BIND_DEFAULT);
+		g_settings_bind(self->priv->settings,
+		                SETTINGS_SHOW_DAY_S,
+		                self,
+		                PROP_SHOW_DAY_S,
+		                G_SETTINGS_BIND_DEFAULT);
+		g_settings_bind(self->priv->settings,
+		                SETTINGS_SHOW_DATE_S,
+		                self,
+		                PROP_SHOW_DATE_S,
+		                G_SETTINGS_BIND_DEFAULT);
+		g_settings_bind(self->priv->settings,
+		                SETTINGS_CUSTOM_TIME_FORMAT_S,
+		                self,
+		                PROP_CUSTOM_TIME_FORMAT_S,
+		                G_SETTINGS_BIND_DEFAULT);
+	} else {
+		g_warning("Unable to get settings for '" SETTINGS_INTERFACE "'");
+	}
+
+	self->priv->sm = indicator_service_manager_new_version(SERVICE_NAME, SERVICE_VERSION);
+
+	self->priv->service_proxy_cancel = g_cancellable_new();
+
+	g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
+		                  G_DBUS_PROXY_FLAGS_NONE,
+		                  NULL,
+		                  SERVICE_NAME,
+		                  SERVICE_OBJ,
+		                  SERVICE_IFACE,
+		                  self->priv->service_proxy_cancel,
+		                  service_proxy_cb,
+                                  self);
+
+	return;
+}
+
+/* Callback from trying to create the proxy for the serivce, this
+   could include starting the service.  Sometime it'll fail and
+   we'll try to start that dang service again! */
+static void
+service_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data)
+{
+	GError * error = NULL;
+
+	IndicatorDatetime * self = INDICATOR_DATETIME(user_data);
+	g_return_if_fail(self != NULL);
+
+	GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error);
+
+	IndicatorDatetimePrivate * priv = INDICATOR_DATETIME_GET_PRIVATE(self);
+
+	if (priv->service_proxy_cancel != NULL) {
+		g_object_unref(priv->service_proxy_cancel);
+		priv->service_proxy_cancel = NULL;
+	}
+
+	if (error != NULL) {
+		g_warning("Could not grab DBus proxy for %s: %s", SERVICE_NAME, error->message);
+		g_error_free(error);
+		return;
+	}
+
+	/* Okay, we're good to grab the proxy at this point, we're
+	sure that it's ours. */
+	priv->service_proxy = proxy;
+
+	g_signal_connect(proxy, "g-signal", G_CALLBACK(receive_signal), self);
+
+	return;
+}
+
+static void
+indicator_datetime_dispose (GObject *object)
+{
+	IndicatorDatetime * self = INDICATOR_DATETIME(object);
+
+	if (self->priv->label != NULL) {
+		g_object_unref(self->priv->label);
+		self->priv->label = NULL;
+	}
+
+	if (self->priv->timer != 0) {
+		g_source_remove(self->priv->timer);
+		self->priv->timer = 0;
+	}
+
+	if (self->priv->idle_measure != 0) {
+		g_source_remove(self->priv->idle_measure);
+		self->priv->idle_measure = 0;
+	}
+
+	if (self->priv->menu != NULL) {
+		g_object_unref(G_OBJECT(self->priv->menu));
+		self->priv->menu = NULL;
+	}
+
+	if (self->priv->sm != NULL) {
+		g_object_unref(G_OBJECT(self->priv->sm));
+		self->priv->sm = NULL;
+	}
+
+	if (self->priv->settings != NULL) {
+		g_object_unref(G_OBJECT(self->priv->settings));
+		self->priv->settings = NULL;
+	}
+
+	if (self->priv->service_proxy != NULL) {
+		g_object_unref(self->priv->service_proxy);
+		self->priv->service_proxy = NULL;
+	}
+
+	G_OBJECT_CLASS (indicator_datetime_parent_class)->dispose (object);
+	return;
+}
+
+static void
+indicator_datetime_finalize (GObject *object)
+{
+	IndicatorDatetime * self = INDICATOR_DATETIME(object);
+
+	if (self->priv->time_string != NULL) {
+		g_free(self->priv->time_string);
+		self->priv->time_string = NULL;
+	}
+
+	if (self->priv->custom_string != NULL) {
+		g_free(self->priv->custom_string);
+		self->priv->custom_string = NULL;
+	}
+
+	G_OBJECT_CLASS (indicator_datetime_parent_class)->finalize (object);
+	return;
+}
+
+/* Turns the int value into a string GVariant */
+static GVariant *
+bind_enum_set (const GValue * value, const GVariantType * type, gpointer user_data)
+{
+	switch (g_value_get_int(value)) {
+	case SETTINGS_TIME_LOCALE:
+		return g_variant_new_string("locale-default");
+	case SETTINGS_TIME_12_HOUR:
+		return g_variant_new_string("12-hour");
+	case SETTINGS_TIME_24_HOUR:
+		return g_variant_new_string("24-hour");
+	case SETTINGS_TIME_CUSTOM:
+		return g_variant_new_string("custom");
+	default:
+		return NULL;
+	}
+}
+
+/* Turns a string GVariant into an int value */
+static gboolean
+bind_enum_get (GValue * value, GVariant * variant, gpointer user_data)
+{
+	const gchar * str = g_variant_get_string(variant, NULL);
+	gint output = 0;
+
+	if (g_strcmp0(str, "locale-default") == 0) {
+		output = SETTINGS_TIME_LOCALE;
+	} else if (g_strcmp0(str, "12-hour") == 0) {
+		output = SETTINGS_TIME_12_HOUR;
+	} else if (g_strcmp0(str, "24-hour") == 0) {
+		output = SETTINGS_TIME_24_HOUR;
+	} else if (g_strcmp0(str, "custom") == 0) {
+		output = SETTINGS_TIME_CUSTOM;
+	} else {
+		return FALSE;
+	}
+
+	g_value_set_int(value, output);
+	return TRUE;
+}
+
+/* Sets a property on the object */
+static void
+set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec)
+{
+	IndicatorDatetime * self = INDICATOR_DATETIME(object);
+	gboolean update = FALSE;
+
+	switch(prop_id) {
+	case PROP_TIME_FORMAT: {
+		gint newval = g_value_get_int(value);
+		if (newval != self->priv->time_mode) {
+			update = TRUE;
+			self->priv->time_mode = newval;
+			setup_timer(self, NULL);			
+		}
+		break;
+	}
+	case PROP_SHOW_SECONDS:
+		if (g_value_get_boolean(value) != self->priv->show_seconds) {
+			self->priv->show_seconds = !self->priv->show_seconds;
+			if (self->priv->time_mode != SETTINGS_TIME_CUSTOM) {
+				update = TRUE;
+				setup_timer(self, NULL);
+			}
+		}
+		break;
+	case PROP_SHOW_DAY:
+		if (g_value_get_boolean(value) != self->priv->show_day) {
+			self->priv->show_day = !self->priv->show_day;
+			if (self->priv->time_mode != SETTINGS_TIME_CUSTOM) {
+				update = TRUE;
+			}
+		}
+		break;
+	case PROP_SHOW_DATE:
+		if (g_value_get_boolean(value) != self->priv->show_date) {
+			self->priv->show_date = !self->priv->show_date;
+			if (self->priv->time_mode != SETTINGS_TIME_CUSTOM) {
+				update = TRUE;
+			}
+		}
+		break;
+	case PROP_CUSTOM_TIME_FORMAT: {
+		const gchar * newstr = g_value_get_string(value);
+		if (g_strcmp0(newstr, self->priv->custom_string) != 0) {
+			if (self->priv->custom_string != NULL) {
+				g_free(self->priv->custom_string);
+				self->priv->custom_string = NULL;
+			}
+			self->priv->custom_string = g_strdup(newstr);
+			gint time_mask = generate_strftime_bitmask(newstr);
+			self->priv->custom_show_seconds = (time_mask & STRFTIME_MASK_SECONDS);
+			if (self->priv->time_mode == SETTINGS_TIME_CUSTOM) {
+				update = TRUE;
+				setup_timer(self, NULL);
+			}
+		}
+		break;
+	}
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+		return;
+	}
+
+	if (!update) {
+		return;
+	}
+
+	/* Get the new format string */
+	gchar * newformat = generate_format_string(self);
+
+	/* check to ensure the format really changed */
+	if (g_strcmp0(self->priv->time_string, newformat) == 0) {
+		g_free(newformat);
+		return;
+	}
+
+	/* Okay now process the change */
+	if (self->priv->time_string != NULL) {
+		g_free(self->priv->time_string);
+		self->priv->time_string = NULL;
+	}
+	self->priv->time_string = newformat;
+
+	/* And update everything */
+	update_label(self);
+	guess_label_size(self);
+
+	return;
+}
+
+/* Gets a property from the object */
+static void
+get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec)
+{
+	IndicatorDatetime * self = INDICATOR_DATETIME(object);
+
+	switch(prop_id) {
+	case PROP_TIME_FORMAT:
+		g_value_set_int(value, self->priv->time_mode);
+		break;
+	case PROP_SHOW_SECONDS:
+		g_value_set_boolean(value, self->priv->show_seconds);
+		break;
+	case PROP_SHOW_DAY:
+		g_value_set_boolean(value, self->priv->show_day);
+		break;
+	case PROP_SHOW_DATE:
+		g_value_set_boolean(value, self->priv->show_date);
+		break;
+	case PROP_CUSTOM_TIME_FORMAT:
+		g_value_set_string(value, self->priv->custom_string);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+		return;
+	}
+
+	return;
+}
+
+/* Looks at the size of the label, if it grew beyond what we
+   thought was the max, make sure it doesn't shrink again. */
+static gboolean
+idle_measure (gpointer data)
+{
+	IndicatorDatetime * self = INDICATOR_DATETIME(data);
+	self->priv->idle_measure = 0;
+
+	GtkAllocation allocation;
+	gtk_widget_get_allocation(GTK_WIDGET(self->priv->label), &allocation);
+
+	if (allocation.width > self->priv->max_width) {
+		if (self->priv->max_width != 0) {
+			g_warning("Guessed wrong.  We thought the max would be %d but we're now at %d", self->priv->max_width, allocation.width);
+		}
+		self->priv->max_width = allocation.width;
+		gtk_widget_set_size_request(GTK_WIDGET(self->priv->label), self->priv->max_width, -1);
+	}
+
+	return FALSE;
+}
+
+/* Updates the label to be the current time. */
+static struct tm *
+update_label (IndicatorDatetime * io)
+{
+	IndicatorDatetime * self = INDICATOR_DATETIME(io);
+
+	if (self->priv->label == NULL) return NULL;
+
+	gchar longstr[256];
+	time_t t;
+	struct tm *ltime;
+	gboolean use_markup;
+
+	t = time(NULL);
+	ltime = localtime(&t);
+	if (ltime == NULL) {
+		g_debug("Error getting local time");
+		gtk_label_set_label(self->priv->label, _("Error getting time"));
+		return NULL;
+	}
+
+	strftime(longstr, 256, self->priv->time_string, ltime);
+	
+	gchar * utf8 = g_locale_to_utf8(longstr, -1, NULL, NULL, NULL);
+
+	if (pango_parse_markup(utf8, -1, 0, NULL, NULL, NULL, NULL))
+		use_markup = TRUE;
+
+	if (use_markup)
+		gtk_label_set_markup(self->priv->label, utf8);
+	else
+		gtk_label_set_text(self->priv->label, utf8);
+
+	g_free(utf8);
+
+	if (self->priv->idle_measure == 0) {
+		self->priv->idle_measure = g_idle_add(idle_measure, io);
+	}
+
+	return ltime;
+}
+
+/* Update the time right now.  Usually the result of a timezone switch. */
+static void
+update_time (IndicatorDatetime * self)
+{
+	struct tm * ltime = update_label(self);
+	setup_timer(self, ltime);
+	return;
+}
+
+/* Receives all signals from the service, routed to the appropriate functions */
+static void
+receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name,
+                GVariant * parameters, gpointer user_data)
+{
+	IndicatorDatetime * self = INDICATOR_DATETIME(user_data);
+
+	if (g_strcmp0(signal_name, "UpdateTime") == 0) {
+		update_time(self);
+	}
+
+	return;
+}
+
+/* Runs every minute and updates the time */
+gboolean
+timer_func (gpointer user_data)
+{
+	IndicatorDatetime * self = INDICATOR_DATETIME(user_data);
+	self->priv->timer = 0;
+	struct tm * ltime = update_label(self);
+	setup_timer(self, ltime);
+	return FALSE;
+}
+
+/* Configure the timer to run the next time through */
+static void
+setup_timer (IndicatorDatetime * self, struct tm * ltime)
+{
+	if (self->priv->timer != 0) {
+		g_source_remove(self->priv->timer);
+		self->priv->timer = 0;
+	}
+	
+	if (self->priv->show_seconds ||
+		(self->priv->time_mode == SETTINGS_TIME_CUSTOM && self->priv->custom_show_seconds)) {
+		self->priv->timer = g_timeout_add_seconds(1, timer_func, self);
+	} else {
+		if (ltime == NULL) {
+			time_t t;
+			t = time(NULL);
+			ltime = localtime(&t);
+		}
+
+		/* Plus 2 so we're just after the minute, don't want to be early. */
+		self->priv->timer = g_timeout_add_seconds(60 - ltime->tm_sec + 2, timer_func, self);
+	}
+
+	return;
+}
+
+/* Does a quick meausre of how big the string is in
+   pixels with a Pango layout */
+static gint
+measure_string (GtkStyle * style, PangoContext * context, const gchar * string)
+{
+	PangoLayout * layout = pango_layout_new(context);
+
+	if (pango_parse_markup(string, -1, 0, NULL, NULL, NULL, NULL))
+		pango_layout_set_markup(layout, string, -1);
+	else
+		pango_layout_set_text(layout, string, -1);
+
+	pango_layout_set_font_description(layout, style->font_desc);
+
+	gint width;
+	pango_layout_get_pixel_size(layout, &width, NULL);
+	g_object_unref(layout);
+	return width;
+}
+
+/* Format for the table of strftime() modifiers to what
+   we need to check when determining the length */
+typedef struct _strftime_type_t strftime_type_t;
+struct _strftime_type_t {
+	char character;
+	gint mask;
+};
+
+/* A table taken from the man page of strftime to what the different
+   characters can effect.  These are worst case in that we need to
+   test the length based on all these things to ensure that we have
+   a reasonable string lenght measurement. */
+const static strftime_type_t strftime_type[] = {
+	{'a', STRFTIME_MASK_WEEK},
+	{'A', STRFTIME_MASK_WEEK},
+	{'b', STRFTIME_MASK_MONTH},
+	{'B', STRFTIME_MASK_MONTH},
+	{'c', STRFTIME_MASK_ALL}, /* We don't know, so we have to assume all */
+	{'C', STRFTIME_MASK_YEAR},
+	{'d', STRFTIME_MASK_MONTH},
+	{'D', STRFTIME_MASK_MONTH | STRFTIME_MASK_YEAR | STRFTIME_MASK_DAY},
+	{'e', STRFTIME_MASK_DAY},
+	{'F', STRFTIME_MASK_MONTH | STRFTIME_MASK_YEAR | STRFTIME_MASK_DAY},
+	{'G', STRFTIME_MASK_YEAR},
+	{'g', STRFTIME_MASK_YEAR},
+	{'h', STRFTIME_MASK_MONTH},
+	{'j', STRFTIME_MASK_DAY},
+	{'m', STRFTIME_MASK_MONTH},
+	{'p', STRFTIME_MASK_AMPM},
+	{'P', STRFTIME_MASK_AMPM},
+	{'r', STRFTIME_MASK_AMPM},
+	{'s', STRFTIME_MASK_SECONDS},
+	{'S', STRFTIME_MASK_SECONDS},
+	{'T', STRFTIME_MASK_SECONDS},
+	{'u', STRFTIME_MASK_WEEK},
+	{'U', STRFTIME_MASK_DAY | STRFTIME_MASK_MONTH},
+	{'V', STRFTIME_MASK_DAY | STRFTIME_MASK_MONTH},
+	{'w', STRFTIME_MASK_DAY},
+	{'W', STRFTIME_MASK_DAY | STRFTIME_MASK_MONTH},
+	{'x', STRFTIME_MASK_YEAR | STRFTIME_MASK_MONTH | STRFTIME_MASK_DAY | STRFTIME_MASK_WEEK},
+	{'X', STRFTIME_MASK_SECONDS},
+	{'y', STRFTIME_MASK_YEAR},
+	{'Y', STRFTIME_MASK_YEAR},
+	/* Last one */
+	{0, 0}
+};
+
+#define FAT_NUMBER 8
+
+/* Looks through the characters in the format string to
+   ensure that we can figure out which of the things we
+   need to check in determining the length. */
+static gint
+generate_strftime_bitmask (const char *time_str)
+{
+	gint retval = 0;
+	glong strlength = g_utf8_strlen(time_str, -1);
+	gint i;
+	g_debug("Evaluating bitmask for '%s'", time_str);
+
+	for (i = 0; i < strlength; i++) {
+		if (time_str[i] == '%' && i + 1 < strlength) {
+			gchar evalchar = time_str[i + 1];
+
+			/* If we're using alternate formats we need to skip those characters */
+			if (evalchar == 'E' || evalchar == 'O') {
+				if (i + 2 < strlength) {
+					evalchar = time_str[i + 2];
+				} else {
+					continue;
+				}
+			}
+
+			/* Let's look at that character in the table */
+			int j;
+			for (j = 0; strftime_type[j].character != 0; j++) {
+				if (strftime_type[j].character == evalchar) {
+					retval |= strftime_type[j].mask;
+					break;
+				}
+			}
+		}
+	}
+
+	return retval;
+}
+
+/* Build an array up of all the time values that we want to check
+   for length to ensure we're in a good place */
+static void
+build_timeval_array (GArray * timevals, gint mask)
+{
+	struct tm mytm = {0};
+
+	/* Sun 12/28/8888 00:00 */
+	mytm.tm_hour = 0;
+	mytm.tm_mday = 28;
+	mytm.tm_mon = 11;
+	mytm.tm_year = 8888 - 1900;
+	mytm.tm_wday = 0;
+	mytm.tm_yday = 363;
+	g_array_append_val(timevals, mytm);
+
+	if (mask & STRFTIME_MASK_AMPM) {
+		/* Sun 12/28/8888 12:00 */
+		mytm.tm_hour = 12;
+		g_array_append_val(timevals, mytm);
+	}
+
+	/* NOTE: Ignoring year 8888 should handle it */
+
+	if (mask & STRFTIME_MASK_MONTH) {
+		gint oldlen = timevals->len;
+		gint i, j;
+		for (i = 0; i < oldlen; i++) {
+			for (j = 0; j < 11; j++) {
+				struct tm localval = g_array_index(timevals, struct tm, i);
+				localval.tm_mon = j;
+				/* Not sure if I need to adjust yday & wday, hope not */
+				g_array_append_val(timevals, localval);
+			}
+		}
+	}
+
+	/* Doing these together as it seems like just slightly more
+	   coverage on the numerical days, but worth it. */
+	if (mask & (STRFTIME_MASK_WEEK | STRFTIME_MASK_DAY)) {
+		gint oldlen = timevals->len;
+		gint i, j;
+		for (i = 0; i < oldlen; i++) {
+			for (j = 22; j < 28; j++) {
+				struct tm localval = g_array_index(timevals, struct tm, i);
+
+				gint diff = 28 - j;
+
+				localval.tm_mday = j;
+				localval.tm_wday = localval.tm_wday - diff;
+				if (localval.tm_wday < 0) {
+					localval.tm_wday += 7;
+				}
+				localval.tm_yday = localval.tm_yday - diff;
+
+				g_array_append_val(timevals, localval);
+			}
+		}
+	}
+
+	return;
+}
+
+/* Try to get a good guess at what a maximum width of the entire
+   string would be. */
+static void
+guess_label_size (IndicatorDatetime * self)
+{
+	/* This is during startup. */
+	if (self->priv->label == NULL) return;
+
+	GtkStyle * style = gtk_widget_get_style(GTK_WIDGET(self->priv->label));
+	PangoContext * context = gtk_widget_get_pango_context(GTK_WIDGET(self->priv->label));
+	gint * max_width = &(self->priv->max_width);
+	gint posibilitymask = generate_strftime_bitmask(self->priv->time_string);
+
+	/* Reset max width */
+	*max_width = 0;
+
+	/* Build the array of possibilities that we want to test */
+	GArray * timevals = g_array_new(FALSE, TRUE, sizeof(struct tm));
+	build_timeval_array(timevals, posibilitymask);
+
+	g_debug("Checking against %d posible times", timevals->len);
+	gint check_time;
+	for (check_time = 0; check_time < timevals->len; check_time++) {
+		gchar longstr[256];
+		strftime(longstr, 256, self->priv->time_string, &(g_array_index(timevals, struct tm, check_time)));
+
+		gchar * utf8 = g_locale_to_utf8(longstr, -1, NULL, NULL, NULL);
+		gint length = measure_string(style, context, utf8);
+		g_free(utf8);
+
+		if (length > *max_width) {
+			*max_width = length;
+		}
+	}
+
+	g_array_free(timevals, TRUE);
+
+	gtk_widget_set_size_request(GTK_WIDGET(self->priv->label), self->priv->max_width, -1);
+	g_debug("Guessing max time width: %d", self->priv->max_width);
+
+	return;
+}
+
+/* React to the style changing, which could mean an font
+   update. */
+static void
+style_changed (GtkWidget * widget, GtkStyle * oldstyle, gpointer data)
+{
+	g_debug("New style for time label");
+	IndicatorDatetime * self = INDICATOR_DATETIME(data);
+	guess_label_size(self);
+	update_label(self);
+	return;
+}
+
+/* Translate msg according to the locale specified by LC_TIME */
+static char *
+T_(const char *msg)
+{
+	/* General strategy here is to make sure LANGUAGE is empty (since that
+	   trumps all LC_* vars) and then to temporarily swap LC_TIME and
+	   LC_MESSAGES.  Then have gettext translate msg.
+
+	   We strdup the strings because the setlocale & *env functions do not
+	   guarantee anything about the storage used for the string, and thus
+	   the string may not be portably safe after multiple calls.
+
+	   Note that while you might think g_dcgettext would do the trick here,
+	   that actually looks in /usr/share/locale/XX/LC_TIME, not the
+	   LC_MESSAGES directory, so we won't find any translation there.
+	*/
+	char *message_locale = g_strdup(setlocale(LC_MESSAGES, NULL));
+	char *time_locale = g_strdup(setlocale(LC_TIME, NULL));
+	char *language = g_strdup(g_getenv("LANGUAGE"));
+	char *rv;
+	g_unsetenv("LANGUAGE");
+	setlocale(LC_MESSAGES, time_locale);
+
+	/* Get the LC_TIME version */
+	rv = _(msg);
+
+	/* Put everything back the way it was */
+	setlocale(LC_MESSAGES, message_locale);
+	g_setenv("LANGUAGE", language, TRUE);
+	g_free(message_locale);
+	g_free(time_locale);
+	g_free(language);
+	return rv;
+}
+
+/* Check the system locale setting to see if the format is 24-hour
+   time or 12-hour time */
+static gboolean
+is_locale_12h()
+{
+	static const char *formats_24h[] = {"%H", "%R", "%T", "%OH", "%k", NULL};
+	const char *t_fmt = nl_langinfo(T_FMT);
+	int i;
+
+	for (i = 0; formats_24h[i]; ++i) {
+		if (strstr(t_fmt, formats_24h[i])) {
+			return FALSE;
+		}
+	}
+
+	return TRUE;
+}
+
+/* Respond to changes in the screen to update the text gravity */
+static void
+update_text_gravity (GtkWidget *widget, GdkScreen *previous_screen, gpointer data)
+{
+	IndicatorDatetime * self = INDICATOR_DATETIME(data);
+	if (self->priv->label == NULL) return;
+
+	PangoLayout  *layout;
+	PangoContext *context;
+
+	layout = gtk_label_get_layout (GTK_LABEL(self->priv->label));
+	context = pango_layout_get_context(layout);
+	pango_context_set_base_gravity(context, PANGO_GRAVITY_AUTO);
+}
+
+/* Tries to figure out what our format string should be.  Lots
+   of translator comments in here. */
+static gchar *
+generate_format_string (IndicatorDatetime * self)
+{
+	if (self->priv->time_mode == SETTINGS_TIME_CUSTOM) {
+		return g_strdup(self->priv->custom_string);
+	}
+
+	gboolean twelvehour = TRUE;
+
+	if (self->priv->time_mode == SETTINGS_TIME_LOCALE) {
+		twelvehour = is_locale_12h();
+	} else if (self->priv->time_mode == SETTINGS_TIME_24_HOUR) {
+		twelvehour = FALSE;
+	}
+
+	const gchar * time_string = NULL;
+	if (twelvehour) {
+		if (self->priv->show_seconds) {
+			/* TRANSLATORS: A format string for the strftime function for
+			   a clock showing 12-hour time with seconds. */
+			time_string = T_("%l:%M:%S %p");
+		} else {
+			time_string = T_(DEFAULT_TIME_12_FORMAT);
+		}
+	} else {
+		if (self->priv->show_seconds) {
+			/* TRANSLATORS: A format string for the strftime function for
+			   a clock showing 24-hour time with seconds. */
+			time_string = T_("%H:%M:%S");
+		} else {
+			time_string = T_(DEFAULT_TIME_24_FORMAT);
+		}
+	}
+	
+	/* Checkpoint, let's not fail */
+	g_return_val_if_fail(time_string != NULL, g_strdup(DEFAULT_TIME_FORMAT));
+
+	/* If there's no date or day let's just leave now and
+	   not worry about the rest of this code */
+	if (!self->priv->show_date && !self->priv->show_day) {
+		return g_strdup(time_string);
+	}
+
+	const gchar * date_string = NULL;
+	if (self->priv->show_date && self->priv->show_day) {
+		/* TRANSLATORS:  This is a format string passed to strftime to represent
+		   the day of the week, the month and the day of the month. */
+		date_string = T_("%a %b %e");
+	} else if (self->priv->show_date) {
+		/* TRANSLATORS:  This is a format string passed to strftime to represent
+		   the month and the day of the month. */
+		date_string = T_("%b %e");
+	} else if (self->priv->show_day) {
+		/* TRANSLATORS:  This is a format string passed to strftime to represent
+		   the day of the week. */
+		date_string = T_("%a");
+	}
+
+	/* Check point, we should have a date string */
+	g_return_val_if_fail(date_string != NULL, g_strdup(time_string));
+
+	/* TRANSLATORS: This is a format string passed to strftime to combine the
+	   date and the time.  The value of "%s, %s" would result in a string like
+	   this in US English 12-hour time: 'Fri Jul 16, 11:50 AM' */
+	return g_strdup_printf(T_("%s, %s"), date_string, time_string);
+}
+
+static gboolean
+new_calendar_item (DbusmenuMenuitem * newitem,
+				   DbusmenuMenuitem * parent,
+				   DbusmenuClient   * client,
+				   gpointer           user_data)
+{
+	g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE);
+	g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE);
+	/* Note: not checking parent, it's reasonable for it to be NULL */
+
+	IndicatorObject *io = g_object_get_data (G_OBJECT (client), "indicator");
+	if (io == NULL) {
+		g_warning ("found no indicator to attach the caledar to");
+		return FALSE;
+	}
+
+	IndicatorDatetime *self = INDICATOR_DATETIME(io);
+	self->priv = INDICATOR_DATETIME_GET_PRIVATE(self);
+	
+	IdoCalendarMenuItem *ido = IDO_CALENDAR_MENU_ITEM (ido_calendar_menu_item_new ());
+	self->priv->ido_calendar = ido;
+
+	dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, GTK_MENU_ITEM(ido), parent);
+
+	return TRUE;
+}
+
+/* Grabs the label.  Creates it if it doesn't
+   exist already */
+static GtkLabel *
+get_label (IndicatorObject * io)
+{
+	IndicatorDatetime * self = INDICATOR_DATETIME(io);
+
+	/* If there's not a label, we'll build ourselves one */
+	if (self->priv->label == NULL) {
+		self->priv->label = GTK_LABEL(gtk_label_new("Time"));
+		gtk_label_set_justify (GTK_LABEL(self->priv->label), GTK_JUSTIFY_CENTER);
+		g_object_ref(G_OBJECT(self->priv->label));
+		g_signal_connect(G_OBJECT(self->priv->label), "style-set", G_CALLBACK(style_changed), self);
+		g_signal_connect(G_OBJECT(self->priv->label), "screen-changed", G_CALLBACK(update_text_gravity), self);
+		guess_label_size(self);
+		update_label(self);
+		gtk_widget_show(GTK_WIDGET(self->priv->label));
+	}
+
+	if (self->priv->timer == 0) {
+		setup_timer(self, NULL);
+	}
+
+	return self->priv->label;
+}
+
+static GtkMenu *
+get_menu (IndicatorObject * io)
+{
+	IndicatorDatetime * self = INDICATOR_DATETIME(io);
+
+	if (self->priv->menu == NULL) {
+		self->priv->menu = dbusmenu_gtkmenu_new(SERVICE_NAME, MENU_OBJ);
+	}
+
+	DbusmenuGtkClient *client = dbusmenu_gtkmenu_get_client(self->priv->menu);
+	g_object_set_data (G_OBJECT (client), "indicator", io);
+
+	dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(client), DBUSMENU_CALENDAR_MENUITEM_TYPE, new_calendar_item);
+
+	return GTK_MENU(self->priv->menu);
+}

=== added directory 'tests'
=== renamed directory 'tests' => 'tests.moved'
=== added file 'tests/Makefile.am'