First import of the next generation libnotify API
This commit is contained in:
commit
6017d6af7b
|
@ -0,0 +1,2 @@
|
|||
Christian Hammond <chipx86@chipx86.com>
|
||||
Mike Hearn <mike@navi.cx>
|
|
@ -0,0 +1,504 @@
|
|||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts
|
||||
as the successor of the GNU Library Public License, version 2, hence
|
||||
the version number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some
|
||||
specially designated software packages--typically libraries--of the
|
||||
Free Software Foundation and other authors who decide to use it. You
|
||||
can use it too, but we suggest you first think carefully about whether
|
||||
this license or the ordinary General Public License is the better
|
||||
strategy to use in any particular case, based on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use,
|
||||
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 this service if you wish); that you receive source code or can get
|
||||
it if you want it; that you can change the software and use pieces of
|
||||
it in new free programs; and that you are informed that you can do
|
||||
these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
distributors to deny you these rights or to ask you to surrender these
|
||||
rights. These restrictions translate to certain responsibilities for
|
||||
you if you distribute copies of the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link other code with the library, you must provide
|
||||
complete object files to the recipients, so that they can relink them
|
||||
with the library after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the
|
||||
library, and (2) we offer you this license, which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that
|
||||
there is no warranty for the free library. Also, if the library is
|
||||
modified by someone else and passed on, the recipients should know
|
||||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
restrictive license from a patent holder. Therefore, we insist that
|
||||
any patent license obtained for a version of the library must be
|
||||
consistent with the full freedom of use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the
|
||||
ordinary GNU General Public License. This license, the GNU Lesser
|
||||
General Public License, applies to certain designated libraries, and
|
||||
is quite different from the ordinary General Public License. We use
|
||||
this license for certain libraries in order to permit linking those
|
||||
libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using
|
||||
a shared library, the combination of the two is legally speaking a
|
||||
combined work, a derivative of the original library. The ordinary
|
||||
General Public License therefore permits such linking only if the
|
||||
entire combination fits its criteria of freedom. The Lesser General
|
||||
Public License permits more lax criteria for linking other code with
|
||||
the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it
|
||||
does Less to protect the user's freedom than the ordinary General
|
||||
Public License. It also provides other free software developers Less
|
||||
of an advantage over competing non-free programs. These disadvantages
|
||||
are the reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to
|
||||
encourage the widest possible use of a certain library, so that it becomes
|
||||
a de-facto standard. To achieve this, non-free programs must be
|
||||
allowed to use the library. A more frequent case is that a free
|
||||
library does the same job as widely used non-free libraries. In this
|
||||
case, there is little to gain by limiting the free library to free
|
||||
software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free
|
||||
programs enables a greater number of people to use a large body of
|
||||
free software. For example, permission to use the GNU C Library in
|
||||
non-free programs enables many more people to use the whole GNU
|
||||
operating system, as well as its variant, the GNU/Linux operating
|
||||
system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the
|
||||
users' freedom, it does ensure that the user of a program that is
|
||||
linked with the Library has the freedom and the wherewithal to run
|
||||
that program using a modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called "this License").
|
||||
Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control compilation
|
||||
and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a
|
||||
copy of the library already present on the user's computer system,
|
||||
rather than copying library functions into the executable, and (2)
|
||||
will operate properly with a modified version of the library, if
|
||||
the user installs one, as long as the modified version is
|
||||
interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
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
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License may add
|
||||
an explicit geographical distribution limitation excluding those countries,
|
||||
so that distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Lesser 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 Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "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
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY 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
|
||||
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is
|
||||
safest to attach them to the start of each source file to most effectively
|
||||
convey 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 library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
|
||||
|
|
@ -0,0 +1,335 @@
|
|||
Thu Nov 10 14:00:00 EST 2005 John (J5) Palmieri <johnp@redhat.com>
|
||||
|
||||
* Complete rewrite and first import to libnotify-ng module in SVN
|
||||
|
||||
Mon Jul 04 02:13:56 PDT 2005 Christian Hammond <chipx86@chipx86.com>
|
||||
|
||||
* tests/Makefile.am:
|
||||
* tests/test-markup.c:
|
||||
A tests/test-xy-stress.c:
|
||||
* configure.ac:
|
||||
- Conditionally build gdk-dependent test apps if we have gdk.
|
||||
- Added a X, Y stress test that will be used to help test
|
||||
accurately positioning the arrows.
|
||||
|
||||
Thu Jun 30 21:09:18 PDT 2005 Christian Hammond <chipx86@chipx86.com>
|
||||
|
||||
* tests/Makefile.am:
|
||||
- Don't install the test programs during make install.
|
||||
|
||||
Thu Jun 30 21:03:30 PDT 2005 Christian Hammond <chipx86@chipx86.com>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* libnotify/notify.h:
|
||||
* tests/test-animation.c:
|
||||
* tests/test-basic.c:
|
||||
* tests/test-default-action.c:
|
||||
* tests/test-error.c:
|
||||
* tests/test-image.c:
|
||||
* tests/test-markup.c:
|
||||
* tests/test-multi-actions.c:
|
||||
* tests/test-replace.c:
|
||||
* tools/notify-send.c:
|
||||
- Added support for hints in the API.
|
||||
|
||||
Mon Jun 20 06:13:02 PDT 2005 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
- Be a little better at not crashing. Just a bit better. There's
|
||||
still another crash I'm trying to track down.
|
||||
|
||||
Mon Jun 20 04:53:29 PDT 2005 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
- Close the right container in D-BUS 0.3x.
|
||||
|
||||
Mon Jun 20 02:49:27 PDT 2005 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/Makefile.am:
|
||||
A libnotify/dbus-compat.h:
|
||||
- Add dbus-compat.h.
|
||||
|
||||
Mon Jun 20 02:43:26 PDT 2005 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* configure.ac:
|
||||
- Add support for compiling under D-BUS 0.3x. Actually running
|
||||
has not yet been tested!
|
||||
|
||||
Fri Apr 01 09:21:26 PST 2005 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
- Updated to work with 0.6 of the notification spec.
|
||||
|
||||
Sat Nov 06 15:40:48 PST 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.h:
|
||||
- Move our TODO list to the Doxygen @todo commands, so we'll get it
|
||||
in a nice little page of its own in the API docs.
|
||||
|
||||
Sat Nov 06 15:35:52 PST 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.h:
|
||||
- Move the emacs mode string out of the Doxygen comment and into its
|
||||
own.
|
||||
|
||||
Sat Nov 06 15:11:53 PST 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.h:
|
||||
A Doxyfile.in:
|
||||
* Makefile.am:
|
||||
* configure.ac:
|
||||
- Add a Doxyfile.in and update things so we can get doxygen
|
||||
docs.
|
||||
|
||||
Wed Nov 03 23:39:23 PST 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
- Use glib's memory allocation stuff instead of libc's.
|
||||
|
||||
Wed Nov 03 23:34:10 PST 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* libnotify/notify.h:
|
||||
* tests/test-animation.c:
|
||||
* tests/test-image.c:
|
||||
- Patch from Mike Hearn to do a bunch of stuff, like handling icons
|
||||
and animations better.
|
||||
|
||||
Wed Nov 03 01:19:42 PST 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* configure.ac:
|
||||
A libnotify.spec.in:
|
||||
- Fix make distcheck.
|
||||
|
||||
Wed Sep 29 22:34:03 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* tools/notify-send.c:
|
||||
- Don't flush the D-BUS connection, and make sure we disconnect from it.
|
||||
|
||||
Wed Sep 29 21:53:15 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* libnotify/notify.h:
|
||||
* tests/test-animation.c:
|
||||
* tests/test-basic.c:
|
||||
* tests/test-default-action.c:
|
||||
* tests/test-error.c:
|
||||
* tests/test-image.c:
|
||||
* tests/test-markup.c:
|
||||
* tests/test-multi-actions.c:
|
||||
* tests/test-replace.c:
|
||||
* tools/notify-send.c:
|
||||
- Updated to match the spec.
|
||||
|
||||
Sat Sep 25 12:59:26 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* tests/test-animation.c:
|
||||
* tests/test-default-action.c:
|
||||
- Fixed to compile.
|
||||
|
||||
Wed Sep 01 00:39:23 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* docs/ChangeLog:
|
||||
* SPECIFICATION:
|
||||
- Moved specification documentation.
|
||||
- Moved specification ChangeLog.
|
||||
|
||||
Wed Sep 01 00:30:53 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* docs/notification-spec.xml:
|
||||
- Finishing adding the rest of the signals to the spec.
|
||||
|
||||
Sun Aug 29 22:27:42 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
A docs/notification-spec.ps:
|
||||
A docs/notification-spec.xml:
|
||||
- Added the notification spec in docbook format. It's not finished.
|
||||
I'm just tired of working on it.
|
||||
|
||||
Wed Jul 14 02:11:48 GMT 2004 Mike Hearn <mike@navi.cx>
|
||||
* libnotify/notify.c: Use pointers instead of GINT_TO_POINTER
|
||||
* tools/test-replace.c: Test replacing notifications
|
||||
|
||||
Tue Jul 13 23:58:54 GMT 2004 Mike Hearn <mike@navi.cx>
|
||||
* SPECIFICATION: CloseNotification sends NotificationClosed signal.
|
||||
|
||||
Mon Jul 5 00:12:03 GMT 2004 Mike Hearn <mike@navi.cx>
|
||||
* tools/notify-send.c (main): Treat expiry times < current time
|
||||
as timeouts from current instant
|
||||
|
||||
Sun Jul 4 22:54:44 GMT 2004 Mike Hearn <mike@navi.cx>
|
||||
* libnotify/notify.c: Use a direct hash rather than an int hash
|
||||
|
||||
Sun Jul 04 14:32:46 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
- Don't make IDs of 0 bad. They just want to be loved, too.
|
||||
|
||||
Sun Jul 04 14:08:59 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* libnotify/notify.h:
|
||||
* tools/notify-send.c:
|
||||
* SPECIFICATION:
|
||||
- Changed timeouts to expire times.
|
||||
- Install notify-send.
|
||||
|
||||
Sun Jul 04 13:46:32 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* tools/notify-send.c:
|
||||
- Don't initialize the library until we're ready to talk to it.
|
||||
|
||||
Sun Jul 04 13:34:14 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* SPECIFICATION:
|
||||
- Added the urgency level to the spec, and made it a byte.
|
||||
|
||||
Sun Jul 04 13:28:51 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
A tools/:
|
||||
R tests/:
|
||||
* Makefile.am:
|
||||
* configure.ac:
|
||||
- Renamed tests to tools.
|
||||
|
||||
Sun Jul 04 13:28:00 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* tests/Makefile.am:
|
||||
A tests/notify-send.c:
|
||||
- Added the notify-send tool.
|
||||
|
||||
Sat Jul 03 12:35:35 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* libnotify/notify.h:
|
||||
- Added support for GetCapabilities.
|
||||
|
||||
Sat Jul 03 12:27:58 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* libnotify/notify.h:
|
||||
- Add support for GetServerInformation.
|
||||
|
||||
Sat Jul 03 12:21:05 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
- Remove the application info sent on calls to Notify for now,
|
||||
until/if something gets added to the spec about it.
|
||||
|
||||
Sat Jul 03 12:14:48 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* libnotify/notify.h:
|
||||
- Removed the last of the request implementation.
|
||||
- More work toward migrating the code to the specification.
|
||||
- Simplified the action implementation a little bit.
|
||||
|
||||
Sat Jul 03 11:26:03 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* libnotify/notify.h:
|
||||
- Cleaned up some things and updated some stuff to be compliant with
|
||||
the spec. More will come soon.
|
||||
|
||||
Thu Jul 1 23:46:28 GMT 2004 Mike Hearn <mike@navi.cx>
|
||||
* SPECIFICATION: Add info on icons/sounds, add some
|
||||
protocol requests. Change "buttons" in the overview to "actions".
|
||||
|
||||
Wed Jun 30 14:03:51 GMT 2004 Mike Hearn <mike@navi.cx>
|
||||
* SPECIFICATION: Initial version
|
||||
|
||||
Wed Jun 30 13:28:18 GMT 2004 Mike Hearn <mike@navi.cx>
|
||||
* libnotify/notify.[ch]: Add file variables for emacs to match
|
||||
the settings Christian is using.
|
||||
|
||||
Wed Jun 30 02:53:36 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
- Free up the handle memory for a closed notification.
|
||||
|
||||
Tue Jun 29 19:33:43 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* libnotify/notify.h:
|
||||
- Due to the new icon struct, a lot of redundant functions have now
|
||||
been removed.
|
||||
|
||||
Tue Jun 29 19:26:58 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* libnotify/notify.h:
|
||||
- Added a NotifyIcon struct and the beginnings of the API.
|
||||
|
||||
Tue Jun 29 18:49:38 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* libnotify/notify.h:
|
||||
- Replaced the guint32 ID numbers that were passed around to represent
|
||||
notifications and requests and replaced them with an opaque data
|
||||
structure that abstracts that and other stuff.
|
||||
|
||||
Tue Jun 29 18:21:05 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
- Changed 8 space to 4 space tabs.
|
||||
|
||||
Tue Jun 29 14:49:51 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
- Patch by Mike Hearn to add a print_error() function for dumping
|
||||
extra info when we have an error.
|
||||
|
||||
Sun Jun 27 21:50:33 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* configure.ac:
|
||||
- Pass 0.0.1 as the version number to AC_INIT().
|
||||
|
||||
Sun Jun 27 21:39:13 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
- Added support for the NotificationClosed and RequestClosed signals,
|
||||
along with request callbacks. I wonder if any of this works.
|
||||
|
||||
Sun Jun 27 20:23:00 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
- Keep track of request IDs so that we can do callback stuff in a bit.
|
||||
|
||||
Sun Jun 27 20:02:09 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
- Send the list of button texts as a string array, rather than appending
|
||||
each one individually.
|
||||
|
||||
Sun Jun 27 18:30:19 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* libnotify/notify.h:
|
||||
- Split notify_close() into notify_close_notification() and
|
||||
notify_close_request().
|
||||
- Implement notify_send_request() and
|
||||
notify_send_request_with_icon_data(), and add versions of those
|
||||
functions that take a va_list for the buttons.
|
||||
|
||||
Sun Jun 27 16:46:32 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
- Added a utility function for doing most of the D-BUS message
|
||||
creation.
|
||||
- Implemented notify_close_notification() and notify_close_request().
|
||||
|
||||
Sun Jun 27 16:38:42 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
- Make sure we include our config.h if we have one.
|
||||
|
||||
Sun Jun 27 16:37:30 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* libnotify/notify.c:
|
||||
* libnotify/notify.h:
|
||||
- Added the initial header file and connection code.
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,229 @@
|
|||
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
This file is free documentation; the Free Software Foundation gives
|
||||
unlimited permission to copy, distribute and modify it.
|
||||
|
||||
Basic Installation
|
||||
==================
|
||||
|
||||
These are generic installation instructions.
|
||||
|
||||
The `configure' shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a `Makefile' in each directory of the package.
|
||||
It may also create one or more `.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script `config.status' that
|
||||
you can run in the future to recreate the current configuration, and a
|
||||
file `config.log' containing compiler output (useful mainly for
|
||||
debugging `configure').
|
||||
|
||||
It can also use an optional file (typically called `config.cache'
|
||||
and enabled with `--cache-file=config.cache' or simply `-C') that saves
|
||||
the results of its tests to speed up reconfiguring. (Caching is
|
||||
disabled by default to prevent problems with accidental use of stale
|
||||
cache files.)
|
||||
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how `configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the `README' so they can
|
||||
be considered for the next release. If you are using the cache, and at
|
||||
some point `config.cache' contains results you don't want to keep, you
|
||||
may remove or edit it.
|
||||
|
||||
The file `configure.ac' (or `configure.in') is used to create
|
||||
`configure' by a program called `autoconf'. You only need
|
||||
`configure.ac' if you want to change it or regenerate `configure' using
|
||||
a newer version of `autoconf'.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. `cd' to the directory containing the package's source code and type
|
||||
`./configure' to configure the package for your system. If you're
|
||||
using `csh' on an old version of System V, you might need to type
|
||||
`sh ./configure' instead to prevent `csh' from trying to execute
|
||||
`configure' itself.
|
||||
|
||||
Running `configure' takes awhile. While running, it prints some
|
||||
messages telling which features it is checking for.
|
||||
|
||||
2. Type `make' to compile the package.
|
||||
|
||||
3. Optionally, type `make check' to run any self-tests that come with
|
||||
the package.
|
||||
|
||||
4. Type `make install' to install the programs and any data files and
|
||||
documentation.
|
||||
|
||||
5. You can remove the program binaries and object files from the
|
||||
source code directory by typing `make clean'. To also remove the
|
||||
files that `configure' created (so you can compile the package for
|
||||
a different kind of computer), type `make distclean'. There is
|
||||
also a `make maintainer-clean' target, but that is intended mainly
|
||||
for the package's developers. If you use it, you may have to get
|
||||
all sorts of other programs in order to regenerate files that came
|
||||
with the distribution.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that
|
||||
the `configure' script does not know about. Run `./configure --help'
|
||||
for details on some of the pertinent environment variables.
|
||||
|
||||
You can give `configure' initial values for configuration parameters
|
||||
by setting variables in the command line or in the environment. Here
|
||||
is an example:
|
||||
|
||||
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
|
||||
|
||||
*Note Defining Variables::, for more details.
|
||||
|
||||
Compiling For Multiple Architectures
|
||||
====================================
|
||||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each architecture in their
|
||||
own directory. To do this, you must use a version of `make' that
|
||||
supports the `VPATH' variable, such as GNU `make'. `cd' to the
|
||||
directory where you want the object files and executables to go and run
|
||||
the `configure' script. `configure' automatically checks for the
|
||||
source code in the directory that `configure' is in and in `..'.
|
||||
|
||||
If you have to use a `make' that does not support the `VPATH'
|
||||
variable, you have to compile the package for one architecture at a
|
||||
time in the source code directory. After you have installed the
|
||||
package for one architecture, use `make distclean' before reconfiguring
|
||||
for another architecture.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, `make install' will install the package's files in
|
||||
`/usr/local/bin', `/usr/local/man', etc. You can specify an
|
||||
installation prefix other than `/usr/local' by giving `configure' the
|
||||
option `--prefix=PATH'.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
give `configure' the option `--exec-prefix=PATH', the package will use
|
||||
PATH as the prefix for installing programs and libraries.
|
||||
Documentation and other data files will still use the regular prefix.
|
||||
|
||||
In addition, if you use an unusual directory layout you can give
|
||||
options like `--bindir=PATH' to specify different values for particular
|
||||
kinds of files. Run `configure --help' for a list of the directories
|
||||
you can set and what kinds of files go in them.
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving `configure' the
|
||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
Some packages pay attention to `--enable-FEATURE' options to
|
||||
`configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||
is something like `gnu-as' or `x' (for the X Window System). The
|
||||
`README' should mention any `--enable-' and `--with-' options that the
|
||||
package recognizes.
|
||||
|
||||
For packages that use the X Window System, `configure' can usually
|
||||
find the X include and library files automatically, but if it doesn't,
|
||||
you can use the `configure' options `--x-includes=DIR' and
|
||||
`--x-libraries=DIR' to specify their locations.
|
||||
|
||||
Specifying the System Type
|
||||
==========================
|
||||
|
||||
There may be some features `configure' cannot figure out
|
||||
automatically, but needs to determine by the type of machine the package
|
||||
will run on. Usually, assuming the package is built to be run on the
|
||||
_same_ architectures, `configure' can figure that out, but if it prints
|
||||
a message saying it cannot guess the machine type, give it the
|
||||
`--build=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as `sun4', or a canonical name which has the form:
|
||||
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
where SYSTEM can have one of these forms:
|
||||
|
||||
OS KERNEL-OS
|
||||
|
||||
See the file `config.sub' for the possible values of each field. If
|
||||
`config.sub' isn't included in this package, then this package doesn't
|
||||
need to know the machine type.
|
||||
|
||||
If you are _building_ compiler tools for cross-compiling, you should
|
||||
use the `--target=TYPE' option to select the type of system they will
|
||||
produce code for.
|
||||
|
||||
If you want to _use_ a cross compiler, that generates code for a
|
||||
platform different from the build platform, you should specify the
|
||||
"host" platform (i.e., that on which the generated programs will
|
||||
eventually be run) with `--host=TYPE'.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for `configure' scripts to share,
|
||||
you can create a site shell script called `config.site' that gives
|
||||
default values for variables like `CC', `cache_file', and `prefix'.
|
||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
`CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all `configure' scripts look for a site script.
|
||||
|
||||
Defining Variables
|
||||
==================
|
||||
|
||||
Variables not defined in a site shell script can be set in the
|
||||
environment passed to `configure'. However, some packages may run
|
||||
configure again during the build, and the customized values of these
|
||||
variables may be lost. In order to avoid this problem, you should set
|
||||
them in the `configure' command line, using `VAR=value'. For example:
|
||||
|
||||
./configure CC=/usr/local2/bin/gcc
|
||||
|
||||
will cause the specified gcc to be used as the C compiler (unless it is
|
||||
overridden in the site shell script).
|
||||
|
||||
`configure' Invocation
|
||||
======================
|
||||
|
||||
`configure' recognizes the following options to control how it
|
||||
operates.
|
||||
|
||||
`--help'
|
||||
`-h'
|
||||
Print a summary of the options to `configure', and exit.
|
||||
|
||||
`--version'
|
||||
`-V'
|
||||
Print the version of Autoconf used to generate the `configure'
|
||||
script, and exit.
|
||||
|
||||
`--cache-file=FILE'
|
||||
Enable the cache: use and save the results of the tests in FILE,
|
||||
traditionally `config.cache'. FILE defaults to `/dev/null' to
|
||||
disable caching.
|
||||
|
||||
`--config-cache'
|
||||
`-C'
|
||||
Alias for `--cache-file=config.cache'.
|
||||
|
||||
`--quiet'
|
||||
`--silent'
|
||||
`-q'
|
||||
Do not print messages saying which checks are being made. To
|
||||
suppress all normal output, redirect it to `/dev/null' (any error
|
||||
messages will still be shown).
|
||||
|
||||
`--srcdir=DIR'
|
||||
Look for the package's source code in directory DIR. Usually
|
||||
`configure' can determine that directory automatically.
|
||||
|
||||
`configure' also accepts some other, not widely useful, options. Run
|
||||
`configure --help' for more details.
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
SUBDIRS = libnotify tools tests
|
||||
|
||||
pcdata_DATA = libnotify.pc
|
||||
pcdatadir = $(libdir)/pkgconfig
|
||||
|
||||
EXTRA_DIST = \
|
||||
AUTHORS NEWS INSTALL COPYING README \
|
||||
ChangeLog \
|
||||
Doxyfile.in \
|
||||
autogen.sh \
|
||||
configure.ac \
|
||||
libnotify.pc.in \
|
||||
libnotify.spec.in
|
||||
|
||||
dist-hook: libnotify.spec
|
||||
cp libnotify.spec $(distdir)
|
||||
|
||||
$(OBJECTS): libtool
|
||||
libtool: $(LIBTOOL_DEPS)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
doxygen:
|
||||
@echo "Running doxygen..."
|
||||
@doxygen Doxyfile
|
|
@ -0,0 +1,3 @@
|
|||
This document has moved.
|
||||
|
||||
Please see docs/ for the new version of the specification.
|
|
@ -0,0 +1,58 @@
|
|||
#!/bin/sh
|
||||
# Run this to generate all the initial makefiles, etc.
|
||||
|
||||
DIE=0
|
||||
|
||||
PACKAGE=libnotify
|
||||
|
||||
echo "Generating configuration files for $PACKAGE, please wait..."
|
||||
|
||||
(autoconf --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "You must have autoconf installed to compile $PACKAGE."
|
||||
echo "Download the appropriate package for your distribution,"
|
||||
echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
|
||||
DIE=1
|
||||
}
|
||||
|
||||
(libtool --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "You must have libtool installed to compile $PACKAGE."
|
||||
echo "Download the appropriate package for your distribution,"
|
||||
echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
|
||||
DIE=1
|
||||
}
|
||||
|
||||
(automake --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "You must have automake installed to compile $PACKAGE."
|
||||
echo "Download the appropriate package for your distribution,"
|
||||
echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
|
||||
DIE=1
|
||||
}
|
||||
|
||||
[ $DIE -eq 1 ] && exit 1;
|
||||
|
||||
echo " libtoolize --copy --force"
|
||||
libtoolize --copy --force
|
||||
echo " aclocal $ACLOCAL_FLAGS"
|
||||
aclocal $ACLOCAL_FLAGS
|
||||
echo " autoheader"
|
||||
autoheader
|
||||
echo " automake --add-missing"
|
||||
automake --add-missing
|
||||
echo " autoconf"
|
||||
autoconf
|
||||
|
||||
if [ -x config.status -a -z "$*" ]; then
|
||||
./config.status --recheck
|
||||
else
|
||||
if test -z "$*"; then
|
||||
echo "I am going to run ./configure with no arguments - if you wish"
|
||||
echo "to pass any to it, please specify them on the $0 command line."
|
||||
echo "If you do not wish to run ./configure, press Ctrl-C now."
|
||||
trap 'echo "configure aborted" ; exit 0' 1 2 15
|
||||
sleep 1
|
||||
fi
|
||||
./configure "$@";
|
||||
fi
|
|
@ -0,0 +1,156 @@
|
|||
dnl Process this file with autoconf to create configure.
|
||||
|
||||
dnl ################################################################
|
||||
dnl # Initialize autoconf
|
||||
dnl ################################################################
|
||||
AC_INIT(libnotify, 0.0.1.j5.1, chipx86@gnupdate.org)
|
||||
AC_PREREQ(2.50)
|
||||
AC_CONFIG_SRCDIR(config.h.in)
|
||||
AC_COPYRIGHT([Copyright 2004 Christian Hammond])
|
||||
|
||||
|
||||
dnl ################################################################
|
||||
dnl # Version information
|
||||
dnl ################################################################
|
||||
LIBGALAGO_MAJOR_VERSION=0
|
||||
LIBGALAGO_MINOR_VERSION=0
|
||||
LIBGALAGO_MICRO_VERSION=1
|
||||
LIBGALAGO_DEVEL_VERSION=j5.1
|
||||
|
||||
LIBGALAGO_VERSION=$LIBGALAGO_MAJOR_VERSION.$LIBGALAGO_MINOR_VERSION.$LIBGALAGO_MICRO_VERSION
|
||||
|
||||
if test "x$LIBGALAGO_DEVEL_VERSION" != "x0"; then
|
||||
if test "x$LIBGALAGO_MICRO_VERSION" = "x0"; then
|
||||
LIBGALAGO_MICRO_VERSION=$LIBGALAGO_DEVEL_VERSION
|
||||
LIBGALAGO_VERSION=$LIBGALAGO_MAJOR_VERSION.$LIBGALAGO_MINOR_VERSION.$LIBGALAGO_DEVEL_VERSION
|
||||
else
|
||||
LIBGALAGO_VERSION=$LIBGALAGO_VERSION.$LIBGALAGO_DEVEL_VERSION
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED(LIBGALAGO_MAJOR_VERSION, $LIBGALAGO_MAJOR_VERSION,
|
||||
[libnotify major version.])
|
||||
AC_DEFINE_UNQUOTED(LIBGALAGO_MINOR_VERSION, $LIBGALAGO_MINOR_VERSION,
|
||||
[libnotify minor version.])
|
||||
AC_DEFINE_UNQUOTED(LIBGALAGO_MICRO_VERSION, $LIBGALAGO_MICRO_VERSION,
|
||||
[libnotify micro version.])
|
||||
AC_DEFINE_UNQUOTED(LIBGALAGO_VERSION, "$LIBGALAGO_VERSION",
|
||||
[libnotify version.])
|
||||
|
||||
dnl ################################################################
|
||||
dnl # libtool versioning
|
||||
dnl ################################################################
|
||||
dnl #
|
||||
dnl # +1 : 0 : +1 == new interface that does not break old one.
|
||||
dnl # +1 : 0 : 0 == removed an interface. Breaks old apps.
|
||||
dnl # ? : +1 : ? == internal changes that doesn't break anything.
|
||||
dnl #
|
||||
dnl # CURRENT : REVISION : AGE
|
||||
dnl #
|
||||
LT_CURRENT=0
|
||||
LT_REVISION=0
|
||||
LT_AGE=0
|
||||
|
||||
LT_RELEASE=$LIBGALAGO_MAJOR_VERSION.$LIBGALAGO_MINOR_VERSION.$LIBGALAGO_MICRO_VERSION
|
||||
|
||||
AC_SUBST(LT_RELEASE)
|
||||
AC_SUBST(LT_CURRENT)
|
||||
AC_SUBST(LT_REVISION)
|
||||
AC_SUBST(LT_AGE)
|
||||
|
||||
dnl ################################################################
|
||||
dnl # Initialize automake
|
||||
dnl ################################################################
|
||||
VERSION=$LIBGALAGO_VERSION
|
||||
PACKAGE=libnotify
|
||||
|
||||
AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
|
||||
|
||||
dnl ################################################################
|
||||
dnl # Specify a header configuration file
|
||||
dnl ################################################################
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
||||
dnl ################################################################
|
||||
dnl # Check for some standard stuff.
|
||||
dnl ################################################################
|
||||
AC_PROG_CC
|
||||
#AC_ARG_PROGRAM
|
||||
AC_PROG_CPP
|
||||
AC_PROG_MAKE_SET
|
||||
AC_PROG_LN_S
|
||||
AC_PROG_INSTALL
|
||||
|
||||
AC_C_CONST
|
||||
AC_TYPE_SIZE_T
|
||||
AC_EXEEXT
|
||||
|
||||
AM_PROG_LIBTOOL
|
||||
|
||||
AC_CHECK_LIB([popt], [poptGetArg], , AC_MSG_ERROR([Popt is required]))
|
||||
|
||||
pkg_modules="gtk+-2.0 >= 2.2.2 glib-2.0 >= 2.2.2, dbus-1 >= 0.35, dbus-glib-1 >= 0.35"
|
||||
PKG_CHECK_MODULES(PACKAGE, [$pkg_modules])
|
||||
AC_SUBST(PACKAGE_CFLAGS)
|
||||
AC_SUBST(PACKAGE_LIBS)
|
||||
|
||||
gdk_modules="gdk-2.0 gdk-pixbuf-2.0"
|
||||
PKG_CHECK_MODULES(GDK, [$gdk_modules], have_gdk=yes,
|
||||
[
|
||||
have_gdk=no
|
||||
|
||||
AC_WARN("Some test apps will not be built")
|
||||
])
|
||||
|
||||
AM_CONDITIONAL(HAVE_GDK, test "x$have_gdk" = "xyes")
|
||||
|
||||
AC_SUBST(GDK_CFLAGS)
|
||||
AC_SUBST(GDK_LIBS)
|
||||
|
||||
dnl
|
||||
dnl Check the D-BUS version.
|
||||
dnl
|
||||
|
||||
AC_MSG_CHECKING([dbus version])
|
||||
DBUS_VERSION=`$PKG_CONFIG --modversion dbus-1`
|
||||
DBUS_MAJOR_VER=`echo $DBUS_VERSION | cut -d. -f 1`
|
||||
DBUS_MINOR_VER=`echo $DBUS_VERSION | cut -d. -f 2`
|
||||
DBUS_MICRO_VER=`echo $DBUS_VERSION | cut -d. -f 3`
|
||||
|
||||
AC_MSG_RESULT($DBUS_VERSION)
|
||||
AC_DEFINE_UNQUOTED(DBUS_MAJOR_VER, $DBUS_MAJOR_VER, [D-BUS major version.])
|
||||
AC_DEFINE_UNQUOTED(DBUS_MINOR_VER, $DBUS_MINOR_VER, [D-BUS minor version.])
|
||||
AC_DEFINE_UNQUOTED(DBUS_MICRO_VER, $DBUS_MICRO_VER, [D-BUS micro version.])
|
||||
|
||||
AC_DEFINE_UNQUOTED(DBUS_API_SUBJECT_TO_CHANGE, ,DBUS API is subject to change)
|
||||
|
||||
dnl # Use wall if we have GCC
|
||||
if test "x$GCC" = "xyes"; then
|
||||
CFLAGS="$CFLAGS -Wall"
|
||||
fi
|
||||
|
||||
AC_SUBST(CFLAGS)
|
||||
|
||||
dnl ################################################################
|
||||
dnl # Output the Makefiles
|
||||
dnl ################################################################
|
||||
AC_CONFIG_FILES([
|
||||
Doxyfile
|
||||
Makefile
|
||||
libnotify.pc
|
||||
libnotify.spec
|
||||
libnotify/Makefile
|
||||
tests/Makefile
|
||||
tools/Makefile
|
||||
])
|
||||
|
||||
AC_OUTPUT
|
||||
|
||||
echo
|
||||
echo $PACKAGE v$VERSION
|
||||
|
||||
echo
|
||||
echo "Now type make to compile"
|
||||
echo "Then su to root and type: make install"
|
||||
echo
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
Fri Apr 01 09:11:38 PST 2005 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* notification-spec.xml:
|
||||
- Removed all references to NIL, and explained briefly how each
|
||||
parameter can be made empty.
|
||||
- Bumped to version 0.6.
|
||||
|
||||
Fri Oct 01 23:44:40 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* notification-spec.xml:
|
||||
- Added a "suppress-sound" hint.
|
||||
- Added a "sound" capability.
|
||||
- Renamed the "soundfile" hint to "sound-file."
|
||||
- Bumped to version 0.5.
|
||||
|
||||
Wed Sep 29 22:35:16 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* notification-spec.xml:
|
||||
- Version 0.4.
|
||||
|
||||
Sat Sep 25 00:08:45 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* notification-spec.xml:
|
||||
- Added <img/> tag support in the markup section.
|
||||
- Detailed what markup is and what it is not, and its restrictions.
|
||||
- Removed the High urgency level.
|
||||
- Gave a better categorization to notification type formats.
|
||||
- Added new notification types.
|
||||
- Fixed notification expiration so it's a timeout rather than a
|
||||
timestamp.
|
||||
|
||||
Fri Sep 03 22:26:31 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* notification-spec.xml:
|
||||
- Changed the app_icon parameter of Notify to take a byte array,
|
||||
string, or NIL, so that it's the same as loading a single frame
|
||||
of a set of images.
|
||||
- Renamed "Icons and Sounds" to just "Icons."
|
||||
- Changed the wording about the fallback in case the notification
|
||||
server can't do actions.
|
||||
|
||||
Thu Sep 02 09:18:38 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* notification-spec.xml:
|
||||
- Removed the sound information.
|
||||
- Fixed several typos and references to KNotify.
|
||||
- Removed the PID hint.
|
||||
- Added some D-BUS Error stuff.
|
||||
|
||||
Thu Sep 02 01:19:07 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* notification-spec.xml:
|
||||
- Wrote the section about hints.
|
||||
|
||||
Thu Sep 02 01:05:01 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* notification-spec.xml:
|
||||
- Wrote about urgency levels.
|
||||
|
||||
Thu Sep 02 00:53:17 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* notification-spec.xml:
|
||||
- NotificationClosed now returns a reason of 3 when CloseNotification
|
||||
is called. 4 is now Undefined/Reserved.
|
||||
|
||||
Wed Sep 01 01:04:45 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* notification-spec.xml:
|
||||
- Marked up parameters.
|
||||
|
||||
Wed Sep 01 00:50:51 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* notification-spec.xml:
|
||||
- Moved the notification components into a table.
|
||||
|
||||
Wed Sep 01 00:38:46 PDT 2004 Christian Hammond <chipx86@gnupdate.org>
|
||||
|
||||
* notification-spec.xml:
|
||||
- Added vertical alignment of top to the tables.
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,11 @@
|
|||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
|
||||
Name: libnotify
|
||||
Description: Notifications Library
|
||||
Version: @VERSION@
|
||||
Libs: -L${libdir} -lnotify @PACKAGE_LIBS@
|
||||
Cflags: -I${includedir} @PACKAGE_CFLAGS@
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
notifyincdir = $(includedir)/libnotify
|
||||
|
||||
lib_LTLIBRARIES = libnotify.la
|
||||
|
||||
notifyinc_HEADERS = \
|
||||
notify.h \
|
||||
notifynotification.h \
|
||||
notifycommon.h
|
||||
|
||||
libnotify_la_SOURCES = \
|
||||
dbus-compat.h \
|
||||
notify.c \
|
||||
notifynotification.c
|
||||
|
||||
libnotify_la_LIBADD = \
|
||||
$(PACKAGE_LIBS)
|
||||
|
||||
libnotify_la_LDFLAGS = \
|
||||
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
|
||||
|
||||
INCLUDES = \
|
||||
$(PACKAGE_CFLAGS)
|
|
@ -0,0 +1,504 @@
|
|||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
subdir = libnotify
|
||||
DIST_COMMON = $(notifyinc_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(notifyincdir)"
|
||||
libLTLIBRARIES_INSTALL = $(INSTALL)
|
||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
||||
am__DEPENDENCIES_1 =
|
||||
libnotify_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
|
||||
am_libnotify_la_OBJECTS = notify.lo notifynotification.lo
|
||||
libnotify_la_OBJECTS = $(am_libnotify_la_OBJECTS)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
|
||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||
$(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
SOURCES = $(libnotify_la_SOURCES)
|
||||
DIST_SOURCES = $(libnotify_la_SOURCES)
|
||||
notifyincHEADERS_INSTALL = $(INSTALL_HEADER)
|
||||
HEADERS = $(notifyinc_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
GDK_CFLAGS = @GDK_CFLAGS@
|
||||
GDK_LIBS = @GDK_LIBS@
|
||||
HAVE_GDK_FALSE = @HAVE_GDK_FALSE@
|
||||
HAVE_GDK_TRUE = @HAVE_GDK_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
LT_AGE = @LT_AGE@
|
||||
LT_CURRENT = @LT_CURRENT@
|
||||
LT_RELEASE = @LT_RELEASE@
|
||||
LT_REVISION = @LT_REVISION@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_CFLAGS = @PACKAGE_CFLAGS@
|
||||
PACKAGE_LIBS = @PACKAGE_LIBS@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PKG_CONFIG = @PKG_CONFIG@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
notifyincdir = $(includedir)/libnotify
|
||||
lib_LTLIBRARIES = libnotify.la
|
||||
notifyinc_HEADERS = \
|
||||
notify.h \
|
||||
notifynotification.h \
|
||||
notifycommon.h
|
||||
|
||||
libnotify_la_SOURCES = \
|
||||
dbus-compat.h \
|
||||
notify.c \
|
||||
notifynotification.c
|
||||
|
||||
libnotify_la_LIBADD = \
|
||||
$(PACKAGE_LIBS)
|
||||
|
||||
libnotify_la_LDFLAGS = \
|
||||
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
|
||||
|
||||
INCLUDES = \
|
||||
$(PACKAGE_CFLAGS)
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libnotify/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu libnotify/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
|
||||
$(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-libLTLIBRARIES:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
p=$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
|
||||
$(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
|
||||
done
|
||||
|
||||
clean-libLTLIBRARIES:
|
||||
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
|
||||
test "$$dir" != "$$p" || dir=.; \
|
||||
echo "rm -f \"$${dir}/so_locations\""; \
|
||||
rm -f "$${dir}/so_locations"; \
|
||||
done
|
||||
libnotify.la: $(libnotify_la_OBJECTS) $(libnotify_la_DEPENDENCIES)
|
||||
$(LINK) -rpath $(libdir) $(libnotify_la_LDFLAGS) $(libnotify_la_OBJECTS) $(libnotify_la_LIBADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/notify.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/notifynotification.Plo@am__quote@
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
||||
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
install-notifyincHEADERS: $(notifyinc_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(notifyincdir)" || $(mkdir_p) "$(DESTDIR)$(notifyincdir)"
|
||||
@list='$(notifyinc_HEADERS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(notifyincHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(notifyincdir)/$$f'"; \
|
||||
$(notifyincHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(notifyincdir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-notifyincHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(notifyinc_HEADERS)'; for p in $$list; do \
|
||||
f=$(am__strip_dir) \
|
||||
echo " rm -f '$(DESTDIR)$(notifyincdir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(notifyincdir)/$$f"; \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(LTLIBRARIES) $(HEADERS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(notifyincdir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-notifyincHEADERS
|
||||
|
||||
install-exec-am: install-libLTLIBRARIES
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \
|
||||
uninstall-notifyincHEADERS
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libLTLIBRARIES clean-libtool ctags distclean \
|
||||
distclean-compile distclean-generic distclean-libtool \
|
||||
distclean-tags distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am \
|
||||
install-libLTLIBRARIES install-man install-notifyincHEADERS \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
|
||||
pdf pdf-am ps ps-am tags uninstall uninstall-am \
|
||||
uninstall-info-am uninstall-libLTLIBRARIES \
|
||||
uninstall-notifyincHEADERS
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
|
@ -0,0 +1,144 @@
|
|||
/**
|
||||
* @file libnotify/dbus-compat.h Private D-BUS Compatibility API
|
||||
*
|
||||
* @Copyright (C) 2005 Christian Hammond.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
#ifndef _NOTIFY_DBUS_COMPAT_H_
|
||||
#define _NOTIFY_DBUS_COMPAT_H_
|
||||
|
||||
#define NOTIFY_CHECK_DBUS_VERSION(major, minor) \
|
||||
(DBUS_MAJOR_VER > (major) || \
|
||||
(DBUS_MAJOR_VER == (major) && DBUS_MINOR_VER >= (minor)))
|
||||
|
||||
#if NOTIFY_CHECK_DBUS_VERSION(0, 30)
|
||||
# define _notify_dbus_message_iter_append_byte(iter, val) \
|
||||
dbus_message_iter_append_basic((iter), DBUS_TYPE_BYTE, &(val))
|
||||
# define _notify_dbus_message_iter_append_boolean(iter, val) \
|
||||
dbus_message_iter_append_basic((iter), DBUS_TYPE_BOOLEAN, &(val))
|
||||
# define _notify_dbus_message_iter_append_string(iter, val) \
|
||||
dbus_message_iter_append_basic((iter), DBUS_TYPE_STRING, &(val))
|
||||
# define _notify_dbus_message_iter_append_int32(iter, val) \
|
||||
dbus_message_iter_append_basic((iter), DBUS_TYPE_INT32, &(val))
|
||||
# define _notify_dbus_message_iter_append_uint32(iter, val) \
|
||||
dbus_message_iter_append_basic((iter), DBUS_TYPE_UINT32, &(val))
|
||||
# define _notify_dbus_message_iter_append_double(iter, val) \
|
||||
dbus_message_iter_append_basic((iter), DBUS_TYPE_DOUBLE, &(val))
|
||||
|
||||
# define _notify_dbus_message_iter_append_byte_array(iter, data, len) \
|
||||
dbus_message_iter_append_fixed_array((iter), DBUS_TYPE_BYTE, &(data), \
|
||||
(len))
|
||||
# define _notify_dbus_message_iter_append_boolean_array(iter, data, len) \
|
||||
dbus_message_iter_append_fixed_array((iter), DBUS_TYPE_BOOLEAN, &(data), \
|
||||
(len))
|
||||
# define _notify_dbus_message_iter_append_int32_array(iter, data, len) \
|
||||
dbus_message_iter_append_fixed_array((iter), DBUS_TYPE_INT32, &(data), \
|
||||
(len))
|
||||
# define _notify_dbus_message_iter_append_uint32_array(iter, data, len) \
|
||||
dbus_message_iter_append_fixed_array((iter), DBUS_TYPE_UINT32, &(data), \
|
||||
(len))
|
||||
# define _notify_dbus_message_iter_append_string_array(iter, data, len) \
|
||||
dbus_message_iter_append_fixed_array((iter), DBUS_TYPE_STRING, \
|
||||
&(data), (len))
|
||||
|
||||
# define _notify_dbus_message_iter_get_byte(iter, retvar) \
|
||||
dbus_message_iter_get_basic((iter), &(retvar))
|
||||
# define _notify_dbus_message_iter_get_boolean(iter, retvar) \
|
||||
dbus_message_iter_get_basic((iter), &(retvar))
|
||||
# define _notify_dbus_message_iter_get_string(iter, retvar) \
|
||||
dbus_message_iter_get_basic((iter), &(retvar))
|
||||
# define _notify_dbus_message_iter_get_int32(iter, retvar) \
|
||||
dbus_message_iter_get_basic((iter), &(retvar))
|
||||
# define _notify_dbus_message_iter_get_uint32(iter, retvar) \
|
||||
dbus_message_iter_get_basic((iter), &(retvar))
|
||||
# define _notify_dbus_message_iter_get_double(iter, retvar) \
|
||||
dbus_message_iter_get_basic((iter), &(retvar))
|
||||
|
||||
# define _notify_dbus_message_iter_get_byte_array \
|
||||
dbus_message_iter_get_fixed_array
|
||||
# define _notify_dbus_message_iter_get_boolean_array \
|
||||
dbus_message_iter_get_fixed_array
|
||||
# define _notify_dbus_message_iter_get_int32_array \
|
||||
dbus_message_iter_get_fixed_array
|
||||
# define _notify_dbus_message_iter_get_uint32_array \
|
||||
dbus_message_iter_get_fixed_array
|
||||
# define _notify_dbus_message_iter_get_string_array(iter, array, num_items) \
|
||||
dbus_message_iter_get_fixed_array((iter), (array), (num_items))
|
||||
|
||||
#else /* D-BUS < 0.30 */
|
||||
# define DBUS_INTERFACE_DBUS DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS
|
||||
# define DBUS_SERVICE_DBUS DBUS_SERVICE_ORG_FREEDESKTOP_DBUS
|
||||
# define DBUS_PATH_DBUS DBUS_PATH_ORG_FREEDESKTOP_DBUS
|
||||
# define DBUS_ERROR_SERVICE_UNKNOWN DBUS_ERROR_SERVICE_DOES_NOT_EXIST
|
||||
|
||||
# define dbus_bus_start_service_by_name dbus_bus_activate_service
|
||||
|
||||
# define dbus_message_iter_close_container(iter, container_iter)
|
||||
|
||||
# define dbus_message_iter_init_append(msg, iter) \
|
||||
dbus_message_iter_init(msg, iter)
|
||||
|
||||
# define _notify_dbus_message_iter_append_byte(iter, val) \
|
||||
dbus_message_iter_append_byte((iter), (val))
|
||||
# define _notify_dbus_message_iter_append_boolean(iter, val) \
|
||||
dbus_message_iter_append_boolean((iter), (val))
|
||||
# define _notify_dbus_message_iter_append_string(iter, val) \
|
||||
dbus_message_iter_append_string((iter), (val))
|
||||
# define _notify_dbus_message_iter_append_int32(iter, val) \
|
||||
dbus_message_iter_append_int32((iter), (val))
|
||||
# define _notify_dbus_message_iter_append_uint32(iter, val) \
|
||||
dbus_message_iter_append_uint32((iter), (val))
|
||||
# define _notify_dbus_message_iter_append_double(iter, val) \
|
||||
dbus_message_iter_append_double((iter), (val))
|
||||
|
||||
# define _notify_dbus_message_iter_append_byte_array(iter, data, len) \
|
||||
dbus_message_iter_append_byte_array((iter), (data), (len))
|
||||
# define _notify_dbus_message_iter_append_boolean_array(iter, data, len) \
|
||||
dbus_message_iter_append_boolean_array((iter), (data), (len))
|
||||
# define _notify_dbus_message_iter_append_int32_array(iter, data, len) \
|
||||
dbus_message_iter_append_int32_array((iter), (data), (len))
|
||||
# define _notify_dbus_message_iter_append_uint32_array(iter, data, len) \
|
||||
dbus_message_iter_append_uint32_array((iter), (data), (len))
|
||||
# define _notify_dbus_message_iter_append_string_array(iter, data, len) \
|
||||
dbus_message_iter_append_string_array((iter), (const char **)(data), (len))
|
||||
|
||||
# define _notify_dbus_message_iter_get_byte(iter, retvar) \
|
||||
retvar = dbus_message_iter_get_byte((iter))
|
||||
# define _notify_dbus_message_iter_get_boolean(iter, retvar) \
|
||||
retvar = dbus_message_iter_get_boolean((iter))
|
||||
# define _notify_dbus_message_iter_get_string(iter, retvar) \
|
||||
retvar = dbus_message_iter_get_string((iter))
|
||||
# define _notify_dbus_message_iter_get_int32(iter, retvar) \
|
||||
retvar = dbus_message_iter_get_int32((iter))
|
||||
# define _notify_dbus_message_iter_get_uint32(iter, retvar) \
|
||||
retvar = dbus_message_iter_get_uint32((iter))
|
||||
# define _notify_dbus_message_iter_get_double(iter, retvar) \
|
||||
retvar = dbus_message_iter_get_double((iter))
|
||||
|
||||
# define _notify_dbus_message_iter_get_byte_array(iter, data, len) \
|
||||
dbus_message_iter_get_byte_array((iter), (data), (len))
|
||||
# define _notify_dbus_message_iter_get_boolean_array(iter, data, len) \
|
||||
dbus_message_iter_get_boolean_array((iter), (data), (len))
|
||||
# define _notify_dbus_message_iter_get_int32_array(iter, data, len) \
|
||||
dbus_message_iter_get_int32_array((iter), (data), (len))
|
||||
# define _notify_dbus_message_iter_get_uint32_array(iter, data, len) \
|
||||
dbus_message_iter_get_uint32_array((iter), (data), (len))
|
||||
# define _notify_dbus_message_iter_get_string_array(iter, data, len) \
|
||||
dbus_message_iter_get_string_array((iter), (data), (len))
|
||||
#endif
|
||||
|
||||
#endif /* NOTIFY_DBUS_COMPAT_H_ */
|
|
@ -0,0 +1,108 @@
|
|||
/* -*- mode: c-mode; tab-width: 4; indent-tabs-mode: t; -*- */
|
||||
/**
|
||||
* @file libnotify/notify.c Notifications library
|
||||
*
|
||||
* @Copyright (C) 2004 Christian Hammond <chipx86@chipx86.com>
|
||||
* @Copyright (C) 2004 Mike Hearn <mike@navi.cx>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#ifndef DBUS_API_SUBJECT_TO_CHANGE
|
||||
# define DBUS_API_SUBJECT_TO_CHANGE 1
|
||||
#endif
|
||||
|
||||
#include "notify.h"
|
||||
#include "dbus-compat.h"
|
||||
#include <dbus/dbus.h>
|
||||
#include <dbus/dbus-glib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <unistd.h>
|
||||
|
||||
static gboolean _initted = FALSE;
|
||||
static gchar *_app_name = NULL;
|
||||
#ifdef __GNUC__
|
||||
# define format_func __attribute__((format(printf, 1, 2)))
|
||||
#else /* no format string checking with this compiler */
|
||||
# define format_func
|
||||
#endif
|
||||
|
||||
static void format_func
|
||||
print_error (char *message, ...)
|
||||
{
|
||||
char buf[1024];
|
||||
va_list args;
|
||||
|
||||
va_start (args, message);
|
||||
vsnprintf (buf, sizeof (buf), message, args);
|
||||
va_end (args);
|
||||
|
||||
fprintf (stderr, "%s(%d): libnotify: %s",
|
||||
(getenv ("_") ? getenv ("_") : ""), getpid (), buf);
|
||||
}
|
||||
|
||||
gboolean
|
||||
notify_init (const char *app_name)
|
||||
{
|
||||
g_return_val_if_fail (app_name != NULL, FALSE);
|
||||
g_return_val_if_fail (*app_name != '\0', FALSE);
|
||||
|
||||
if (_initted)
|
||||
return TRUE;
|
||||
|
||||
_app_name = g_strdup (app_name);
|
||||
|
||||
g_type_init ();
|
||||
|
||||
#ifdef HAVE_ATEXIT
|
||||
atexit (notify_uninit);
|
||||
#endif /* HAVE_ATEXIT */
|
||||
|
||||
_initted = TRUE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
_notify_get_app_name (void)
|
||||
{
|
||||
return _app_name;
|
||||
}
|
||||
|
||||
void
|
||||
notify_uninit (void)
|
||||
{
|
||||
|
||||
if (_app_name != NULL)
|
||||
{
|
||||
g_free (_app_name);
|
||||
_app_name = NULL;
|
||||
}
|
||||
|
||||
/* TODO: keep track of all notifications and destroy them here? */
|
||||
}
|
||||
|
||||
gboolean
|
||||
notify_is_initted (void)
|
||||
{
|
||||
return _initted;
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
/* -*- mode: c-mode; tab-width: 4; indent-tabs-mode: t; -*- */
|
||||
/**
|
||||
* @file libnotify/notify.h Notifications library
|
||||
*
|
||||
* @Copyright (C) 2004 Christian Hammond
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @todo We talk about URIs, but they are actually file paths not URIs
|
||||
* @todo Un-glibify?
|
||||
*/
|
||||
|
||||
#ifndef _LIBNOTIFY_NOTIFY_H_
|
||||
#define _LIBNOTIFY_NOTIFY_H_
|
||||
|
||||
#include <glib.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "notifycommon.h"
|
||||
#include "notifynotification.h"
|
||||
|
||||
/**************************************************************************/
|
||||
/** @name libnotify Base API */
|
||||
/**************************************************************************/
|
||||
/*@{*/
|
||||
|
||||
/**
|
||||
* Initializes the notifications library.
|
||||
*
|
||||
* @param app_name The application name.
|
||||
*
|
||||
* @return TRUE if the library initialized properly and a connection to a
|
||||
* notification server was made.
|
||||
*/
|
||||
gboolean notify_init(const char *app_name);
|
||||
|
||||
/**
|
||||
* Uninitializes the notifications library.
|
||||
*
|
||||
* This will be automatically called on exit unless previously called.
|
||||
*/
|
||||
void notify_uninit(void);
|
||||
|
||||
/**
|
||||
* Returns whether or not the notification library is initialized.
|
||||
*
|
||||
* @return TRUE if the library is initialized, or FALSE.
|
||||
*/
|
||||
gboolean notify_is_initted(void);
|
||||
|
||||
const gchar *_notify_get_app_name(void);
|
||||
/*@}*/
|
||||
|
||||
|
||||
#endif /* _LIBNOTIFY_NOTIFY_H_ */
|
|
@ -0,0 +1,23 @@
|
|||
#ifndef _LIBNOTIFY_NOTIFY_COMMON_H_
|
||||
#define _LIBNOTIFY_NOTIFY_COMMON_H_
|
||||
#include <glib.h>
|
||||
|
||||
#define NOTIFY_TIMEOUT_DEFAULT -1
|
||||
#define NOTIFY_TIMEOUT_NEVER 0
|
||||
|
||||
#define NOTIFY_DBUS_NAME "org.freedesktop.Notifications"
|
||||
#define NOTIFY_DBUS_CORE_INTERFACE "org.freedesktop.Notifications"
|
||||
#define NOTIFY_DBUS_CORE_OBJECT "/org/freedesktop/Notifications"
|
||||
|
||||
/**
|
||||
* Notification urgency levels.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
NOTIFY_URGENCY_LOW, /**< Low urgency. */
|
||||
NOTIFY_URGENCY_NORMAL, /**< Normal urgency. */
|
||||
NOTIFY_URGENCY_CRITICAL, /**< Critical urgency. */
|
||||
|
||||
} NotifyUrgency;
|
||||
|
||||
#endif /* _LIBNOTIFY_NOTIFY_H_ */
|
|
@ -0,0 +1,770 @@
|
|||
/*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with main.c; if not, write to:
|
||||
* The Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
#include "config.h"
|
||||
#include <dbus/dbus.h>
|
||||
#include <dbus/dbus-glib.h>
|
||||
|
||||
#include "notify.h"
|
||||
#include "notifynotification.h"
|
||||
|
||||
static void notify_notification_class_init (NotifyNotificationClass * klass);
|
||||
static void notify_notification_init (NotifyNotification * sp);
|
||||
static void notify_notification_finalize (GObject * object);
|
||||
|
||||
struct NotifyNotificationPrivate
|
||||
{
|
||||
guint32 id;
|
||||
|
||||
gchar *summary;
|
||||
gchar *message;
|
||||
|
||||
/*NULL to use icon data
|
||||
anything else to have server lookup icon */
|
||||
gchar *icon_name;
|
||||
|
||||
/*-1 = use server default
|
||||
0 = never timeout
|
||||
>0 = Number of milliseconds before we timeout
|
||||
*/
|
||||
gint timeout;
|
||||
|
||||
GSList *actions;
|
||||
GHashTable *hints;
|
||||
|
||||
GtkWidget *attached_widget;
|
||||
gint widget_old_x;
|
||||
gint widget_old_y;
|
||||
|
||||
gpointer user_data;
|
||||
GDestroyNotify user_data_free_func;
|
||||
|
||||
gboolean updates_pending;
|
||||
|
||||
DBusGProxy *proxy;
|
||||
};
|
||||
|
||||
#if 0
|
||||
typedef enum
|
||||
{
|
||||
LAST_SIGNAL
|
||||
} NotifyNotificationSignalType;
|
||||
#endif
|
||||
|
||||
typedef struct
|
||||
{
|
||||
NotifyNotification *object;
|
||||
} NotifyNotificationSignal;
|
||||
|
||||
/* static guint notify_notification_signals[LAST_SIGNAL] = { 0 }; */
|
||||
static GObjectClass *parent_class = NULL;
|
||||
|
||||
GType
|
||||
notify_notification_get_type ()
|
||||
{
|
||||
static GType type = 0;
|
||||
|
||||
if (type == 0)
|
||||
{
|
||||
static const GTypeInfo our_info = {
|
||||
sizeof (NotifyNotificationClass),
|
||||
NULL,
|
||||
NULL,
|
||||
(GClassInitFunc) notify_notification_class_init,
|
||||
NULL,
|
||||
NULL,
|
||||
sizeof (NotifyNotification),
|
||||
0,
|
||||
(GInstanceInitFunc) notify_notification_init,
|
||||
};
|
||||
|
||||
type = g_type_register_static (G_TYPE_OBJECT,
|
||||
"NotifyNotification", &our_info, 0);
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
static void
|
||||
notify_notification_class_init (NotifyNotificationClass * klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
parent_class = g_type_class_peek_parent (klass);
|
||||
object_class->finalize = notify_notification_finalize;
|
||||
|
||||
/* Create signals here:
|
||||
notify_notification_signals[SIGNAL_TYPE_EXAMPLE] = g_signal_new(...)
|
||||
*/
|
||||
}
|
||||
|
||||
static void
|
||||
_g_value_free (GValue * value)
|
||||
{
|
||||
g_value_unset (value);
|
||||
g_free (value);
|
||||
}
|
||||
|
||||
static void
|
||||
notify_notification_init (NotifyNotification * obj)
|
||||
{
|
||||
obj->priv = g_new0 (NotifyNotificationPrivate, 1);
|
||||
|
||||
obj->priv->id = 0;
|
||||
|
||||
obj->priv->summary = NULL;
|
||||
obj->priv->message = NULL;
|
||||
obj->priv->icon_name = NULL;
|
||||
obj->priv->timeout = NOTIFY_TIMEOUT_DEFAULT;
|
||||
|
||||
obj->priv->actions = NULL;
|
||||
obj->priv->hints = g_hash_table_new_full (g_str_hash,
|
||||
g_str_equal,
|
||||
g_free,
|
||||
(GDestroyNotify) _g_value_free);
|
||||
|
||||
obj->priv->attached_widget = NULL;
|
||||
obj->priv->user_data = NULL;
|
||||
obj->priv->user_data_free_func = NULL;
|
||||
|
||||
obj->priv->updates_pending = FALSE;
|
||||
|
||||
obj->priv->widget_old_x = 0;
|
||||
obj->priv->widget_old_y = 0;
|
||||
|
||||
obj->priv->proxy = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
notify_notification_finalize (GObject * object)
|
||||
{
|
||||
NotifyNotification *obj;
|
||||
NotifyNotificationPrivate *priv;
|
||||
|
||||
obj = NOTIFY_NOTIFICATION (object);
|
||||
priv = obj->priv;
|
||||
|
||||
g_free (priv->summary);
|
||||
g_free (priv->message);
|
||||
g_free (priv->icon_name);
|
||||
|
||||
if (priv->actions != NULL)
|
||||
{
|
||||
g_slist_foreach (priv->actions, (GFunc) g_free, NULL);
|
||||
g_slist_free (priv->actions);
|
||||
}
|
||||
|
||||
if (priv->hints != NULL)
|
||||
g_hash_table_destroy (priv->hints);
|
||||
|
||||
if (priv->attached_widget != NULL)
|
||||
gtk_widget_unref (priv->attached_widget);
|
||||
|
||||
if (priv->user_data_free_func != NULL)
|
||||
priv->user_data_free_func (priv->user_data);
|
||||
|
||||
g_free (obj->priv);
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_notify_notification_update_applet_hints (NotifyNotification * n)
|
||||
{
|
||||
NotifyNotificationPrivate *priv;
|
||||
gboolean update_pending;
|
||||
|
||||
update_pending = FALSE;
|
||||
priv = n->priv;
|
||||
|
||||
if (priv->attached_widget != NULL)
|
||||
{
|
||||
gint x, y, h, w;
|
||||
GtkWidget *widget;
|
||||
GtkRequisition requisition;
|
||||
|
||||
widget = priv->attached_widget;
|
||||
|
||||
gtk_widget_size_request (widget, &requisition);
|
||||
w = requisition.width;
|
||||
h = requisition.height;
|
||||
|
||||
gdk_window_get_origin (widget->window, &x, &y);
|
||||
if (GTK_WIDGET_NO_WINDOW (widget))
|
||||
{
|
||||
x += widget->allocation.x;
|
||||
y += widget->allocation.y;
|
||||
}
|
||||
|
||||
x += widget->allocation.width / 2;
|
||||
y += widget->allocation.height / 2;
|
||||
|
||||
if (x != priv->widget_old_x)
|
||||
{
|
||||
notify_notification_set_hint_int32 (n, "x", x);
|
||||
priv->widget_old_x = x;
|
||||
|
||||
update_pending = TRUE;
|
||||
}
|
||||
|
||||
if (y != priv->widget_old_y)
|
||||
{
|
||||
notify_notification_set_hint_int32 (n, "y", y);
|
||||
priv->widget_old_y = y;
|
||||
|
||||
update_pending = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return update_pending;
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
/* This is left here just incase we revisit autoupdating
|
||||
One thought would be to check for updates every time the icon
|
||||
is redrawn but we still have to deal with the race conditions
|
||||
that could occure between the server and the client so we will
|
||||
leave this alone for now.
|
||||
*/
|
||||
static gboolean
|
||||
_idle_check_updates (void *user_data)
|
||||
{
|
||||
NotifyNotification *n;
|
||||
NotifyNotificationPrivate *priv;
|
||||
|
||||
n = NOTIFY_NOTIFICATION (user_data);
|
||||
priv = n->priv;
|
||||
|
||||
if (priv->is_visible)
|
||||
{
|
||||
priv->updates_pending = _notify_notification_update_applet_hints (n);
|
||||
if (priv->updates_pending)
|
||||
{
|
||||
/* Try again if we fail on next idle */
|
||||
priv->updates_pending = !notify_notification_show (n, NULL);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
priv->updates_pending = FALSE;
|
||||
}
|
||||
|
||||
n = NOTIFY_NOTIFICATION (user_data);
|
||||
priv = n->priv;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
GdkFilterReturn
|
||||
_catch (GdkXEvent * xevent, GdkEvent * event, gpointer data)
|
||||
{
|
||||
static int i = 1;
|
||||
printf ("here, %i\n", i);
|
||||
i++;
|
||||
return GDK_FILTER_CONTINUE;
|
||||
}
|
||||
|
||||
NotifyNotification *
|
||||
notify_notification_new (const gchar * summary,
|
||||
const gchar * message,
|
||||
const gchar * icon, GtkWidget * attach)
|
||||
{
|
||||
NotifyNotification *obj;
|
||||
|
||||
g_assert (summary != NULL);
|
||||
g_assert (message != NULL);
|
||||
|
||||
obj = NOTIFY_NOTIFICATION (g_object_new (NOTIFY_TYPE_NOTIFICATION, NULL));
|
||||
|
||||
obj->priv->summary = g_strdup (summary);
|
||||
obj->priv->message = g_strdup (message);
|
||||
obj->priv->icon_name = g_strdup (icon);
|
||||
|
||||
if (attach != NULL)
|
||||
{
|
||||
gtk_widget_ref (attach);
|
||||
obj->priv->attached_widget = attach;
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
NotifyNotification *
|
||||
notify_notification_ref (NotifyNotification * notification)
|
||||
{
|
||||
return NOTIFY_NOTIFICATION (g_object_ref (G_OBJECT (notification)));
|
||||
}
|
||||
|
||||
void
|
||||
notify_notification_unref (NotifyNotification * notification)
|
||||
{
|
||||
g_object_unref (G_OBJECT (notification));
|
||||
}
|
||||
|
||||
gboolean
|
||||
notify_notification_update (NotifyNotification * notification,
|
||||
const gchar * summary,
|
||||
const gchar * message, const gchar * icon)
|
||||
{
|
||||
NotifyNotificationPrivate *priv;
|
||||
|
||||
priv = notification->priv;
|
||||
g_free (priv->summary);
|
||||
g_free (priv->message);
|
||||
g_free (priv->icon_name);
|
||||
|
||||
priv->summary = g_strdup (summary);
|
||||
priv->message = g_strdup (message);
|
||||
priv->icon_name = g_strdup (icon);
|
||||
|
||||
priv->updates_pending = TRUE;
|
||||
|
||||
/*TODO: return false on OOM */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
notify_notification_attach_to_widget (NotifyNotification * notification,
|
||||
GtkWidget * attach)
|
||||
{
|
||||
NotifyNotificationPrivate *priv;
|
||||
|
||||
priv = notification->priv;
|
||||
|
||||
if (priv->attached_widget != NULL)
|
||||
gtk_widget_unref (priv->attached_widget);
|
||||
|
||||
if (attach != NULL)
|
||||
priv->attached_widget = gtk_widget_ref (attach);
|
||||
else
|
||||
priv->attached_widget = NULL;
|
||||
|
||||
}
|
||||
|
||||
gboolean
|
||||
notify_notification_set_user_data (NotifyNotification * notification,
|
||||
void *user_data, GFreeFunc free_func)
|
||||
{
|
||||
NotifyNotificationPrivate *priv;
|
||||
|
||||
priv = notification->priv;
|
||||
|
||||
if (priv->user_data)
|
||||
if (priv->user_data_free_func)
|
||||
priv->user_data_free_func (priv->user_data);
|
||||
|
||||
priv->user_data = user_data;
|
||||
priv->user_data_free_func = priv->user_data;
|
||||
|
||||
/* TODO: return FALSE on OOM */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static DBusHandlerResult
|
||||
filter_func (DBusConnection *connection,
|
||||
DBusMessage *message,
|
||||
void *user_data)
|
||||
{
|
||||
g_message ("member %s", dbus_message_get_member (message));
|
||||
|
||||
return DBUS_HANDLER_RESULT_HANDLED;
|
||||
}
|
||||
|
||||
gboolean
|
||||
notify_notification_show (NotifyNotification * notification, GError ** error)
|
||||
{
|
||||
NotifyNotificationPrivate *priv;
|
||||
GError *tmp_error;
|
||||
|
||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||
|
||||
|
||||
priv = notification->priv;
|
||||
|
||||
tmp_error = NULL;
|
||||
|
||||
if (priv->proxy == NULL)
|
||||
{
|
||||
DBusGConnection *bus;
|
||||
bus = dbus_g_bus_get (DBUS_BUS_SESSION, &tmp_error);
|
||||
if (tmp_error != NULL)
|
||||
{
|
||||
g_propagate_error (error, tmp_error);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Register the object here because
|
||||
* we need to start listening for signals
|
||||
*/
|
||||
dbus_g_connection_register_g_object (bus, "/org/freedesktop/NotifyNotification", G_OBJECT (notification));
|
||||
|
||||
priv->proxy = dbus_g_proxy_new_for_name (bus,
|
||||
NOTIFY_DBUS_NAME,
|
||||
NOTIFY_DBUS_CORE_OBJECT,
|
||||
NOTIFY_DBUS_CORE_INTERFACE);
|
||||
dbus_g_connection_unref (bus);
|
||||
}
|
||||
|
||||
/*if attached to a widget modify x and y in hints */
|
||||
_notify_notification_update_applet_hints (notification);
|
||||
|
||||
/*TODO: make this nonblocking */
|
||||
dbus_g_proxy_call (priv->proxy, "Notify", &tmp_error,
|
||||
G_TYPE_STRING, _notify_get_app_name (),
|
||||
G_TYPE_STRING,
|
||||
(priv->icon_name != NULL) ? priv->icon_name : "",
|
||||
G_TYPE_UINT, priv->id, G_TYPE_STRING, priv->summary,
|
||||
G_TYPE_STRING, priv->message,
|
||||
dbus_g_type_get_collection ("GSList", G_TYPE_STRING),
|
||||
priv->actions, dbus_g_type_get_map ("GHashTable",
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_VALUE),
|
||||
priv->hints, G_TYPE_INT, priv->timeout, G_TYPE_INVALID,
|
||||
G_TYPE_UINT, &priv->id, G_TYPE_INVALID);
|
||||
|
||||
if (tmp_error != NULL)
|
||||
{
|
||||
g_propagate_error (error, tmp_error);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
notify_notification_set_timeout (NotifyNotification * notification,
|
||||
gint timeout)
|
||||
{
|
||||
notification->priv->timeout = timeout;
|
||||
}
|
||||
|
||||
gboolean
|
||||
notify_notification_set_category (NotifyNotification * notification,
|
||||
const char *category)
|
||||
{
|
||||
return notify_notification_set_hint_string (notification,
|
||||
"category", category);
|
||||
}
|
||||
|
||||
gboolean
|
||||
notify_notification_set_urgency (NotifyNotification * notification,
|
||||
NotifyUrgency l)
|
||||
{
|
||||
return notify_notification_set_hint_byte (notification,
|
||||
"urgency", (guchar) l);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_gvalue_array_append_int (GValueArray * array, gint i)
|
||||
{
|
||||
GValue *value;
|
||||
|
||||
value = g_new0 (GValue, 1);
|
||||
if (!value)
|
||||
return FALSE;
|
||||
|
||||
g_value_init (value, G_TYPE_INT);
|
||||
g_value_set_int (value, i);
|
||||
|
||||
g_value_array_append (array, value);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_gvalue_array_append_bool (GValueArray * array, gboolean b)
|
||||
{
|
||||
GValue *value;
|
||||
|
||||
value = g_new0 (GValue, 1);
|
||||
if (!value)
|
||||
return FALSE;
|
||||
|
||||
g_value_init (value, G_TYPE_BOOLEAN);
|
||||
g_value_set_boolean (value, b);
|
||||
|
||||
g_value_array_append (array, value);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_gvalue_array_append_byte_array (GValueArray * array,
|
||||
guchar * bytes, gsize len)
|
||||
{
|
||||
GArray *byte_array;
|
||||
GValue *value;
|
||||
|
||||
byte_array = g_array_sized_new (FALSE, FALSE, sizeof (guchar), len);
|
||||
if (!byte_array)
|
||||
return FALSE;
|
||||
|
||||
byte_array = g_array_append_vals (byte_array, bytes, len);
|
||||
|
||||
value = g_new0 (GValue, 1);
|
||||
if (!value)
|
||||
{
|
||||
g_array_free (byte_array, TRUE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_value_init (value, dbus_g_type_get_collection ("GArray", G_TYPE_UCHAR));
|
||||
g_value_set_boxed_take_ownership (value, byte_array);
|
||||
|
||||
g_value_array_append (array, value);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
gboolean
|
||||
notify_notification_set_icon_data_from_pixbuf (NotifyNotification *
|
||||
notification, GdkPixbuf * icon)
|
||||
{
|
||||
gint width;
|
||||
gint height;
|
||||
gint rowstride;
|
||||
gboolean alpha;
|
||||
gint bits_per_sample;
|
||||
gint n_channels;
|
||||
guchar *image;
|
||||
gsize image_len;
|
||||
gchar *key_dup;
|
||||
|
||||
GValueArray *image_struct;
|
||||
GValue *value;
|
||||
NotifyNotificationPrivate *priv;
|
||||
|
||||
priv = notification->priv;
|
||||
|
||||
width = gdk_pixbuf_get_width (icon);
|
||||
height = gdk_pixbuf_get_height (icon);
|
||||
rowstride = gdk_pixbuf_get_rowstride (icon);
|
||||
n_channels = gdk_pixbuf_get_n_channels (icon);
|
||||
bits_per_sample = gdk_pixbuf_get_bits_per_sample (icon);
|
||||
alpha = gdk_pixbuf_get_has_alpha (icon);
|
||||
image_len =
|
||||
(height - 1) * rowstride +
|
||||
width * ((n_channels * bits_per_sample + 7) / 8);
|
||||
|
||||
image = gdk_pixbuf_get_pixels (icon);
|
||||
|
||||
image_struct = g_value_array_new (8);
|
||||
|
||||
if (!image_struct)
|
||||
goto fail;
|
||||
|
||||
_gvalue_array_append_int (image_struct, width);
|
||||
_gvalue_array_append_int (image_struct, height);
|
||||
_gvalue_array_append_int (image_struct, rowstride);
|
||||
_gvalue_array_append_bool (image_struct, alpha);
|
||||
_gvalue_array_append_int (image_struct, bits_per_sample);
|
||||
_gvalue_array_append_int (image_struct, n_channels);
|
||||
_gvalue_array_append_byte_array (image_struct, image, image_len);
|
||||
|
||||
value = g_new0 (GValue, 1);
|
||||
if (!value)
|
||||
goto fail;
|
||||
|
||||
g_value_init (value, G_TYPE_VALUE_ARRAY);
|
||||
g_value_set_boxed (value, image_struct);
|
||||
|
||||
key_dup = g_strdup ("icon_data");
|
||||
if (!key_dup)
|
||||
goto fail;
|
||||
|
||||
g_hash_table_insert (priv->hints, key_dup, value);
|
||||
|
||||
return TRUE;
|
||||
|
||||
fail:
|
||||
if (image_struct != NULL)
|
||||
g_value_array_free (image_struct);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
notify_notification_set_hint_int32 (NotifyNotification * notification,
|
||||
const gchar * key, gint value)
|
||||
{
|
||||
NotifyNotificationPrivate *priv;
|
||||
GValue *hint_value;
|
||||
gchar *key_dup;
|
||||
|
||||
priv = notification->priv;
|
||||
|
||||
hint_value = g_new0 (GValue, 1);
|
||||
g_value_init (hint_value, G_TYPE_INT);
|
||||
g_value_set_int (hint_value, value);
|
||||
|
||||
key_dup = g_strdup (key);
|
||||
|
||||
g_hash_table_insert (priv->hints, key_dup, hint_value);
|
||||
|
||||
/* TODO: return FALSE on OOM */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
notify_notification_set_hint_double (NotifyNotification * notification,
|
||||
const gchar * key, gdouble value)
|
||||
{
|
||||
NotifyNotificationPrivate *priv;
|
||||
GValue *hint_value;
|
||||
gchar *key_dup;
|
||||
|
||||
priv = notification->priv;
|
||||
|
||||
hint_value = g_new0 (GValue, 1);
|
||||
g_value_init (hint_value, G_TYPE_FLOAT);
|
||||
g_value_set_float (hint_value, value);
|
||||
|
||||
key_dup = g_strdup (key);
|
||||
|
||||
g_hash_table_insert (priv->hints, key_dup, hint_value);
|
||||
|
||||
/* TODO: return FALSE on OOM */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
notify_notification_set_hint_byte (NotifyNotification * notification,
|
||||
const gchar * key, guchar value)
|
||||
{
|
||||
NotifyNotificationPrivate *priv;
|
||||
GValue *hint_value;
|
||||
gchar *key_dup;
|
||||
|
||||
priv = notification->priv;
|
||||
|
||||
hint_value = g_new0 (GValue, 1);
|
||||
g_value_init (hint_value, G_TYPE_UCHAR);
|
||||
g_value_set_uchar (hint_value, value);
|
||||
|
||||
key_dup = g_strdup (key);
|
||||
|
||||
g_hash_table_insert (priv->hints, key_dup, hint_value);
|
||||
|
||||
/* TODO: return FALSE on OOM */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
notify_notification_set_hint_byte_array (NotifyNotification * notification,
|
||||
const gchar * key,
|
||||
const guchar * value, gsize len)
|
||||
{
|
||||
NotifyNotificationPrivate *priv;
|
||||
GValue *hint_value;
|
||||
gchar *key_dup;
|
||||
GArray *byte_array;
|
||||
|
||||
priv = notification->priv;
|
||||
|
||||
byte_array = g_array_sized_new (FALSE, FALSE, sizeof (guchar), len);
|
||||
byte_array = g_array_append_vals (byte_array, value, len);
|
||||
|
||||
hint_value = g_new0 (GValue, 1);
|
||||
g_value_init (hint_value,
|
||||
dbus_g_type_get_collection ("GArray", G_TYPE_UCHAR));
|
||||
g_value_set_boxed_take_ownership (hint_value, byte_array);
|
||||
key_dup = g_strdup (key);
|
||||
|
||||
g_hash_table_insert (priv->hints, key_dup, hint_value);
|
||||
|
||||
/* TODO: return FALSE on OOM */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
gboolean
|
||||
notify_notification_set_hint_string (NotifyNotification * notification,
|
||||
const gchar * key, const gchar * value)
|
||||
{
|
||||
NotifyNotificationPrivate *priv;
|
||||
GValue *hint_value;
|
||||
gchar *key_dup;
|
||||
|
||||
priv = notification->priv;
|
||||
|
||||
hint_value = g_new0 (GValue, 1);
|
||||
g_value_init (hint_value, G_TYPE_STRING);
|
||||
g_value_set_string (hint_value, value);
|
||||
|
||||
key_dup = g_strdup (key);
|
||||
|
||||
g_hash_table_insert (priv->hints, key_dup, hint_value);
|
||||
|
||||
/* TODO: return FALSE on OOM */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
notify_notification_add_action (NotifyNotification * notification,
|
||||
const char *action,
|
||||
const char *label,
|
||||
NotifyActionCallback callback)
|
||||
{
|
||||
/* TODO: implement actions which will also set up a dbus listener
|
||||
for those actions
|
||||
*/
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
notify_notification_close (NotifyNotification * notification, GError ** error)
|
||||
{
|
||||
NotifyNotificationPrivate *priv;
|
||||
GError *tmp_error;
|
||||
|
||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||
|
||||
priv = notification->priv;
|
||||
|
||||
tmp_error = NULL;
|
||||
|
||||
if (priv->proxy == NULL)
|
||||
{
|
||||
DBusGConnection *bus;
|
||||
|
||||
bus = dbus_g_bus_get (DBUS_BUS_SESSION, &tmp_error);
|
||||
if (tmp_error != NULL)
|
||||
{
|
||||
g_propagate_error (error, tmp_error);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
priv->proxy = dbus_g_proxy_new_for_name (bus,
|
||||
NOTIFY_DBUS_NAME,
|
||||
NOTIFY_DBUS_CORE_OBJECT,
|
||||
NOTIFY_DBUS_CORE_INTERFACE);
|
||||
dbus_g_connection_unref (bus);
|
||||
}
|
||||
|
||||
dbus_g_proxy_call (priv->proxy, "CloseNotification", &tmp_error,
|
||||
G_TYPE_UINT, priv->id, G_TYPE_INVALID, G_TYPE_INVALID);
|
||||
|
||||
if (tmp_error != NULL)
|
||||
{
|
||||
g_propagate_error (error, tmp_error);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with main.c; if not, write to:
|
||||
* The Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef NOTIFY_NOTIFICATION_H
|
||||
#define NOTIFY_NOTIFICATION_H
|
||||
#include "config.h"
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib-object.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "notifycommon.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define NOTIFY_TYPE_NOTIFICATION (notify_notification_get_type ())
|
||||
#define NOTIFY_NOTIFICATION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NOTIFY_TYPE_NOTIFICATION, NotifyNotification))
|
||||
#define NOTIFY_NOTIFICATION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NOTIFY_TYPE_NOTIFICATION, NotifyNotificationClass))
|
||||
#define NOTIFY_IS_NOTIFICATION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NOTIFY_TYPE_NOTIFICATION))
|
||||
#define NOTIFY_IS_NOTIFICATION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NOTIFY_TYPE_NOTIFICATION))
|
||||
#define NOTIFY_NOTIFICATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NOTIFY_TYPE_NOTIFICATION, NotifyNotificationClass))
|
||||
|
||||
typedef struct NotifyNotificationPrivate NotifyNotificationPrivate;
|
||||
|
||||
typedef struct {
|
||||
GObject parent;
|
||||
NotifyNotificationPrivate *priv;
|
||||
} NotifyNotification;
|
||||
|
||||
typedef struct {
|
||||
GObjectClass parent_class;
|
||||
/* Add Signal Functions Here */
|
||||
} NotifyNotificationClass;
|
||||
|
||||
typedef void (*NotifyActionCallback )(NotifyNotification *, gchar *);
|
||||
|
||||
GType notify_notification_get_type();
|
||||
NotifyNotification *notify_notification_new (const gchar *summary,
|
||||
const gchar *message,
|
||||
const gchar *icon,
|
||||
GtkWidget *attach);
|
||||
|
||||
gboolean notify_notification_update (NotifyNotification *notification,
|
||||
const gchar *summary,
|
||||
const gchar *message,
|
||||
const gchar *icon);
|
||||
|
||||
void notify_notification_attach_to_widget (NotifyNotification *notification,
|
||||
GtkWidget *attach);
|
||||
|
||||
gboolean notify_notification_set_user_data (NotifyNotification *notification,
|
||||
void *user_data,
|
||||
GFreeFunc free_func);
|
||||
|
||||
gboolean notify_notification_show (NotifyNotification *notification,
|
||||
GError **error);
|
||||
|
||||
void notify_notification_set_timeout (NotifyNotification *notification,
|
||||
gint timeout);
|
||||
|
||||
gboolean notify_notification_set_category (NotifyNotification *notification,
|
||||
const char *category);
|
||||
|
||||
gboolean notify_notification_set_urgency (NotifyNotification *notification,
|
||||
NotifyUrgency l);
|
||||
|
||||
gboolean notify_notification_set_icon_data_from_pixbuf (NotifyNotification *notification,
|
||||
GdkPixbuf *icon);
|
||||
|
||||
|
||||
gboolean notify_notification_set_hint_int32 (NotifyNotification *notification,
|
||||
const gchar *key,
|
||||
gint value);
|
||||
|
||||
gboolean notify_notification_set_hint_double (NotifyNotification *notification,
|
||||
const gchar *key,
|
||||
gdouble value);
|
||||
|
||||
gboolean notify_notification_set_hint_string (NotifyNotification *notification,
|
||||
const gchar *key,
|
||||
const gchar *value);
|
||||
|
||||
gboolean notify_notification_set_hint_byte (NotifyNotification *notification,
|
||||
const gchar *key,
|
||||
guchar value);
|
||||
|
||||
gboolean notify_notification_set_hint_byte_array (
|
||||
NotifyNotification *notification,
|
||||
const gchar *key,
|
||||
const guchar *value,
|
||||
gsize len);
|
||||
|
||||
gboolean notify_notification_add_action (NotifyNotification *notification,
|
||||
const char *action,
|
||||
const char *label,
|
||||
NotifyActionCallback callback);
|
||||
|
||||
gboolean notify_notification_hide (NotifyNotification *notification,
|
||||
GError **error);
|
||||
|
||||
NotifyNotification *notify_notification_ref (NotifyNotification *notification);
|
||||
void notify_notification_unref (NotifyNotification *notification);
|
||||
#endif /* NOTIFY_NOTIFICATION_H */
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<node name="/org/freedesktop/Notification">
|
||||
|
||||
<interface name="org.freedesktop.NotificationListener">
|
||||
|
||||
</interface>
|
||||
</node>
|
|
@ -0,0 +1,50 @@
|
|||
if HAVE_GDK
|
||||
gdk_tests = \
|
||||
test-xy-stress
|
||||
|
||||
test_xy_stress_SOURCES = test-xy-stress.c
|
||||
else
|
||||
gdk_tests =
|
||||
endif
|
||||
|
||||
noinst_PROGRAMS = \
|
||||
test-replace \
|
||||
test-replace-widget \
|
||||
test-default-action \
|
||||
test-multi-actions \
|
||||
test-image \
|
||||
test-basic \
|
||||
test-error \
|
||||
test-markup \
|
||||
test-xy \
|
||||
$(gdk_tests)
|
||||
|
||||
common_ldflags = \
|
||||
$(top_builddir)/libnotify/libnotify.la \
|
||||
$(PACKAGE_LIBS) \
|
||||
$(GDK_LIBS)
|
||||
|
||||
test_replace_SOURCES = test-replace.c
|
||||
test_replace_LDADD = $(common_ldflags)
|
||||
test_replace_widget_SOURCES = test-replace-widget.c
|
||||
test_replace_widget_LDADD = $(common_ldflags)
|
||||
test_default_action_SOURCES = test-default-action.c
|
||||
test_default_action_LDADD = $(common_ldflags)
|
||||
test_multi_actions_SOURCES = test-multi-actions.c
|
||||
test_multi_actions_LDADD = $(common_ldflags)
|
||||
test_image_SOURCES = test-image.c
|
||||
test_image_LDADD = $(common_ldflags)
|
||||
test_basic_SOURCES = test-basic.c
|
||||
test_basic_LDADD = $(common_ldflags)
|
||||
test_error_SOURCES = test-error.c
|
||||
test_error_LDADD = $(common_ldflags)
|
||||
|
||||
test_markup_SOURCES = test-markup.c
|
||||
test_markup_LDADD = $(common_ldflags)
|
||||
|
||||
test_xy_SOURCES = test-xy.c
|
||||
test_xy_LDADD = $(common_ldflags)
|
||||
|
||||
test_xy_stress_LDADD = $(common_ldflags)
|
||||
|
||||
INCLUDES = $(PACKAGE_CFLAGS) $(GDK_CFLAGS)
|
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
After Width: | Height: | Size: 50 KiB |
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
* @file tests/test-basic.c Unit test: basics
|
||||
*
|
||||
* @Copyright (C) 2004 Mike Hearn <mike@navi.cx>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <libnotify/notify.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int main() {
|
||||
NotifyNotification *n;
|
||||
|
||||
notify_init("Basics");
|
||||
|
||||
n = notify_notification_new ("Summary",
|
||||
"Content",
|
||||
NULL, NULL);
|
||||
notify_notification_set_timeout (n, 3000); //3 seconds
|
||||
|
||||
if (!notify_notification_show (n, NULL)) {
|
||||
fprintf(stderr, "failed to send notification\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
* @file tests/test-default-action.c Unit test: default action
|
||||
*
|
||||
* @Copyright (C) 2004 Mike Hearn <mike@navi.cx>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <libnotify/notify.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
#define DBUS_API_SUBJECT_TO_CHANGE 1
|
||||
|
||||
#include <glib.h>
|
||||
#include <dbus/dbus.h>
|
||||
#include <dbus/dbus-glib.h>
|
||||
#include <dbus/dbus-glib-lowlevel.h>
|
||||
|
||||
static GMainLoop *loop;
|
||||
|
||||
static void callback(NotifyNotification *n, const char *action, void *user_data)
|
||||
{
|
||||
assert (action != NULL);
|
||||
assert (strcmp ("default", action) == 0);
|
||||
|
||||
notify_notification_close (n, NULL);
|
||||
|
||||
g_main_loop_quit(loop);
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
NotifyNotification *n;
|
||||
|
||||
if (!notify_init("Default Action Test")) exit(1);
|
||||
|
||||
DBusConnection *conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
|
||||
loop = g_main_loop_new(NULL, FALSE);
|
||||
|
||||
dbus_connection_setup_with_g_main(conn, NULL);
|
||||
|
||||
n = notify_notification_new ("Matt is online", "", NULL, NULL);
|
||||
notify_notification_set_timeout (n, NOTIFY_TIMEOUT_NEVER);
|
||||
notify_notification_add_action (n, "default", "Do Default Action", callback);
|
||||
notify_notification_set_category (n, "presence.online");
|
||||
|
||||
if (!notify_notification_show (n, NULL)) {
|
||||
fprintf(stderr, "failed to send notification\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
g_main_loop_run(loop);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* @file tests/test-default-action.c Unit test: error handling
|
||||
*
|
||||
* @Copyright (C) 2004 Mike Hearn <mike@navi.cx>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <libnotify/notify.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int main() {
|
||||
NotifyNotification *n;
|
||||
|
||||
g_type_init ();
|
||||
|
||||
notify_init("Error Handling");
|
||||
|
||||
n = notify_notification_new ("Summary",
|
||||
"Content",
|
||||
NULL, NULL);
|
||||
notify_notification_set_timeout (n, 3000); //3 seconds
|
||||
|
||||
/* TODO: Create an error condition */
|
||||
|
||||
|
||||
if (!notify_notification_show (n, NULL)) {
|
||||
fprintf(stderr, "failed to send notification\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* @file tests/test-image.c Unit test: images
|
||||
*
|
||||
* @Copyright (C) 2004 Mike Hearn <mike@navi.cx>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <libnotify/notify.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#define DBUS_API_SUBJECT_TO_CHANGE 1
|
||||
|
||||
#include <glib.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <dbus/dbus.h>
|
||||
#include <dbus/dbus-glib.h>
|
||||
#include <dbus/dbus-glib-lowlevel.h>
|
||||
|
||||
GMainLoop *loop;
|
||||
NotifyNotification *n;
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
char file[PATH_MAX];
|
||||
int size;
|
||||
char *uri;
|
||||
GdkPixbuf *icon;
|
||||
gchar *buf;
|
||||
gsize buf_size;
|
||||
GtkWidget *helper;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
if (!notify_init("Images Test")) exit(1);
|
||||
|
||||
n = notify_notification_new ("Icon Test", "Testing stock icon", "stock_help", NULL);
|
||||
notify_notification_set_timeout (n, NOTIFY_TIMEOUT_NEVER);
|
||||
if (!notify_notification_show (n, NULL)) {
|
||||
fprintf(stderr, "failed to send notification\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
g_usleep (5000000); //5 seconds
|
||||
|
||||
size = readlink("/proc/self/cwd", file, PATH_MAX - 1);
|
||||
file[size] = '\0';
|
||||
uri = g_strdup_printf ("file://%s/%s", file, "applet-critical.png");
|
||||
|
||||
printf("sending %s\n", uri);
|
||||
|
||||
notify_notification_update (n, "Alert!", "Testing URI icons", uri);
|
||||
|
||||
if (!notify_notification_show (n, NULL)) {
|
||||
fprintf(stderr, "failed to send notification\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
g_usleep (5000000); //5 seconds
|
||||
|
||||
notify_notification_update (n, "Raw image test", "Testing sending raw pixbufs", NULL);
|
||||
|
||||
/* This is just a hack to get a stock icon's pixbuf
|
||||
in a realworld app if you were sending bitmapped data
|
||||
you would know the file location and open it up with
|
||||
a method that could generate a bmp for you*/
|
||||
helper = gtk_button_new();
|
||||
icon = gtk_widget_render_icon (helper,
|
||||
GTK_STOCK_DIALOG_QUESTION,
|
||||
GTK_ICON_SIZE_DIALOG,
|
||||
"");
|
||||
|
||||
|
||||
notify_notification_set_icon_data_from_pixbuf (n,
|
||||
icon);
|
||||
|
||||
if (!notify_notification_show (n, NULL)) {
|
||||
fprintf(stderr, "failed to send notification\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
gtk_widget_destroy (helper);
|
||||
g_object_unref ((GObject *)icon);
|
||||
|
||||
g_usleep (5000000); //5 seconds
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* @file tests/test-markup.c Unit test: markup
|
||||
*
|
||||
* @Copyright (C) 2004 Mike Hearn <mike@navi.cx>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <libnotify/notify.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int main() {
|
||||
NotifyNotification *n;
|
||||
|
||||
notify_init("Markup");
|
||||
|
||||
n = notify_notification_new ("Summary",
|
||||
"Some <b>bold</b>, <u>underlined</u>, <i>italic</i>, "
|
||||
"<a href='http://www.google.com'>linked</a> text",
|
||||
NULL, NULL);
|
||||
notify_notification_set_timeout (n, 3000); //3 seconds
|
||||
|
||||
if (!notify_notification_show (n, NULL)) {
|
||||
fprintf(stderr, "failed to send notification\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* @file tests/test-multi-actions.c Unit test: multiple actions
|
||||
*
|
||||
* @Copyright (C) 2004 Mike Hearn <mike@navi.cx>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <libnotify/notify.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
#define DBUS_API_SUBJECT_TO_CHANGE 1
|
||||
|
||||
#include <glib.h>
|
||||
#include <dbus/dbus.h>
|
||||
#include <dbus/dbus-glib.h>
|
||||
#include <dbus/dbus-glib-lowlevel.h>
|
||||
|
||||
GMainLoop *loop;
|
||||
|
||||
static void help_callback(NotifyNotification *n, const char *action, void *user_data)
|
||||
{
|
||||
assert( action != NULL );
|
||||
assert( strcmp (action, "help") == 0 );
|
||||
|
||||
printf("You clicked Help\n");
|
||||
|
||||
notify_notification_close(n, NULL);
|
||||
|
||||
g_main_loop_quit(loop);
|
||||
}
|
||||
|
||||
static void ignore_callback(NotifyNotification *n, const char *action, void *user_data)
|
||||
{
|
||||
assert( action != NULL );
|
||||
assert( strcmp (action, "ignore") == 0 );
|
||||
|
||||
printf("You clicked Ignore\n");
|
||||
|
||||
notify_notification_close(n, NULL);
|
||||
|
||||
g_main_loop_quit(loop);
|
||||
}
|
||||
|
||||
|
||||
static void empty_callback(NotifyNotification *n, const char *action, void *user_data)
|
||||
{
|
||||
assert( action != NULL );
|
||||
assert( strcmp (action, "empty") == 0 );
|
||||
|
||||
printf("You clicked Empty Trash\n");
|
||||
|
||||
notify_notification_close(n, NULL);
|
||||
|
||||
g_main_loop_quit(loop);
|
||||
}
|
||||
|
||||
|
||||
int main() {
|
||||
NotifyNotification *n;
|
||||
|
||||
if (!notify_init("Multi Action Test")) exit(1);
|
||||
|
||||
DBusConnection *conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
|
||||
loop = g_main_loop_new(NULL, FALSE);
|
||||
|
||||
dbus_connection_setup_with_g_main(conn, NULL);
|
||||
|
||||
n = notify_notification_new ("Low disk space",
|
||||
"You can free up some disk space by "
|
||||
"emptying the trash can.",
|
||||
NULL, NULL);
|
||||
notify_notification_set_timeout (n, NOTIFY_TIMEOUT_NEVER);
|
||||
notify_notification_add_action (n, "help", "Help", help_callback);
|
||||
notify_notification_add_action (n, "ignore", "Ignore", ignore_callback);
|
||||
notify_notification_add_action (n, "empty", "Empty Trash", empty_callback);
|
||||
notify_notification_set_category (n, "device");
|
||||
|
||||
if (!notify_notification_show (n, NULL)) {
|
||||
fprintf(stderr, "failed to send notification\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
g_main_loop_run(loop);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
#include <libnotify/notify.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <glib.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
|
||||
static int count = 0;
|
||||
|
||||
void on_exposed (GtkWidget *widget, GdkEventExpose *ev, void *user_data) {
|
||||
NotifyNotification *n = NOTIFY_NOTIFICATION (user_data);
|
||||
|
||||
g_signal_handlers_disconnect_by_func(widget, on_exposed, user_data);
|
||||
|
||||
notify_notification_show (n, NULL);
|
||||
}
|
||||
|
||||
void on_clicked (GtkButton *button, void *user_data) {
|
||||
GError *error;
|
||||
gchar *buf;
|
||||
NotifyNotification *n = NOTIFY_NOTIFICATION (user_data);
|
||||
|
||||
count++;
|
||||
buf = g_strdup_printf ("You clicked the button %i times", count);
|
||||
|
||||
notify_notification_update (n, "Widget Attachment Test",
|
||||
buf, NULL);
|
||||
|
||||
notify_notification_show (n, NULL);
|
||||
g_free (buf);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
NotifyNotification *n;
|
||||
GtkWidget *window;
|
||||
GtkWidget *button;
|
||||
|
||||
GError *error;
|
||||
error = NULL;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
notify_init("Replace Test");
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
button = gtk_button_new_with_label ("click here to change notification");
|
||||
gtk_container_add (GTK_CONTAINER(window), button);
|
||||
|
||||
gtk_widget_show_all (window);
|
||||
|
||||
|
||||
n = notify_notification_new ("Widget Attachment Test", "Button has not been clicked yet",
|
||||
NULL, //no icon
|
||||
button); //attach to button
|
||||
|
||||
|
||||
notify_notification_set_timeout (n, 0); //don't timeout
|
||||
|
||||
g_signal_connect (button, "clicked", (GCallback *)on_clicked, n);
|
||||
g_signal_connect_after (button, "expose-event", (GCallback *)on_exposed, n);
|
||||
|
||||
gtk_main();
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
#include <libnotify/notify.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <glib.h>
|
||||
|
||||
int main() {
|
||||
NotifyNotification *n;
|
||||
GError *error;
|
||||
error = NULL;
|
||||
|
||||
g_type_init ();
|
||||
|
||||
notify_init("Replace Test");
|
||||
|
||||
n = notify_notification_new ("Summary", "First message",
|
||||
NULL, //no icon
|
||||
NULL); //don't attach to widget
|
||||
|
||||
|
||||
notify_notification_set_timeout (n, 0); //don't timeout
|
||||
|
||||
if (!notify_notification_show (n, &error)) {
|
||||
fprintf(stderr, "failed to send notification: %s\n", error->message);
|
||||
g_error_free (error);
|
||||
return 1;
|
||||
}
|
||||
|
||||
sleep(3);
|
||||
|
||||
notify_notification_update (n, "Second Summary",
|
||||
"First mesage was replaced", NULL);
|
||||
|
||||
if (!notify_notification_show (n, &error)) {
|
||||
fprintf(stderr, "failed to send notification: %s\n", error->message);
|
||||
g_error_free (error);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
* @file tests/test-xy.c Unit test: X, Y hints
|
||||
*
|
||||
* @Copyright (C) 2005 Christian Hammond <chipx86@chipx86.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <libnotify/notify.h>
|
||||
#include <gdk/gdk.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
static void
|
||||
emit_notification(int x, int y)
|
||||
{
|
||||
static char buffer[BUFSIZ];
|
||||
NotifyNotification *n;
|
||||
|
||||
g_snprintf(buffer, sizeof(buffer),
|
||||
"This notification should point to %d, %d.", x, y);
|
||||
|
||||
n = notify_notification_new ("X, Y Test",
|
||||
buffer,
|
||||
NULL, NULL);
|
||||
|
||||
notify_notification_set_hint_int32 (n, "x", x);
|
||||
notify_notification_set_hint_int32 (n, "y", y);
|
||||
|
||||
if (!notify_notification_show (n, NULL)) {
|
||||
fprintf(stderr, "failed to send notification\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
GdkDisplay *display;
|
||||
GdkScreen *screen;
|
||||
int screen_x2, screen_y2;
|
||||
|
||||
gdk_init(&argc, &argv);
|
||||
|
||||
notify_init("XY");
|
||||
|
||||
display = gdk_display_get_default();
|
||||
screen = gdk_display_get_default_screen(display);
|
||||
screen_x2 = gdk_screen_get_width(screen) - 1;
|
||||
screen_y2 = gdk_screen_get_height(screen) - 1;
|
||||
|
||||
emit_notification(0, 0);
|
||||
g_usleep (1000000);
|
||||
emit_notification(screen_x2, 0);
|
||||
g_usleep (1000000);
|
||||
emit_notification(5, 150);
|
||||
g_usleep (1000000);
|
||||
emit_notification(screen_x2 - 5, 150);
|
||||
g_usleep (1000000);
|
||||
emit_notification(0, screen_y2 / 2);
|
||||
g_usleep (1000000);
|
||||
emit_notification(screen_x2, screen_y2 / 2);
|
||||
g_usleep (1000000);
|
||||
emit_notification(5, screen_y2 - 150);
|
||||
g_usleep (1000000);
|
||||
emit_notification(screen_x2 - 5, screen_y2 - 150);
|
||||
g_usleep (1000000);
|
||||
emit_notification(0, screen_y2);
|
||||
g_usleep (1000000);
|
||||
emit_notification(screen_x2, screen_y2);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* @file tests/test-xy.c Unit test: X, Y hints
|
||||
*
|
||||
* @Copyright (C) 2005 Christian Hammond <chipx86@chipx86.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <libnotify/notify.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int main() {
|
||||
NotifyNotification *n;
|
||||
|
||||
notify_init("XY");
|
||||
|
||||
n = notify_notification_new ("X, Y Test",
|
||||
"This notification should point to 150, 10",
|
||||
NULL, NULL);
|
||||
|
||||
notify_notification_set_hint_int32 (n, "x", 150);
|
||||
notify_notification_set_hint_int32 (n, "y", 10);
|
||||
|
||||
if (!notify_notification_show (n, NULL)) {
|
||||
fprintf(stderr, "failed to send notification\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
bin_PROGRAMS = notify-send
|
||||
|
||||
common_ldflags = \
|
||||
$(top_builddir)/libnotify/libnotify.la \
|
||||
$(PACKAGE_LIBS) \
|
||||
-lpopt
|
||||
|
||||
notify_send_SOURCES = notify-send.c
|
||||
notify_send_LDADD = $(common_ldflags)
|
||||
|
||||
INCLUDES = $(PACKAGE_CFLAGS)
|
|
@ -0,0 +1,144 @@
|
|||
/**
|
||||
* @file notify-send.c A tool for sending notifications.
|
||||
*
|
||||
* Copyright (C) 2004 Christian Hammond.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this program; if not, write to the Free
|
||||
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
#include <libnotify/notify.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <popt.h>
|
||||
#include <glib.h>
|
||||
|
||||
#define N_(x) (x)
|
||||
|
||||
int
|
||||
main(int argc, const char **argv)
|
||||
{
|
||||
const gchar *summary = NULL;
|
||||
const gchar *body = NULL;
|
||||
const gchar *type = NULL;
|
||||
char *urgency_str = NULL;
|
||||
gchar *icon_str = NULL;
|
||||
gchar *icons = NULL;
|
||||
NotifyUrgency urgency = NOTIFY_URGENCY_NORMAL;
|
||||
long expire_timeout = NOTIFY_TIMEOUT_DEFAULT;
|
||||
char ch;
|
||||
poptContext opt_ctx;
|
||||
const char **args;
|
||||
NotifyNotification *notify;
|
||||
GError *error = NULL;
|
||||
|
||||
g_type_init ();
|
||||
|
||||
struct poptOption options[] =
|
||||
{
|
||||
{ "urgency", 'u', POPT_ARG_STRING | POPT_ARGFLAG_STRIP, &urgency_str,
|
||||
0, N_("Specifies the urgency level (low, normal, critical)."),
|
||||
NULL },
|
||||
{ "expire-time", 't', POPT_ARG_INT | POPT_ARGFLAG_STRIP,
|
||||
&expire_timeout, 0,
|
||||
N_("Specifies the timeout in seconds at which to expire the "
|
||||
"notification."),
|
||||
NULL },
|
||||
{ "icon", 'i', POPT_ARG_STRING | POPT_ARGFLAG_STRIP, &icons, 0,
|
||||
N_("Specifies an icon filename or stock icon to display."),
|
||||
N_("ICON1,ICON2,...") },
|
||||
{ "type", 't', POPT_ARG_STRING | POPT_ARGFLAG_STRIP, &type, 0,
|
||||
N_("Specifies the notification type."),
|
||||
N_("ICON1,ICON2,...") },
|
||||
POPT_AUTOHELP
|
||||
POPT_TABLEEND
|
||||
};
|
||||
|
||||
opt_ctx = poptGetContext("notify-send", argc, argv, options, 0);
|
||||
poptSetOtherOptionHelp(opt_ctx, "[OPTIONS]* <summary> [body]");
|
||||
|
||||
while ((ch = poptGetNextOpt(opt_ctx)) >= 0)
|
||||
;
|
||||
|
||||
if (ch < -1 || (args = poptGetArgs(opt_ctx)) == NULL)
|
||||
{
|
||||
poptPrintUsage(opt_ctx, stderr, 0);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (args[0] != NULL)
|
||||
summary = args[0];
|
||||
|
||||
if (summary == NULL)
|
||||
{
|
||||
poptPrintUsage(opt_ctx, stderr, 0);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (args[1] != NULL)
|
||||
{
|
||||
body = args[1];
|
||||
|
||||
if (args[2] != NULL)
|
||||
{
|
||||
poptPrintUsage(opt_ctx, stderr, 0);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (icons != NULL)
|
||||
{
|
||||
char *c;
|
||||
|
||||
/* XXX */
|
||||
if ((c = strchr(icons, ',')) != NULL)
|
||||
*c = '\0';
|
||||
|
||||
icon_str = icons;
|
||||
|
||||
}
|
||||
|
||||
if (urgency_str != NULL)
|
||||
{
|
||||
if (!strcasecmp(urgency_str, "low"))
|
||||
urgency = NOTIFY_URGENCY_LOW;
|
||||
else if (!strcasecmp(urgency_str, "normal"))
|
||||
urgency = NOTIFY_URGENCY_NORMAL;
|
||||
else if (!strcasecmp(urgency_str, "critical"))
|
||||
urgency = NOTIFY_URGENCY_CRITICAL;
|
||||
else
|
||||
{
|
||||
poptPrintHelp(opt_ctx, stderr, 0);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (!notify_init("notify-send"))
|
||||
exit(1);
|
||||
|
||||
|
||||
notify = notify_notification_new (summary, body, icon_str, NULL);
|
||||
notify_notification_set_category (notify, type);
|
||||
notify_notification_set_urgency (notify, urgency);
|
||||
notify_notification_set_timeout (notify, expire_timeout);
|
||||
|
||||
notify_notification_show (notify, error);
|
||||
|
||||
poptFreeContext(opt_ctx);
|
||||
notify_uninit();
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue