Import Upstream version 2.36.0
This commit is contained in:
commit
ce20e78097
|
@ -0,0 +1,2 @@
|
|||
Mike Gorse <mgorse@suse.com>
|
||||
Mark Doffman <mark.doffman@codethink.co.uk>
|
|
@ -0,0 +1,482 @@
|
|||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02110-1301 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 library GPL. It is
|
||||
numbered 2 because it goes with version 2 of the ordinary GPL.]
|
||||
|
||||
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 Library General Public License, applies to some
|
||||
specially designated Free Software Foundation software, and to any
|
||||
other libraries whose authors decide to use it. You can use it for
|
||||
your libraries, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the 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 a program 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.
|
||||
|
||||
Our method of protecting your rights has two steps: (1) copyright
|
||||
the library, and (2) offer you this license which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
Also, for each distributor's protection, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
library. If the library is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original
|
||||
version, so that any problems introduced by others will not reflect on
|
||||
the original authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that companies distributing free
|
||||
software will individually obtain patent licenses, thus in effect
|
||||
transforming the program into proprietary software. To prevent this,
|
||||
we have made it clear that any patent must be licensed for everyone's
|
||||
free use or not licensed at all.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the ordinary
|
||||
GNU General Public License, which was designed for utility programs. This
|
||||
license, the GNU Library General Public License, applies to certain
|
||||
designated libraries. This license is quite different from the ordinary
|
||||
one; be sure to read it in full, and don't assume that anything in it is
|
||||
the same as in the ordinary license.
|
||||
|
||||
The reason we have a separate public license for some libraries is that
|
||||
they blur the distinction we usually make between modifying or adding to a
|
||||
program and simply using it. Linking a program with a library, without
|
||||
changing the library, is in some sense simply using the library, and is
|
||||
analogous to running a utility program or application program. However, in
|
||||
a textual and legal sense, the linked executable is a combined work, a
|
||||
derivative of the original library, and the ordinary General Public License
|
||||
treats it as such.
|
||||
|
||||
Because of this blurred distinction, using the ordinary General
|
||||
Public License for libraries did not effectively promote software
|
||||
sharing, because most developers did not use the libraries. We
|
||||
concluded that weaker conditions might promote sharing better.
|
||||
|
||||
However, unrestricted linking of non-free programs would deprive the
|
||||
users of those programs of all benefit from the free status of the
|
||||
libraries themselves. This Library General Public License is intended to
|
||||
permit developers of non-free programs to use free libraries, while
|
||||
preserving your freedom as a user of such programs to change the free
|
||||
libraries that are incorporated in them. (We have not seen how to achieve
|
||||
this as regards changes in header files, but we have achieved it as regards
|
||||
changes in the actual functions of the Library.) The hope is that this
|
||||
will lead to faster development of free libraries.
|
||||
|
||||
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, while the latter only
|
||||
works together with the library.
|
||||
|
||||
Note that it is possible for a library to be covered by the ordinary
|
||||
General Public License rather than by this special one.
|
||||
|
||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library which
|
||||
contains a notice placed by the copyright holder or other authorized
|
||||
party saying it may be distributed under the terms of this Library
|
||||
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 compile 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) 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.
|
||||
|
||||
c) 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.
|
||||
|
||||
d) 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 source code 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 to
|
||||
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 Library 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 Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
Boston, MA 02110-1301 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,339 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
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 Program or any portion
|
||||
of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
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 Program, 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 Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) 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; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, 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 executable. However, as a
|
||||
special exception, the source code 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.
|
||||
|
||||
If distribution of executable or 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 counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program 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.
|
||||
|
||||
5. 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 Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program 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 to
|
||||
this License.
|
||||
|
||||
7. 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 Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program 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 Program.
|
||||
|
||||
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.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program 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.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies 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 Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, 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
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. 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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
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 program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 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.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
|
@ -0,0 +1,20 @@
|
|||
Install procedure
|
||||
-----------------
|
||||
|
||||
% gzip -cd pyatspi-2.0.0.tar.gz | tar xvf # unpack the sources
|
||||
% cd pyatspi-2.0.0 # change to the toplevel directory
|
||||
% ./configure # run the `configure' script
|
||||
% make # build pyatspi
|
||||
|
||||
[ Become root if necessary ]
|
||||
% make install # install pyatspi
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
GNU make
|
||||
GNU autotools
|
||||
|
||||
python
|
||||
glib
|
||||
dbus-python
|
|
@ -0,0 +1,10 @@
|
|||
SUBDIRS=pyatspi examples
|
||||
|
||||
if ENABLE_TESTING
|
||||
SUBDIRS+=tests
|
||||
else
|
||||
SUBDIRS+=
|
||||
endif
|
||||
|
||||
EXTRA_DIST = COPYING.GPL \
|
||||
pyatspi2.doap
|
|
@ -0,0 +1,860 @@
|
|||
# Makefile.in generated by automake 1.16.1 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
am__is_gnu_make = { \
|
||||
if test -z '$(MAKELEVEL)'; then \
|
||||
false; \
|
||||
elif test -n '$(MAKE_HOST)'; then \
|
||||
true; \
|
||||
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
||||
true; \
|
||||
else \
|
||||
false; \
|
||||
fi; \
|
||||
}
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
@ENABLE_TESTING_TRUE@am__append_1 = tests
|
||||
@ENABLE_TESTING_FALSE@am__append_2 =
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
|
||||
$(am__configure_deps) $(am__DIST_COMMON)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno config.status.lineno
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
||||
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_@AM_V@)
|
||||
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
|
||||
ctags-recursive dvi-recursive html-recursive info-recursive \
|
||||
install-data-recursive install-dvi-recursive \
|
||||
install-exec-recursive install-html-recursive \
|
||||
install-info-recursive install-pdf-recursive \
|
||||
install-ps-recursive install-recursive installcheck-recursive \
|
||||
installdirs-recursive pdf-recursive ps-recursive \
|
||||
tags-recursive uninstall-recursive
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
||||
distclean-recursive maintainer-clean-recursive
|
||||
am__recursive_targets = \
|
||||
$(RECURSIVE_TARGETS) \
|
||||
$(RECURSIVE_CLEAN_TARGETS) \
|
||||
$(am__extra_recursive_targets)
|
||||
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
|
||||
cscope distdir distdir-am dist dist-all distcheck
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
|
||||
$(LISP)config.h.in
|
||||
# Read a list of newline-separated strings from the standard input,
|
||||
# and print each of them once, without duplicates. Input order is
|
||||
# *not* preserved.
|
||||
am__uniquify_input = $(AWK) '\
|
||||
BEGIN { nonempty = 0; } \
|
||||
{ items[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in items) print i; }; } \
|
||||
'
|
||||
# Make sure the list of sources is unique. This is necessary because,
|
||||
# e.g., the same source file might be shared among _SOURCES variables
|
||||
# for different programs/libraries.
|
||||
am__define_uniq_tagged_files = \
|
||||
list='$(am__tagged_files)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | $(am__uniquify_input)`
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
CSCOPE = cscope
|
||||
DIST_SUBDIRS = pyatspi examples tests
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
|
||||
$(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \
|
||||
$(top_srcdir)/config/config.sub \
|
||||
$(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \
|
||||
$(top_srcdir)/config/missing AUTHORS COPYING INSTALL NEWS \
|
||||
README config/compile config/config.guess config/config.sub \
|
||||
config/depcomp config/install-sh config/ltmain.sh \
|
||||
config/missing config/py-compile
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
if test -d "$(distdir)"; then \
|
||||
find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -rf "$(distdir)" \
|
||||
|| { sleep 5 && rm -rf "$(distdir)"; }; \
|
||||
else :; fi
|
||||
am__post_remove_distdir = $(am__remove_distdir)
|
||||
am__relativize = \
|
||||
dir0=`pwd`; \
|
||||
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
|
||||
sed_rest='s,^[^/]*/*,,'; \
|
||||
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
|
||||
sed_butlast='s,/*[^/]*$$,,'; \
|
||||
while test -n "$$dir1"; do \
|
||||
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
|
||||
if test "$$first" != "."; then \
|
||||
if test "$$first" = ".."; then \
|
||||
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
|
||||
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
|
||||
else \
|
||||
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
|
||||
if test "$$first2" = "$$first"; then \
|
||||
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
|
||||
else \
|
||||
dir2="../$$dir2"; \
|
||||
fi; \
|
||||
dir0="$$dir0"/"$$first"; \
|
||||
fi; \
|
||||
fi; \
|
||||
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
|
||||
done; \
|
||||
reldir="$$dir2"
|
||||
GZIP_ENV = --best
|
||||
DIST_ARCHIVES = $(distdir).tar.xz
|
||||
DIST_TARGETS = dist-xz
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
||||
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
AR = @AR@
|
||||
ATK_CFLAGS = @ATK_CFLAGS@
|
||||
ATK_LIBS = @ATK_LIBS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DBUS_CFLAGS = @DBUS_CFLAGS@
|
||||
DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
|
||||
DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
|
||||
DBUS_LIBS = @DBUS_LIBS@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||
GLIB_LIBS = @GLIB_LIBS@
|
||||
GMODULE_CFLAGS = @GMODULE_CFLAGS@
|
||||
GMODULE_LIBS = @GMODULE_LIBS@
|
||||
GOBJ_CFLAGS = @GOBJ_CFLAGS@
|
||||
GOBJ_LIBS = @GOBJ_LIBS@
|
||||
GREP = @GREP@
|
||||
GTK_CFLAGS = @GTK_CFLAGS@
|
||||
GTK_LIBS = @GTK_LIBS@
|
||||
GTK_MODULE_DIR = @GTK_MODULE_DIR@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIB_XML_CFLAGS = @LIB_XML_CFLAGS@
|
||||
LIB_XML_LIBS = @LIB_XML_LIBS@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
LT_AGE = @LT_AGE@
|
||||
LT_CURRENT = @LT_CURRENT@
|
||||
LT_RELEASE = @LT_RELEASE@
|
||||
LT_REVISION = @LT_REVISION@
|
||||
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
|
||||
LT_VERSION_INFO = @LT_VERSION_INFO@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PKG_CONFIG = @PKG_CONFIG@
|
||||
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
|
||||
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
|
||||
PYGOBJ_CFLAGS = @PYGOBJ_CFLAGS@
|
||||
PYGOBJ_LIBS = @PYGOBJ_LIBS@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
|
||||
PYTHON_PLATFORM = @PYTHON_PLATFORM@
|
||||
PYTHON_PREFIX = @PYTHON_PREFIX@
|
||||
PYTHON_VERSION = @PYTHON_VERSION@
|
||||
RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
XMKMF = @XMKMF@
|
||||
X_CFLAGS = @X_CFLAGS@
|
||||
X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||
X_LIBS = @X_LIBS@
|
||||
X_PRE_LIBS = @X_PRE_LIBS@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
pkgpyexecdir = @pkgpyexecdir@
|
||||
pkgpythondir = @pkgpythondir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
pyexecdir = @pyexecdir@
|
||||
pythondir = @pythondir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
SUBDIRS = pyatspi examples $(am__append_1) $(am__append_2)
|
||||
EXTRA_DIST = COPYING.GPL \
|
||||
pyatspi2.doap
|
||||
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
am--refresh: Makefile
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
|
||||
$(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(am__cd) $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
config.h: stamp-h1
|
||||
@test -f $@ || rm -f stamp-h1
|
||||
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
|
||||
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status config.h
|
||||
$(srcdir)/config.h.in: $(am__configure_deps)
|
||||
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
|
||||
rm -f stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h stamp-h1
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool config.lt
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run 'make' without going through this Makefile.
|
||||
# To change the values of 'make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in 'config.status', edit 'config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run 'make');
|
||||
# (2) otherwise, pass the desired values on the 'make' command line.
|
||||
$(am__recursive_targets):
|
||||
@fail=; \
|
||||
if $(am__make_keepgoing); then \
|
||||
failcom='fail=yes'; \
|
||||
else \
|
||||
failcom='exit 1'; \
|
||||
fi; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
ID: $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||
tags: tags-recursive
|
||||
TAGS: tags
|
||||
|
||||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
$(am__define_uniq_tagged_files); \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: ctags-recursive
|
||||
|
||||
CTAGS: ctags
|
||||
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
cscope: cscope.files
|
||||
test ! -s cscope.files \
|
||||
|| $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
|
||||
clean-cscope:
|
||||
-rm -f cscope.files
|
||||
cscope.files: clean-cscope cscopelist
|
||||
cscopelist: cscopelist-recursive
|
||||
|
||||
cscopelist-am: $(am__tagged_files)
|
||||
list='$(am__tagged_files)'; \
|
||||
case "$(srcdir)" in \
|
||||
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
|
||||
*) sdir=$(subdir)/$(srcdir) ;; \
|
||||
esac; \
|
||||
for i in $$list; do \
|
||||
if test -f "$$i"; then \
|
||||
echo "$(subdir)/$$i"; \
|
||||
else \
|
||||
echo "$$sdir/$$i"; \
|
||||
fi; \
|
||||
done >> $(top_builddir)/cscope.files
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
|
||||
|
||||
distdir: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||
|
||||
distdir-am: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
test -d "$(distdir)" || mkdir "$(distdir)"
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
$(am__make_dryrun) \
|
||||
|| test -d "$(distdir)/$$subdir" \
|
||||
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
|
||||
$(am__relativize); \
|
||||
new_distdir=$$reldir; \
|
||||
dir1=$$subdir; dir2="$(top_distdir)"; \
|
||||
$(am__relativize); \
|
||||
new_top_distdir=$$reldir; \
|
||||
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
|
||||
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
|
||||
($(am__cd) $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$new_top_distdir" \
|
||||
distdir="$$new_distdir" \
|
||||
am__remove_distdir=: \
|
||||
am__skip_length_check=: \
|
||||
am__skip_mode_fix=: \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
-test -n "$(am__skip_mode_fix)" \
|
||||
|| find "$(distdir)" -type d ! -perm -755 \
|
||||
-exec chmod u+rwx,go+rx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r "$(distdir)"
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-lzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
|
||||
$(am__post_remove_distdir)
|
||||
dist-xz: distdir
|
||||
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
@echo WARNING: "Support for distribution archives compressed with" \
|
||||
"legacy program 'compress' is deprecated." >&2
|
||||
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
@echo WARNING: "Support for shar distribution archives is" \
|
||||
"deprecated." >&2
|
||||
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
||||
shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
dist dist-all:
|
||||
$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.lz*) \
|
||||
lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
|
||||
*.tar.xz*) \
|
||||
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir)
|
||||
chmod u+w $(distdir)
|
||||
mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
test -d $(distdir)/_build || exit 0; \
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& am__cwd=`pwd` \
|
||||
&& $(am__cd) $(distdir)/_build/sub \
|
||||
&& ../../configure \
|
||||
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
--srcdir=../.. --prefix="$$dc_install_base" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
|
||||
&& cd "$$am__cwd" \
|
||||
|| exit 1
|
||||
$(am__post_remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
||||
distuninstallcheck:
|
||||
@test -n '$(distuninstallcheck_dir)' || { \
|
||||
echo 'ERROR: trying to run $@ with an empty' \
|
||||
'$$(distuninstallcheck_dir)' >&2; \
|
||||
exit 1; \
|
||||
}; \
|
||||
$(am__cd) '$(distuninstallcheck_dir)' || { \
|
||||
echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
|
||||
exit 1; \
|
||||
}; \
|
||||
test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile config.h
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-recursive
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-recursive
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-recursive
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-recursive
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am:
|
||||
|
||||
.MAKE: $(am__recursive_targets) all install-am install-strip
|
||||
|
||||
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
|
||||
am--refresh check check-am clean clean-cscope clean-generic \
|
||||
clean-libtool cscope cscopelist-am ctags ctags-am dist \
|
||||
dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \
|
||||
dist-xz dist-zip distcheck distclean distclean-generic \
|
||||
distclean-hdr distclean-libtool distclean-tags distcleancheck \
|
||||
distdir distuninstallcheck dvi dvi-am html html-am info \
|
||||
info-am install install-am install-data install-data-am \
|
||||
install-dvi install-dvi-am install-exec install-exec-am \
|
||||
install-html install-html-am install-info install-info-am \
|
||||
install-man install-pdf install-pdf-am install-ps \
|
||||
install-ps-am install-strip installcheck installcheck-am \
|
||||
installdirs installdirs-am maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
|
||||
uninstall-am
|
||||
|
||||
.PRECIOUS: Makefile
|
||||
|
||||
|
||||
# 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,472 @@
|
|||
What's new in pyatspi 2.35.1:
|
||||
|
||||
* Fix dead link in README.
|
||||
|
||||
* Adjust accepted test results for python 3.8 compatibility (!21).
|
||||
|
||||
* Add ROLE_MARK and ROLE_SUGGESTION (!22).
|
||||
|
||||
What's new in pyatspi 2.34.0:
|
||||
|
||||
* Updated doap, and include it in the tarball.
|
||||
|
||||
What's new in pyatspi 2.33.92:
|
||||
|
||||
* Several test fixes (thanks to Samuel THibault).
|
||||
* Add license header on some test files.
|
||||
|
||||
What's new in pyatspi 2.33.90:
|
||||
|
||||
* Fix typo in get_imageLocale.
|
||||
|
||||
* event.str(): show event sender.
|
||||
|
||||
* Remove wrapper for atspi_text_notify_reading_position, as the function has
|
||||
been removed from at-spi2-core.
|
||||
|
||||
* events: replace object:text:reading-position with
|
||||
screen-reader:region-changed.
|
||||
|
||||
* Add wrapper for atspi_set_reference_window.
|
||||
|
||||
What's new in pyatspi 2.33.2:
|
||||
|
||||
* Add support for ROLE_CONTENT_DELETION and ROLE_CONTENT_INSERTION.
|
||||
|
||||
What's new in pyatspi 2.33.1:
|
||||
|
||||
* Fix arguments in text.addSelection.
|
||||
|
||||
* Fix default kind value for registerKeystrokeListener.
|
||||
|
||||
* Document that extents are only meaningful when the accessible is both
|
||||
visible and showing.
|
||||
|
||||
* Add accessibleId property.
|
||||
|
||||
* Add text.notifyReadingPosition.
|
||||
|
||||
* Fix print usage in example, for python 3 compatibility.
|
||||
|
||||
What's new in pyatspi 2.31.2:
|
||||
|
||||
* Add ScrollSubstringTo and ScrollSubstringToPoint text interfaces.
|
||||
|
||||
What's new in pyatspi 2.31.1:
|
||||
|
||||
* Add support for locking/unlocking modifiers.
|
||||
|
||||
What's new in pyatspi 2.29.1:
|
||||
|
||||
* Add ScrollTo and ScrollToPoint component interfaces.
|
||||
|
||||
What's new in pyatspi 2.25.90:
|
||||
|
||||
* registry: Rename async keyword for compatibility with Python 3.7.
|
||||
|
||||
* Add missing XY_PARENT export.
|
||||
|
||||
What's new in pyatspi 2.25.3:
|
||||
|
||||
* Add error-message, error-for, details, and details-for relation types
|
||||
|
||||
What's new in pyatspi 2.25.2:
|
||||
|
||||
* Add some missing roles to correspond with atk (description list,
|
||||
description term, description value, and footnote).
|
||||
|
||||
What's new in pyatspi 2.24.0:
|
||||
|
||||
* Fix an invalid escape sequence.
|
||||
|
||||
* Rename enum class to atspienum to avoid name conflict; fixes build with
|
||||
python 3.6.
|
||||
|
||||
What's new in pyatspi 2.20.2:
|
||||
|
||||
* Update STATE_LAST_DEFINED so that STATE_READ_ONLY is recognized
|
||||
(bgo#766121).
|
||||
|
||||
What's new in pyatspi 2.20.1:
|
||||
|
||||
* gettext: Don't modify endOffset (bgo#721860).
|
||||
|
||||
What's new in pyatspi 2.19.91:
|
||||
|
||||
* Fix text.getDefaultAttributeSet (bgo#752928).
|
||||
|
||||
What's new in pyatspi 2.17.90:
|
||||
|
||||
* Call gi.require_version() before import
|
||||
|
||||
What's new in pyatspi 2.15.90:
|
||||
|
||||
* Add new roles for fractions, roots, subscripts, and superscripts (bgo#743413).
|
||||
|
||||
What's new in pyatspi 2.15.4:
|
||||
|
||||
* Support ATSPI_STATE_READ_ONLY (bgo#690108).
|
||||
|
||||
What's new in pyatspi 2.15.3:
|
||||
|
||||
* Add ROLE_STATIC (bgo#740364).
|
||||
|
||||
What's new in pyatspi 2.14.0:
|
||||
|
||||
* Test fixes.
|
||||
|
||||
What's new in pyatspi 2.11.92:
|
||||
|
||||
*Fix a traceback when removing a text selection.
|
||||
|
||||
What's new in pyatspi 2.11.90:
|
||||
|
||||
* Add AtspiTableCell, tracking the new atk interface.
|
||||
|
||||
What's new in pyatspi 2.11.3:
|
||||
|
||||
* document: add support to current page and page count (BGO#719508).
|
||||
|
||||
What's new in pyatspi 2.11.2:
|
||||
|
||||
* Add new roles and states to track atk (BGO#710464, BGO#712608, BGO#712609).
|
||||
|
||||
What's new in pyatspi 2.9.92:
|
||||
|
||||
* Handle attribute lists with multiple accepted values for the same key
|
||||
when creating a collection match rule (BGO#700865).
|
||||
|
||||
What's new in pyatspi 2.9.90:
|
||||
|
||||
* Added getStringAtOffset.
|
||||
|
||||
What's new in pyatspi 2.9.3:
|
||||
|
||||
* Add some examples (Magdalen Berns, BGO#701063).
|
||||
|
||||
* Removed setting of AT_SPI_CLIENT, as it is no longer used as of
|
||||
at-spi2-core 2.9.3.
|
||||
|
||||
What's new in pyatspi 2.9.2:
|
||||
|
||||
* Update for libatspi API changes (BGO#700243).
|
||||
|
||||
What's new in pyatspi 2.7.91:
|
||||
|
||||
* Add objectLocale property (BGO#694368).
|
||||
|
||||
* Stop using a deprecated method.
|
||||
|
||||
* Don't install the example, since it isn't compatible with Python 3.
|
||||
|
||||
What's new in pyatspi 2.7.5:
|
||||
|
||||
* Support new levelbar role.
|
||||
|
||||
What's new in pyatspi 2.7.2:
|
||||
|
||||
* Add a --with-python option to configure.ac.
|
||||
|
||||
* Fix getCharacterAtOffset.
|
||||
|
||||
What's new in pyatspi 2.7.1:
|
||||
|
||||
* Export application class in the Accessibility namespace, for
|
||||
backwards compatibility.
|
||||
|
||||
What's new in pyatspi 2.6.0:
|
||||
|
||||
* Install caret focus tracker into $bindir, rather than $pythondir/examples.
|
||||
|
||||
* Fix incorrect FSF address in file headers.
|
||||
|
||||
What's new in pyatspi 2.5.92:
|
||||
|
||||
* Fix for bug #683302 - Missing argument for set_current_value method
|
||||
|
||||
* Include interim focus tracker as an example.
|
||||
|
||||
What's new in pyatspi 2.5.91:
|
||||
|
||||
* Fix autogen.sh for non-sourcedir build.
|
||||
|
||||
What's new in pyatspi 2.5.5:
|
||||
|
||||
* Add getLocalizedName for actions.
|
||||
|
||||
What's new in pyatspi 2.5.4:
|
||||
|
||||
* Wrap all interfaces (BGO#679044).
|
||||
|
||||
What's new in pyatspi 2.5.3:
|
||||
|
||||
* Fix truth evaluation for accessibles in Python 3.
|
||||
|
||||
* Fix for bug #678497 - dict.iteritems() is no longer supported in Python 3
|
||||
|
||||
* Re-add setTimeout (it seems that it was lost among the Python 3 updates).
|
||||
|
||||
What's new in pyatspi 2.5.2:
|
||||
|
||||
* More Python 3 fixes.
|
||||
|
||||
* Fix getStates regression (BGO#677070)
|
||||
|
||||
What's new in pyatspi 2.5.1:
|
||||
|
||||
* Add setTimeout.
|
||||
|
||||
* Some clean-ups for Python 3.
|
||||
|
||||
What's new in pyatspi 2.3.92:
|
||||
|
||||
* Another fix for --enable-tests.
|
||||
|
||||
What's new in pyatspi 2.3.91:
|
||||
|
||||
* Fix --enable-tests.
|
||||
|
||||
What's new in pyatspi 2.3.5:
|
||||
|
||||
* Fix for BGO#660826: Drop unneeded pygtk check.
|
||||
|
||||
* Remove exception wrapping - pyatspi will now return the real exception
|
||||
as translated by pygi, rather than LookupError. This means that it is now
|
||||
necessary to catch, eg, RuntimeError rather than LookupError if one wishes
|
||||
to catch exceptions, but it is now possible to see the original error.
|
||||
|
||||
What's new in pyatspi 2.3.4:
|
||||
|
||||
* Fix for BGO#666871: deregisterKeystrokeListener was broken.
|
||||
|
||||
What's new in pyatspi 2.2.1:
|
||||
|
||||
* Use hasattr rather than a try in registerEventListener, for performance.
|
||||
|
||||
* Fix for BGO#661613: getOffsetAtPoint now works.
|
||||
|
||||
What's new in pyatspi 2.1.91:
|
||||
|
||||
* Fix for BGO#658343: Have configure check for pygobject-3.0
|
||||
|
||||
What's new in pyatspi 2.1.90:
|
||||
|
||||
* Fix getTextBeforeOffset.
|
||||
|
||||
* Remove legacy pygtk dependency.
|
||||
|
||||
What's new in pyatspi 2.1.5:
|
||||
|
||||
* Remove support for relocated pyatspi-corba.
|
||||
|
||||
* Fix getTextBeforeOffset.
|
||||
|
||||
What's new in pyatspi 2.1.4:
|
||||
|
||||
* Update to handle libatspi API changes.
|
||||
|
||||
* Fix for BGO#653874 - new ATK roles.
|
||||
|
||||
What's new in pyatspi 2.1.3:
|
||||
|
||||
* BGO#644393: Remove document:content-changed from EVENT_TREE
|
||||
|
||||
What's new in pyatspi 2.1.2:
|
||||
|
||||
* Fix traceback when creating match rules with attribute sets
|
||||
|
||||
* Add atspiVersion().
|
||||
|
||||
* Fix several table functions
|
||||
|
||||
* Fix makeSyncType to generate a proper enum (will be needed when enum-types
|
||||
branch of at-spi2-core is merged).
|
||||
|
||||
* Add clearCache().
|
||||
|
||||
* Cache eventTypes in events for performance reasons.
|
||||
|
||||
* Add GPL2 license because a couple of test files are licensed under it.
|
||||
|
||||
What's new in pyatspi2 2.1.1:
|
||||
|
||||
* Fix traceback when calling document functions
|
||||
|
||||
What's new in pyatspi2 2.0.1:
|
||||
|
||||
* Fix for BGO#645644: Throw LookupError rather than RUntimeError
|
||||
|
||||
* Add id property
|
||||
|
||||
* Add a work-around for getStates failing on 64-bit systems with pygobject
|
||||
2.28.3 and earlier.
|
||||
|
||||
What's new in pyatspi2 2.0.0:
|
||||
|
||||
* Removed some unused files.
|
||||
|
||||
What's new in pyatspi2 1.91.92:
|
||||
|
||||
* Added some missing __str__ functions for events and accessibles.
|
||||
|
||||
What's new in pyatspi2 1.91.91:
|
||||
|
||||
* Fix for BGO#643384: registerKeystrokeListener should pass a bit mask, not an
|
||||
enum.
|
||||
|
||||
What's new in pyatspi2 1.91.90:
|
||||
|
||||
* Refactor EditableText so that text methods can be called from it.
|
||||
|
||||
* Make state accessible through pyatspi.constants.
|
||||
|
||||
* Fix selection interface.
|
||||
|
||||
* Fix for BGO#641869: Remove --enable-relocate option.
|
||||
|
||||
What's new in pyatspi2 1.91.6:
|
||||
|
||||
* Added source_name and source_role to events.
|
||||
|
||||
* Call gconftool-2 to check the value of /desktop/gnome/interface/at-spi-corba
|
||||
rather than importing gconf, since the latter can cause problems if new and
|
||||
old versions of the Python bindings are mixed.
|
||||
|
||||
* Added setExtents, setSize, and setPosition for components.
|
||||
|
||||
* Added setCacheMask.
|
||||
|
||||
What's new in pyatspi2 1.91.5:
|
||||
|
||||
* Fixed generateKeyboardEvent, description, and allModifiers.
|
||||
|
||||
* Added a dummy stateset.unref function for backwards compatibility.
|
||||
|
||||
* Added a pumpQueuedEvents stub.
|
||||
|
||||
* Added RELATION_EMBEDDED_BY.
|
||||
|
||||
* Hide children attribute since it is currently broken and caused a crash
|
||||
with Accerciser.
|
||||
|
||||
* Wrap event type so that sub-fields can be accessed.
|
||||
|
||||
What's new in pyatspi2 1.91.4:
|
||||
|
||||
* Added a dummy freeMatchRule function.
|
||||
|
||||
* Attribute fixes.
|
||||
|
||||
* __getitem__ now supports negative indices.
|
||||
|
||||
* Fixed some properties, relationToString, listInterfaces, various text
|
||||
methods.
|
||||
|
||||
* Raise notImplementedError when querying unimplemented interfaces.
|
||||
|
||||
What's new in pyatspi2 1.91.3:
|
||||
|
||||
* This is a major refactor using the C-based libatspi as a core. This should
|
||||
significantly improve performance. However, this release is very buggy and
|
||||
is more of a development snapshot than a usable release.
|
||||
|
||||
What's new in pyatspi2 1.91.1:
|
||||
|
||||
* Add configure check for python-xlib
|
||||
|
||||
* Have calls on the async bus time out after 2 seconds
|
||||
|
||||
* Added a LRU cache for objects that use the soft cache
|
||||
|
||||
What's new in pyatspi2 1.91.0:
|
||||
|
||||
* --disable-relocate is the default again.
|
||||
|
||||
* Added a "soft cache" to try to avoid repeatedly querying for information
|
||||
in cases where we never received an AccessibleAdded signal for an object.
|
||||
|
||||
What's new in pyatspi2 0.3.91:
|
||||
|
||||
* Enable relocate by default for now.
|
||||
|
||||
* Ensure that queued events are delivered when calling registry.stop().
|
||||
|
||||
* If an unexpected exception is thrown when checking for the accessibility bus
|
||||
(ie, python-xlib is missing), throw the exception rather than silently
|
||||
reverting to the session bus.
|
||||
|
||||
What's new in pyatspi2 0.3.90:
|
||||
|
||||
* Have registerEventListener an deregisterEventListener notify the registry,
|
||||
as is now needed.
|
||||
|
||||
* Avoid raising an event multiple times if EVENT_TREE is used to register for
|
||||
all events.
|
||||
|
||||
What's new in pyatspi2 0.3.6:
|
||||
|
||||
* Some thread safety fixes; should no longer deadlock when listening for
|
||||
events using Strongwind.
|
||||
|
||||
What's new in pyatspi2 0.3.4:
|
||||
|
||||
* Listen for AddAccessible and RemoveAccessible at the DesktopCache level.
|
||||
This fixes a regression with Firefox for instance that was introduced in v0.3.3.
|
||||
|
||||
What's new in pyatspi2 0.3.3:
|
||||
|
||||
* Hyperlink fixes.
|
||||
|
||||
* When an object's parent is set to null, remove it from the parent in
|
||||
the cache.
|
||||
|
||||
* Fix an issue where a state-changed handler can be called before the
|
||||
cache received the signal and updated the state.
|
||||
|
||||
* Only range check for __getitem__, not getChildAtIndex. This is
|
||||
pyatspi-corba's behavior and should improve performance in some cases.
|
||||
|
||||
* Fix tracebacks when checking some event properties.
|
||||
|
||||
* Fix a traceback when simulating a defunct state for an object that has
|
||||
gone away.
|
||||
|
||||
* Fix traceback when calling queryDocument.getAttributes(),
|
||||
queryText().getCharacterExtents(), and queryValue().setCurrentValue().
|
||||
|
||||
* Fix handling of some ChildrenChanged signals sent by Firefox.
|
||||
|
||||
What's new in pyatspi2 0.3.2:
|
||||
|
||||
* Remove double deletion of application from the desktop cache handler.
|
||||
Was causing a mostly harmless exception when an application shut down.
|
||||
|
||||
* Role changes now update the cache.
|
||||
|
||||
* Avoid throwing an exception in getState() if an object no longer exists.
|
||||
This avoids potentially throwing an eception where at-spi-corba may not.
|
||||
|
||||
* Do not use the cache if registry.start() has not been called; allows
|
||||
simple scripts without a main loop to work better.
|
||||
|
||||
What's new in pyatspi2 0.3.1.1:
|
||||
|
||||
Install to $PYTHONDIR again, since we have no arch-specific dependencies.
|
||||
|
||||
* Do not dispatch events while waiting for a reply from a method call.
|
||||
What's new in pyatspi2 0.3.1:
|
||||
|
||||
* Fixed GetLink, GetColumnHeader, getAccessibleAtPoint, and possibly others.
|
||||
|
||||
* Fix children-changed, property-change::accessible-parent, and
|
||||
active-descendant-changed events.
|
||||
|
||||
* Update an accessible's StateSet when a StateChanged signal is received.
|
||||
|
||||
* Properly fetch children of MANAGES_DESCENDANTS objects (ie, do not use cache)
|
||||
|
||||
* The desktop's role is now set to ROLE_DESKTOP_FRAME.
|
||||
|
||||
* Use pyexecdir as a base rather than pythondir.
|
||||
|
||||
* Disable relocation by default.
|
|
@ -0,0 +1,55 @@
|
|||
D-Bus AT-SPI
|
||||
------------
|
||||
|
||||
This version of at-spi is a major break from version 1.x.
|
||||
It has been completely rewritten to use D-Bus rather than
|
||||
ORBIT / CORBA for its transport protocol.
|
||||
|
||||
A page including instructions for testing, project status and
|
||||
TODO items is kept up to date at:
|
||||
|
||||
https://wiki.linuxfoundation.org/accessibility/atk/at-spi/at-spi_on_d-bus
|
||||
|
||||
The mailing list used for general questions is:
|
||||
|
||||
accessibility-atspi@lists.linux-foundation.org
|
||||
|
||||
For bug reports, feature requests, patches or enhancements please use
|
||||
the AT-SPI project on bugzilla.gnome.org. Use the pyatspi2 component for
|
||||
bugs specific to this module.
|
||||
|
||||
http://bugzilla.gnome.org
|
||||
|
||||
A git repository with the latest development code is available at:
|
||||
|
||||
git://git.gnome.org/pyatspi2
|
||||
|
||||
Code in this repository depends on at-spi2-core resources. The
|
||||
at-spi2-core repository can be found at:
|
||||
|
||||
git://git.gnome.org/at-spi2-core
|
||||
|
||||
More information
|
||||
----------------
|
||||
|
||||
The project was started with a D-Bus performance review
|
||||
the results of which are available on the GNOME wiki. Keep in
|
||||
mind that the D-Bus AT-SPI design documents on this page
|
||||
have not been kept up to date.
|
||||
|
||||
http://live.gnome.org/GAP/AtSpiDbusInvestigation/
|
||||
|
||||
Other sources of relevant information about AT-SPI and Accessibility
|
||||
include:
|
||||
|
||||
http://live.gnome.org/Accessibility
|
||||
http://www.sun.com/software/star/gnome/accessibility/architecture.xml
|
||||
http://accessibility.kde.org/developer/atk.php
|
||||
http://www.gnome.org/~billh/at-spi-idl/html/
|
||||
|
||||
|
||||
|
||||
Contents of this package
|
||||
------------------------
|
||||
|
||||
This package includes a python client library for the AT-SPI D-Bus accessibility infrastructure.
|
|
@ -0,0 +1,79 @@
|
|||
#######################
|
||||
# type alignment test #
|
||||
#######################
|
||||
|
||||
AC_DEFUN([DBIND_CHECK_ALIGNOF],
|
||||
[changequote(<<, >>)dnl
|
||||
dnl The name to #define.
|
||||
define(<<AC_TYPE_NAME>>,
|
||||
translit(dbind_alignof_$1, [a-z *], [A-Z_P]))dnl
|
||||
dnl The cache variable name.
|
||||
define(<<AC_CV_NAME>>,
|
||||
translit(ac_cv_alignof_$1, [ *], [_p]))dnl
|
||||
changequote([, ])dnl
|
||||
AC_MSG_CHECKING(alignment of $1)
|
||||
AC_CACHE_VAL(AC_CV_NAME,
|
||||
[AC_TRY_RUN(
|
||||
[ #include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#define DBUS_API_SUBJECT_TO_CHANGE
|
||||
#include <dbus/dbus.h>
|
||||
typedef struct {char s1;} dbind_struct;
|
||||
typedef void *dbind_pointer;
|
||||
struct test {char s1; $1 s2;};
|
||||
main()
|
||||
{
|
||||
FILE *f=fopen("conftestval", "w");
|
||||
if (!f) exit(1);
|
||||
fprintf(f, "%d\n", &(((struct test*)0)->s2));
|
||||
exit(0);
|
||||
} ],
|
||||
AC_CV_NAME=`cat conftestval`,
|
||||
AC_CV_NAME=0, AC_CV_NAME=0)
|
||||
])dnl
|
||||
AC_MSG_RESULT($AC_CV_NAME)
|
||||
if test "$AC_CV_NAME" = "0" ; then
|
||||
AC_MSG_ERROR([Failed to find alignment. Check config.log for details.])
|
||||
fi
|
||||
AC_TYPE_NAME=$AC_CV_NAME
|
||||
AC_SUBST(AC_TYPE_NAME)
|
||||
undefine([AC_TYPE_NAME])dnl
|
||||
undefine([AC_CV_NAME])dnl
|
||||
])
|
||||
|
||||
dnl AM_CHECK_PYMOD(MODNAME [,SYMBOL [,ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]]])
|
||||
dnl Check if a module containing a given symbol is visible to python.
|
||||
AC_DEFUN([AM_CHECK_PYMOD],
|
||||
[AC_REQUIRE([AM_PATH_PYTHON])
|
||||
py_mod_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'`
|
||||
AC_MSG_CHECKING(for ifelse([$2],[],,[$2 in ])python module $1)
|
||||
AC_CACHE_VAL(py_cv_mod_$py_mod_var, [
|
||||
ifelse([$2],[], [prog="
|
||||
import sys
|
||||
try:
|
||||
import $1
|
||||
except ImportError:
|
||||
sys.exit(1)
|
||||
except:
|
||||
sys.exit(0)
|
||||
sys.exit(0)"], [prog="
|
||||
import $1
|
||||
import $1.$2"])
|
||||
if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC
|
||||
then
|
||||
eval "py_cv_mod_$py_mod_var=yes"
|
||||
else
|
||||
eval "py_cv_mod_$py_mod_var=no"
|
||||
fi
|
||||
])
|
||||
py_val=`eval "echo \`echo '$py_cv_mod_'$py_mod_var\`"`
|
||||
if test "x$py_val" != xno; then
|
||||
AC_MSG_RESULT(yes)
|
||||
ifelse([$3], [],, [$3
|
||||
])dnl
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
ifelse([$4], [],, [$4
|
||||
])dnl
|
||||
fi
|
||||
])
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,64 @@
|
|||
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
||||
#undef LT_OBJDIR
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#undef PACKAGE_URL
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define to 1 if the X Window System is missing or not being used. */
|
||||
#undef X_DISPLAY_MISSING
|
|
@ -0,0 +1,348 @@
|
|||
#! /bin/sh
|
||||
# Wrapper for compilers which do not understand '-c -o'.
|
||||
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 1999-2018 Free Software Foundation, Inc.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# 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, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
nl='
|
||||
'
|
||||
|
||||
# We need space, tab and new line, in precisely that order. Quoting is
|
||||
# there to prevent tools from complaining about whitespace usage.
|
||||
IFS=" "" $nl"
|
||||
|
||||
file_conv=
|
||||
|
||||
# func_file_conv build_file lazy
|
||||
# Convert a $build file to $host form and store it in $file
|
||||
# Currently only supports Windows hosts. If the determined conversion
|
||||
# type is listed in (the comma separated) LAZY, no conversion will
|
||||
# take place.
|
||||
func_file_conv ()
|
||||
{
|
||||
file=$1
|
||||
case $file in
|
||||
/ | /[!/]*) # absolute file, and not a UNC file
|
||||
if test -z "$file_conv"; then
|
||||
# lazily determine how to convert abs files
|
||||
case `uname -s` in
|
||||
MINGW*)
|
||||
file_conv=mingw
|
||||
;;
|
||||
CYGWIN*)
|
||||
file_conv=cygwin
|
||||
;;
|
||||
*)
|
||||
file_conv=wine
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
case $file_conv/,$2, in
|
||||
*,$file_conv,*)
|
||||
;;
|
||||
mingw/*)
|
||||
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
|
||||
;;
|
||||
cygwin/*)
|
||||
file=`cygpath -m "$file" || echo "$file"`
|
||||
;;
|
||||
wine/*)
|
||||
file=`winepath -w "$file" || echo "$file"`
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# func_cl_dashL linkdir
|
||||
# Make cl look for libraries in LINKDIR
|
||||
func_cl_dashL ()
|
||||
{
|
||||
func_file_conv "$1"
|
||||
if test -z "$lib_path"; then
|
||||
lib_path=$file
|
||||
else
|
||||
lib_path="$lib_path;$file"
|
||||
fi
|
||||
linker_opts="$linker_opts -LIBPATH:$file"
|
||||
}
|
||||
|
||||
# func_cl_dashl library
|
||||
# Do a library search-path lookup for cl
|
||||
func_cl_dashl ()
|
||||
{
|
||||
lib=$1
|
||||
found=no
|
||||
save_IFS=$IFS
|
||||
IFS=';'
|
||||
for dir in $lib_path $LIB
|
||||
do
|
||||
IFS=$save_IFS
|
||||
if $shared && test -f "$dir/$lib.dll.lib"; then
|
||||
found=yes
|
||||
lib=$dir/$lib.dll.lib
|
||||
break
|
||||
fi
|
||||
if test -f "$dir/$lib.lib"; then
|
||||
found=yes
|
||||
lib=$dir/$lib.lib
|
||||
break
|
||||
fi
|
||||
if test -f "$dir/lib$lib.a"; then
|
||||
found=yes
|
||||
lib=$dir/lib$lib.a
|
||||
break
|
||||
fi
|
||||
done
|
||||
IFS=$save_IFS
|
||||
|
||||
if test "$found" != yes; then
|
||||
lib=$lib.lib
|
||||
fi
|
||||
}
|
||||
|
||||
# func_cl_wrapper cl arg...
|
||||
# Adjust compile command to suit cl
|
||||
func_cl_wrapper ()
|
||||
{
|
||||
# Assume a capable shell
|
||||
lib_path=
|
||||
shared=:
|
||||
linker_opts=
|
||||
for arg
|
||||
do
|
||||
if test -n "$eat"; then
|
||||
eat=
|
||||
else
|
||||
case $1 in
|
||||
-o)
|
||||
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
||||
eat=1
|
||||
case $2 in
|
||||
*.o | *.[oO][bB][jJ])
|
||||
func_file_conv "$2"
|
||||
set x "$@" -Fo"$file"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
func_file_conv "$2"
|
||||
set x "$@" -Fe"$file"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
-I)
|
||||
eat=1
|
||||
func_file_conv "$2" mingw
|
||||
set x "$@" -I"$file"
|
||||
shift
|
||||
;;
|
||||
-I*)
|
||||
func_file_conv "${1#-I}" mingw
|
||||
set x "$@" -I"$file"
|
||||
shift
|
||||
;;
|
||||
-l)
|
||||
eat=1
|
||||
func_cl_dashl "$2"
|
||||
set x "$@" "$lib"
|
||||
shift
|
||||
;;
|
||||
-l*)
|
||||
func_cl_dashl "${1#-l}"
|
||||
set x "$@" "$lib"
|
||||
shift
|
||||
;;
|
||||
-L)
|
||||
eat=1
|
||||
func_cl_dashL "$2"
|
||||
;;
|
||||
-L*)
|
||||
func_cl_dashL "${1#-L}"
|
||||
;;
|
||||
-static)
|
||||
shared=false
|
||||
;;
|
||||
-Wl,*)
|
||||
arg=${1#-Wl,}
|
||||
save_ifs="$IFS"; IFS=','
|
||||
for flag in $arg; do
|
||||
IFS="$save_ifs"
|
||||
linker_opts="$linker_opts $flag"
|
||||
done
|
||||
IFS="$save_ifs"
|
||||
;;
|
||||
-Xlinker)
|
||||
eat=1
|
||||
linker_opts="$linker_opts $2"
|
||||
;;
|
||||
-*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
|
||||
func_file_conv "$1"
|
||||
set x "$@" -Tp"$file"
|
||||
shift
|
||||
;;
|
||||
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
|
||||
func_file_conv "$1" mingw
|
||||
set x "$@" "$file"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
shift
|
||||
done
|
||||
if test -n "$linker_opts"; then
|
||||
linker_opts="-link$linker_opts"
|
||||
fi
|
||||
exec "$@" $linker_opts
|
||||
exit 1
|
||||
}
|
||||
|
||||
eat=
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Wrapper for compilers which do not understand '-c -o'.
|
||||
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
|
||||
arguments, and rename the output as expected.
|
||||
|
||||
If you are trying to build a whole package this is not the
|
||||
right script to run: please start by reading the file 'INSTALL'.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "compile $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
|
||||
icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
|
||||
func_cl_wrapper "$@" # Doesn't return...
|
||||
;;
|
||||
esac
|
||||
|
||||
ofile=
|
||||
cfile=
|
||||
|
||||
for arg
|
||||
do
|
||||
if test -n "$eat"; then
|
||||
eat=
|
||||
else
|
||||
case $1 in
|
||||
-o)
|
||||
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
||||
# So we strip '-o arg' only if arg is an object.
|
||||
eat=1
|
||||
case $2 in
|
||||
*.o | *.obj)
|
||||
ofile=$2
|
||||
;;
|
||||
*)
|
||||
set x "$@" -o "$2"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*.c)
|
||||
cfile=$1
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if test -z "$ofile" || test -z "$cfile"; then
|
||||
# If no '-o' option was seen then we might have been invoked from a
|
||||
# pattern rule where we don't need one. That is ok -- this is a
|
||||
# normal compilation that the losing compiler can handle. If no
|
||||
# '.c' file was seen then we are probably linking. That is also
|
||||
# ok.
|
||||
exec "$@"
|
||||
fi
|
||||
|
||||
# Name of file we expect compiler to create.
|
||||
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
|
||||
|
||||
# Create the lock directory.
|
||||
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
|
||||
# that we are using for the .o file. Also, base the name on the expected
|
||||
# object file name, since that is what matters with a parallel build.
|
||||
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
|
||||
while true; do
|
||||
if mkdir "$lockdir" >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
# FIXME: race condition here if user kills between mkdir and trap.
|
||||
trap "rmdir '$lockdir'; exit 1" 1 2 15
|
||||
|
||||
# Run the compile.
|
||||
"$@"
|
||||
ret=$?
|
||||
|
||||
if test -f "$cofile"; then
|
||||
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
|
||||
elif test -f "${cofile}bj"; then
|
||||
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
|
||||
fi
|
||||
|
||||
rmdir "$lockdir"
|
||||
exit $ret
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,791 @@
|
|||
#! /bin/sh
|
||||
# depcomp - compile a program generating dependencies as side-effects
|
||||
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 1999-2018 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||
as side-effects.
|
||||
|
||||
Environment variables:
|
||||
depmode Dependency tracking mode.
|
||||
source Source file read by 'PROGRAMS ARGS'.
|
||||
object Object file output by 'PROGRAMS ARGS'.
|
||||
DEPDIR directory where to store dependencies.
|
||||
depfile Dependency file to output.
|
||||
tmpdepfile Temporary file to use when outputting dependencies.
|
||||
libtool Whether libtool is used (yes/no).
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "depcomp $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
# Get the directory component of the given path, and save it in the
|
||||
# global variables '$dir'. Note that this directory component will
|
||||
# be either empty or ending with a '/' character. This is deliberate.
|
||||
set_dir_from ()
|
||||
{
|
||||
case $1 in
|
||||
*/*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
|
||||
*) dir=;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Get the suffix-stripped basename of the given path, and save it the
|
||||
# global variable '$base'.
|
||||
set_base_from ()
|
||||
{
|
||||
base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
|
||||
}
|
||||
|
||||
# If no dependency file was actually created by the compiler invocation,
|
||||
# we still have to create a dummy depfile, to avoid errors with the
|
||||
# Makefile "include basename.Plo" scheme.
|
||||
make_dummy_depfile ()
|
||||
{
|
||||
echo "#dummy" > "$depfile"
|
||||
}
|
||||
|
||||
# Factor out some common post-processing of the generated depfile.
|
||||
# Requires the auxiliary global variable '$tmpdepfile' to be set.
|
||||
aix_post_process_depfile ()
|
||||
{
|
||||
# If the compiler actually managed to produce a dependency file,
|
||||
# post-process it.
|
||||
if test -f "$tmpdepfile"; then
|
||||
# Each line is of the form 'foo.o: dependency.h'.
|
||||
# Do two passes, one to just change these to
|
||||
# $object: dependency.h
|
||||
# and one to simply output
|
||||
# dependency.h:
|
||||
# which is needed to avoid the deleted-header problem.
|
||||
{ sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
|
||||
sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
|
||||
} > "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
else
|
||||
make_dummy_depfile
|
||||
fi
|
||||
}
|
||||
|
||||
# A tabulation character.
|
||||
tab=' '
|
||||
# A newline character.
|
||||
nl='
|
||||
'
|
||||
# Character ranges might be problematic outside the C locale.
|
||||
# These definitions help.
|
||||
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
||||
lower=abcdefghijklmnopqrstuvwxyz
|
||||
digits=0123456789
|
||||
alpha=${upper}${lower}
|
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||
depfile=${depfile-`echo "$object" |
|
||||
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||
|
||||
rm -f "$tmpdepfile"
|
||||
|
||||
# Avoid interferences from the environment.
|
||||
gccflag= dashmflag=
|
||||
|
||||
# Some modes work just like other modes, but use different flags. We
|
||||
# parameterize here, but still list the modes in the big case below,
|
||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||
# here, because this file can only contain one case statement.
|
||||
if test "$depmode" = hp; then
|
||||
# HP compiler uses -M and no extra arg.
|
||||
gccflag=-M
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
if test "$depmode" = dashXmstdout; then
|
||||
# This is just like dashmstdout with a different argument.
|
||||
dashmflag=-xM
|
||||
depmode=dashmstdout
|
||||
fi
|
||||
|
||||
cygpath_u="cygpath -u -f -"
|
||||
if test "$depmode" = msvcmsys; then
|
||||
# This is just like msvisualcpp but w/o cygpath translation.
|
||||
# Just convert the backslash-escaped backslashes to single forward
|
||||
# slashes to satisfy depend.m4
|
||||
cygpath_u='sed s,\\\\,/,g'
|
||||
depmode=msvisualcpp
|
||||
fi
|
||||
|
||||
if test "$depmode" = msvc7msys; then
|
||||
# This is just like msvc7 but w/o cygpath translation.
|
||||
# Just convert the backslash-escaped backslashes to single forward
|
||||
# slashes to satisfy depend.m4
|
||||
cygpath_u='sed s,\\\\,/,g'
|
||||
depmode=msvc7
|
||||
fi
|
||||
|
||||
if test "$depmode" = xlc; then
|
||||
# IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
|
||||
gccflag=-qmakedep=gcc,-MF
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
case "$depmode" in
|
||||
gcc3)
|
||||
## gcc 3 implements dependency tracking that does exactly what
|
||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
|
||||
## the command line argument order; so add the flags where they
|
||||
## appear in depend2.am. Note that the slowdown incurred here
|
||||
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
|
||||
*) set fnord "$@" "$arg" ;;
|
||||
esac
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
done
|
||||
"$@"
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
mv "$tmpdepfile" "$depfile"
|
||||
;;
|
||||
|
||||
gcc)
|
||||
## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
|
||||
## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
|
||||
## (see the conditional assignment to $gccflag above).
|
||||
## There are various ways to get dependency output from gcc. Here's
|
||||
## why we pick this rather obscure method:
|
||||
## - Don't want to use -MD because we'd like the dependencies to end
|
||||
## up in a subdir. Having to rename by hand is ugly.
|
||||
## (We might end up doing this anyway to support other compilers.)
|
||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||
## -MM, not -M (despite what the docs say). Also, it might not be
|
||||
## supported by the other compilers which use the 'gcc' depmode.
|
||||
## - Using -M directly means running the compiler twice (even worse
|
||||
## than renaming).
|
||||
if test -z "$gccflag"; then
|
||||
gccflag=-MD,
|
||||
fi
|
||||
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
# The second -e expression handles DOS-style file names with drive
|
||||
# letters.
|
||||
sed -e 's/^[^:]*: / /' \
|
||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||
## This next piece of magic avoids the "deleted header file" problem.
|
||||
## The problem is that when a header file which appears in a .P file
|
||||
## is deleted, the dependency causes make to die (because there is
|
||||
## typically no way to rebuild the header). We avoid this by adding
|
||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||
## this for us directly.
|
||||
## Some versions of gcc put a space before the ':'. On the theory
|
||||
## that the space means something, we add a space to the output as
|
||||
## well. hp depmode also adds that space, but also prefixes the VPATH
|
||||
## to the object. Take care to not repeat it in the output.
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
tr ' ' "$nl" < "$tmpdepfile" \
|
||||
| sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
|
||||
| sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
sgi)
|
||||
if test "$libtool" = yes; then
|
||||
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
||||
else
|
||||
"$@" -MDupdate "$tmpdepfile"
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
|
||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||
echo "$object : \\" > "$depfile"
|
||||
# Clip off the initial element (the dependent). Don't try to be
|
||||
# clever and replace this with sed code, as IRIX sed won't handle
|
||||
# lines with more than a fixed number of characters (4096 in
|
||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||
# the IRIX cc adds comments like '#:fec' to the end of the
|
||||
# dependency line.
|
||||
tr ' ' "$nl" < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
|
||||
| tr "$nl" ' ' >> "$depfile"
|
||||
echo >> "$depfile"
|
||||
# The second pass generates a dummy entry for each header file.
|
||||
tr ' ' "$nl" < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||
>> "$depfile"
|
||||
else
|
||||
make_dummy_depfile
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
xlc)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
aix)
|
||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||
# in a .u file. In older versions, this file always lives in the
|
||||
# current directory. Also, the AIX compiler puts '$object:' at the
|
||||
# start of each line; $object doesn't have directory information.
|
||||
# Version 6 uses the directory in both cases.
|
||||
set_dir_from "$object"
|
||||
set_base_from "$object"
|
||||
if test "$libtool" = yes; then
|
||||
tmpdepfile1=$dir$base.u
|
||||
tmpdepfile2=$base.u
|
||||
tmpdepfile3=$dir.libs/$base.u
|
||||
"$@" -Wc,-M
|
||||
else
|
||||
tmpdepfile1=$dir$base.u
|
||||
tmpdepfile2=$dir$base.u
|
||||
tmpdepfile3=$dir$base.u
|
||||
"$@" -M
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
aix_post_process_depfile
|
||||
;;
|
||||
|
||||
tcc)
|
||||
# tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
|
||||
# FIXME: That version still under development at the moment of writing.
|
||||
# Make that this statement remains true also for stable, released
|
||||
# versions.
|
||||
# It will wrap lines (doesn't matter whether long or short) with a
|
||||
# trailing '\', as in:
|
||||
#
|
||||
# foo.o : \
|
||||
# foo.c \
|
||||
# foo.h \
|
||||
#
|
||||
# It will put a trailing '\' even on the last line, and will use leading
|
||||
# spaces rather than leading tabs (at least since its commit 0394caf7
|
||||
# "Emit spaces for -MD").
|
||||
"$@" -MD -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
|
||||
# We have to change lines of the first kind to '$object: \'.
|
||||
sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
|
||||
# And for each line of the second kind, we have to emit a 'dep.h:'
|
||||
# dummy dependency, to avoid the deleted-header problem.
|
||||
sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
## The order of this option in the case statement is important, since the
|
||||
## shell code in configure will try each of these formats in the order
|
||||
## listed in this file. A plain '-MD' option would be understood by many
|
||||
## compilers, so we must ensure this comes after the gcc and icc options.
|
||||
pgcc)
|
||||
# Portland's C compiler understands '-MD'.
|
||||
# Will always output deps to 'file.d' where file is the root name of the
|
||||
# source file under compilation, even if file resides in a subdirectory.
|
||||
# The object file name does not affect the name of the '.d' file.
|
||||
# pgcc 10.2 will output
|
||||
# foo.o: sub/foo.c sub/foo.h
|
||||
# and will wrap long lines using '\' :
|
||||
# foo.o: sub/foo.c ... \
|
||||
# sub/foo.h ... \
|
||||
# ...
|
||||
set_dir_from "$object"
|
||||
# Use the source, not the object, to determine the base name, since
|
||||
# that's sadly what pgcc will do too.
|
||||
set_base_from "$source"
|
||||
tmpdepfile=$base.d
|
||||
|
||||
# For projects that build the same source file twice into different object
|
||||
# files, the pgcc approach of using the *source* file root name can cause
|
||||
# problems in parallel builds. Use a locking strategy to avoid stomping on
|
||||
# the same $tmpdepfile.
|
||||
lockdir=$base.d-lock
|
||||
trap "
|
||||
echo '$0: caught signal, cleaning up...' >&2
|
||||
rmdir '$lockdir'
|
||||
exit 1
|
||||
" 1 2 13 15
|
||||
numtries=100
|
||||
i=$numtries
|
||||
while test $i -gt 0; do
|
||||
# mkdir is a portable test-and-set.
|
||||
if mkdir "$lockdir" 2>/dev/null; then
|
||||
# This process acquired the lock.
|
||||
"$@" -MD
|
||||
stat=$?
|
||||
# Release the lock.
|
||||
rmdir "$lockdir"
|
||||
break
|
||||
else
|
||||
# If the lock is being held by a different process, wait
|
||||
# until the winning process is done or we timeout.
|
||||
while test -d "$lockdir" && test $i -gt 0; do
|
||||
sleep 1
|
||||
i=`expr $i - 1`
|
||||
done
|
||||
fi
|
||||
i=`expr $i - 1`
|
||||
done
|
||||
trap - 1 2 13 15
|
||||
if test $i -le 0; then
|
||||
echo "$0: failed to acquire lock after $numtries attempts" >&2
|
||||
echo "$0: check lockdir '$lockdir'" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each line is of the form `foo.o: dependent.h',
|
||||
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
|
||||
| sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp2)
|
||||
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
|
||||
# compilers, which have integrated preprocessors. The correct option
|
||||
# to use with these is +Maked; it writes dependencies to a file named
|
||||
# 'foo.d', which lands next to the object file, wherever that
|
||||
# happens to be.
|
||||
# Much of this is similar to the tru64 case; see comments there.
|
||||
set_dir_from "$object"
|
||||
set_base_from "$object"
|
||||
if test "$libtool" = yes; then
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir.libs/$base.d
|
||||
"$@" -Wc,+Maked
|
||||
else
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
"$@" +Maked
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
|
||||
# Add 'dependent.h:' lines.
|
||||
sed -ne '2,${
|
||||
s/^ *//
|
||||
s/ \\*$//
|
||||
s/$/:/
|
||||
p
|
||||
}' "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
make_dummy_depfile
|
||||
fi
|
||||
rm -f "$tmpdepfile" "$tmpdepfile2"
|
||||
;;
|
||||
|
||||
tru64)
|
||||
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||
# effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
|
||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||
# dependencies in 'foo.d' instead, so we check for that too.
|
||||
# Subdirectories are respected.
|
||||
set_dir_from "$object"
|
||||
set_base_from "$object"
|
||||
|
||||
if test "$libtool" = yes; then
|
||||
# Libtool generates 2 separate objects for the 2 libraries. These
|
||||
# two compilations output dependencies in $dir.libs/$base.o.d and
|
||||
# in $dir$base.o.d. We have to check for both files, because
|
||||
# one of the two compilations can be disabled. We should prefer
|
||||
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
||||
# automatically cleaned when .libs/ is deleted, while ignoring
|
||||
# the former would cause a distcleancheck panic.
|
||||
tmpdepfile1=$dir$base.o.d # libtool 1.5
|
||||
tmpdepfile2=$dir.libs/$base.o.d # Likewise.
|
||||
tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
|
||||
"$@" -Wc,-MD
|
||||
else
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
tmpdepfile3=$dir$base.d
|
||||
"$@" -MD
|
||||
fi
|
||||
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
# Same post-processing that is required for AIX mode.
|
||||
aix_post_process_depfile
|
||||
;;
|
||||
|
||||
msvc7)
|
||||
if test "$libtool" = yes; then
|
||||
showIncludes=-Wc,-showIncludes
|
||||
else
|
||||
showIncludes=-showIncludes
|
||||
fi
|
||||
"$@" $showIncludes > "$tmpdepfile"
|
||||
stat=$?
|
||||
grep -v '^Note: including file: ' "$tmpdepfile"
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
# The first sed program below extracts the file names and escapes
|
||||
# backslashes for cygpath. The second sed program outputs the file
|
||||
# name when reading, but also accumulates all include files in the
|
||||
# hold buffer in order to output them again at the end. This only
|
||||
# works with sed implementations that can handle large buffers.
|
||||
sed < "$tmpdepfile" -n '
|
||||
/^Note: including file: *\(.*\)/ {
|
||||
s//\1/
|
||||
s/\\/\\\\/g
|
||||
p
|
||||
}' | $cygpath_u | sort -u | sed -n '
|
||||
s/ /\\ /g
|
||||
s/\(.*\)/'"$tab"'\1 \\/p
|
||||
s/.\(.*\) \\/\1:/
|
||||
H
|
||||
$ {
|
||||
s/.*/'"$tab"'/
|
||||
G
|
||||
p
|
||||
}' >> "$depfile"
|
||||
echo >> "$depfile" # make sure the fragment doesn't end with a backslash
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvc7msys)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
#nosideeffect)
|
||||
# This comment above is used by automake to tell side-effect
|
||||
# dependency tracking mechanisms from slower ones.
|
||||
|
||||
dashmstdout)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove '-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
test -z "$dashmflag" && dashmflag=-M
|
||||
# Require at least two characters before searching for ':'
|
||||
# in the target name. This is to cope with DOS-style filenames:
|
||||
# a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
|
||||
"$@" $dashmflag |
|
||||
sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process this sed invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
tr ' ' "$nl" < "$tmpdepfile" \
|
||||
| sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
|
||||
| sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
dashXmstdout)
|
||||
# This case only exists to satisfy depend.m4. It is never actually
|
||||
# run, as this mode is specially recognized in the preamble.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
makedepend)
|
||||
"$@" || exit $?
|
||||
# Remove any Libtool call
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
# X makedepend
|
||||
shift
|
||||
cleared=no eat=no
|
||||
for arg
|
||||
do
|
||||
case $cleared in
|
||||
no)
|
||||
set ""; shift
|
||||
cleared=yes ;;
|
||||
esac
|
||||
if test $eat = yes; then
|
||||
eat=no
|
||||
continue
|
||||
fi
|
||||
case "$arg" in
|
||||
-D*|-I*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
# Strip any option that makedepend may not understand. Remove
|
||||
# the object too, otherwise makedepend will parse it as a source file.
|
||||
-arch)
|
||||
eat=yes ;;
|
||||
-*|$object)
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
esac
|
||||
done
|
||||
obj_suffix=`echo "$object" | sed 's/^.*\././'`
|
||||
touch "$tmpdepfile"
|
||||
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||
rm -f "$depfile"
|
||||
# makedepend may prepend the VPATH from the source file name to the object.
|
||||
# No need to regex-escape $object, excess matching of '.' is harmless.
|
||||
sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process the last invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed '1,2d' "$tmpdepfile" \
|
||||
| tr ' ' "$nl" \
|
||||
| sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
|
||||
| sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||
;;
|
||||
|
||||
cpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove '-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
"$@" -E \
|
||||
| sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||
| sed '$ s: \\$::' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
cat < "$tmpdepfile" >> "$depfile"
|
||||
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvisualcpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case "$arg" in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
||||
set fnord "$@"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
"$@" -E 2>/dev/null |
|
||||
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
|
||||
echo "$tab" >> "$depfile"
|
||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvcmsys)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
none)
|
||||
exec "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown depmode $depmode" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
|
@ -0,0 +1,518 @@
|
|||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2018-03-11.20; # UTC
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
#
|
||||
# Copyright (C) 1994 X Consortium
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Except as contained in this notice, the name of the X Consortium shall not
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||
# ings in this Software without prior written authorization from the X Consor-
|
||||
# tium.
|
||||
#
|
||||
#
|
||||
# FSF changes to this file are in the public domain.
|
||||
#
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||
# 'make' implicit rules from creating a file called install from it
|
||||
# when there is no Makefile.
|
||||
#
|
||||
# This script is compatible with the BSD install script, but was written
|
||||
# from scratch.
|
||||
|
||||
tab=' '
|
||||
nl='
|
||||
'
|
||||
IFS=" $tab$nl"
|
||||
|
||||
# Set DOITPROG to "echo" to test this script.
|
||||
|
||||
doit=${DOITPROG-}
|
||||
doit_exec=${doit:-exec}
|
||||
|
||||
# Put in absolute file names if you don't have them in your path;
|
||||
# or use environment vars.
|
||||
|
||||
chgrpprog=${CHGRPPROG-chgrp}
|
||||
chmodprog=${CHMODPROG-chmod}
|
||||
chownprog=${CHOWNPROG-chown}
|
||||
cmpprog=${CMPPROG-cmp}
|
||||
cpprog=${CPPROG-cp}
|
||||
mkdirprog=${MKDIRPROG-mkdir}
|
||||
mvprog=${MVPROG-mv}
|
||||
rmprog=${RMPROG-rm}
|
||||
stripprog=${STRIPPROG-strip}
|
||||
|
||||
posix_mkdir=
|
||||
|
||||
# Desired mode of installed file.
|
||||
mode=0755
|
||||
|
||||
chgrpcmd=
|
||||
chmodcmd=$chmodprog
|
||||
chowncmd=
|
||||
mvcmd=$mvprog
|
||||
rmcmd="$rmprog -f"
|
||||
stripcmd=
|
||||
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
dst_arg=
|
||||
|
||||
copy_on_change=false
|
||||
is_target_a_directory=possibly
|
||||
|
||||
usage="\
|
||||
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||
or: $0 [OPTION]... -d DIRECTORIES...
|
||||
|
||||
In the 1st form, copy SRCFILE to DSTFILE.
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||
In the 4th, create DIRECTORIES.
|
||||
|
||||
Options:
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
|
||||
-c (ignored)
|
||||
-C install only if different (preserve the last data modification time)
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-s $stripprog installed files.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
||||
RMPROG STRIPPROG
|
||||
"
|
||||
|
||||
while test $# -ne 0; do
|
||||
case $1 in
|
||||
-c) ;;
|
||||
|
||||
-C) copy_on_change=true;;
|
||||
|
||||
-d) dir_arg=true;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift;;
|
||||
|
||||
--help) echo "$usage"; exit $?;;
|
||||
|
||||
-m) mode=$2
|
||||
case $mode in
|
||||
*' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
|
||||
echo "$0: invalid mode: $mode" >&2
|
||||
exit 1;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift;;
|
||||
|
||||
-s) stripcmd=$stripprog;;
|
||||
|
||||
-t)
|
||||
is_target_a_directory=always
|
||||
dst_arg=$2
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $dst_arg in
|
||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-T) is_target_a_directory=never;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit $?;;
|
||||
|
||||
--) shift
|
||||
break;;
|
||||
|
||||
-*) echo "$0: invalid option: $1" >&2
|
||||
exit 1;;
|
||||
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# We allow the use of options -d and -T together, by making -d
|
||||
# take the precedence; this is for compatibility with GNU install.
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
if test -n "$dst_arg"; then
|
||||
echo "$0: target directory not allowed when installing a directory." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
||||
# When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||
for arg
|
||||
do
|
||||
if test -n "$dst_arg"; then
|
||||
# $@ is not empty: it contains at least $arg.
|
||||
set fnord "$@" "$dst_arg"
|
||||
shift # fnord
|
||||
fi
|
||||
shift # arg
|
||||
dst_arg=$arg
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $dst_arg in
|
||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
if test $# -eq 0; then
|
||||
if test -z "$dir_arg"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
# It's OK to call 'install-sh -d' without argument.
|
||||
# This can happen when creating conditional directories.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
if test $# -gt 1 || test "$is_target_a_directory" = always; then
|
||||
if test ! -d "$dst_arg"; then
|
||||
echo "$0: $dst_arg: Is not a directory." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
do_exit='(exit $ret); exit $ret'
|
||||
trap "ret=129; $do_exit" 1
|
||||
trap "ret=130; $do_exit" 2
|
||||
trap "ret=141; $do_exit" 13
|
||||
trap "ret=143; $do_exit" 15
|
||||
|
||||
# Set umask so as not to create temps with too-generous modes.
|
||||
# However, 'strip' requires both read and write access to temps.
|
||||
case $mode in
|
||||
# Optimize common cases.
|
||||
*644) cp_umask=133;;
|
||||
*755) cp_umask=22;;
|
||||
|
||||
*[0-7])
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw='% 200'
|
||||
fi
|
||||
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
||||
*)
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw=,u+rw
|
||||
fi
|
||||
cp_umask=$mode$u_plus_rw;;
|
||||
esac
|
||||
fi
|
||||
|
||||
for src
|
||||
do
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $src in
|
||||
-* | [=\(\)!]) src=./$src;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
dstdir=$dst
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
else
|
||||
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$dst_arg"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
dst=$dst_arg
|
||||
|
||||
# If destination is a directory, append the input filename.
|
||||
if test -d "$dst"; then
|
||||
if test "$is_target_a_directory" = never; then
|
||||
echo "$0: $dst_arg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dstdir=$dst
|
||||
dstbase=`basename "$src"`
|
||||
case $dst in
|
||||
*/) dst=$dst$dstbase;;
|
||||
*) dst=$dst/$dstbase;;
|
||||
esac
|
||||
dstdir_status=0
|
||||
else
|
||||
dstdir=`dirname "$dst"`
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
case $dstdir in
|
||||
*/) dstdirslash=$dstdir;;
|
||||
*) dstdirslash=$dstdir/;;
|
||||
esac
|
||||
|
||||
obsolete_mkdir_used=false
|
||||
|
||||
if test $dstdir_status != 0; then
|
||||
case $posix_mkdir in
|
||||
'')
|
||||
# Create intermediate dirs using mode 755 as modified by the umask.
|
||||
# This is like FreeBSD 'install' as of 1997-10-28.
|
||||
umask=`umask`
|
||||
case $stripcmd.$umask in
|
||||
# Optimize common cases.
|
||||
*[2367][2367]) mkdir_umask=$umask;;
|
||||
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
|
||||
|
||||
*[0-7])
|
||||
mkdir_umask=`expr $umask + 22 \
|
||||
- $umask % 100 % 40 + $umask % 20 \
|
||||
- $umask % 10 % 4 + $umask % 2
|
||||
`;;
|
||||
*) mkdir_umask=$umask,go-w;;
|
||||
esac
|
||||
|
||||
# With -d, create the new directory with the user-specified mode.
|
||||
# Otherwise, rely on $mkdir_umask.
|
||||
if test -n "$dir_arg"; then
|
||||
mkdir_mode=-m$mode
|
||||
else
|
||||
mkdir_mode=
|
||||
fi
|
||||
|
||||
posix_mkdir=false
|
||||
case $umask in
|
||||
*[123567][0-7][0-7])
|
||||
# POSIX mkdir -p sets u+wx bits regardless of umask, which
|
||||
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
|
||||
;;
|
||||
*)
|
||||
# Note that $RANDOM variable is not portable (e.g. dash); Use it
|
||||
# here however when possible just to lower collision chance.
|
||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||
|
||||
trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
|
||||
|
||||
# Because "mkdir -p" follows existing symlinks and we likely work
|
||||
# directly in world-writeable /tmp, make sure that the '$tmpdir'
|
||||
# directory is successfully created first before we actually test
|
||||
# 'mkdir -p' feature.
|
||||
if (umask $mkdir_umask &&
|
||||
$mkdirprog $mkdir_mode "$tmpdir" &&
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
|
||||
then
|
||||
if test -z "$dir_arg" || {
|
||||
# Check for POSIX incompatibilities with -m.
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||
# other-writable bit of parent directory when it shouldn't.
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||
test_tmpdir="$tmpdir/a"
|
||||
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
|
||||
case $ls_ld_tmpdir in
|
||||
d????-?r-*) different_mode=700;;
|
||||
d????-?--*) different_mode=755;;
|
||||
*) false;;
|
||||
esac &&
|
||||
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||
}
|
||||
}
|
||||
then posix_mkdir=:
|
||||
fi
|
||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
|
||||
else
|
||||
# Remove any dirs left behind by ancient mkdir implementations.
|
||||
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
|
||||
fi
|
||||
trap '' 0;;
|
||||
esac;;
|
||||
esac
|
||||
|
||||
if
|
||||
$posix_mkdir && (
|
||||
umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||
)
|
||||
then :
|
||||
else
|
||||
|
||||
# The umask is ridiculous, or mkdir does not conform to POSIX,
|
||||
# or it failed possibly due to a race condition. Create the
|
||||
# directory the slow way, step by step, checking for races as we go.
|
||||
|
||||
case $dstdir in
|
||||
/*) prefix='/';;
|
||||
[-=\(\)!]*) prefix='./';;
|
||||
*) prefix='';;
|
||||
esac
|
||||
|
||||
oIFS=$IFS
|
||||
IFS=/
|
||||
set -f
|
||||
set fnord $dstdir
|
||||
shift
|
||||
set +f
|
||||
IFS=$oIFS
|
||||
|
||||
prefixes=
|
||||
|
||||
for d
|
||||
do
|
||||
test X"$d" = X && continue
|
||||
|
||||
prefix=$prefix$d
|
||||
if test -d "$prefix"; then
|
||||
prefixes=
|
||||
else
|
||||
if $posix_mkdir; then
|
||||
(umask=$mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||
# Don't fail if two instances are running concurrently.
|
||||
test -d "$prefix" || exit 1
|
||||
else
|
||||
case $prefix in
|
||||
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||
*) qprefix=$prefix;;
|
||||
esac
|
||||
prefixes="$prefixes '$qprefix'"
|
||||
fi
|
||||
fi
|
||||
prefix=$prefix/
|
||||
done
|
||||
|
||||
if test -n "$prefixes"; then
|
||||
# Don't fail if two instances are running concurrently.
|
||||
(umask $mkdir_umask &&
|
||||
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||
test -d "$dstdir" || exit 1
|
||||
obsolete_mkdir_used=true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
||||
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
||||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
||||
else
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=${dstdirslash}_inst.$$_
|
||||
rmtmp=${dstdirslash}_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
|
||||
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
|
||||
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
|
||||
|
||||
# If -C, don't bother to copy if it wouldn't change the file.
|
||||
if $copy_on_change &&
|
||||
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
||||
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
||||
set -f &&
|
||||
set X $old && old=:$2:$4:$5:$6 &&
|
||||
set X $new && new=:$2:$4:$5:$6 &&
|
||||
set +f &&
|
||||
test "$old" = "$new" &&
|
||||
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
||||
then
|
||||
rm -f "$dsttmp"
|
||||
else
|
||||
# Rename the file to the real destination.
|
||||
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
||||
|
||||
# The rename failed, perhaps because mv can't rename something else
|
||||
# to itself, or perhaps because mv is so ancient that it does not
|
||||
# support -f.
|
||||
{
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
test ! -f "$dst" ||
|
||||
$doit $rmcmd -f "$dst" 2>/dev/null ||
|
||||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
|
||||
} ||
|
||||
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||
(exit 1); exit 1
|
||||
}
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dst"
|
||||
}
|
||||
fi || exit 1
|
||||
|
||||
trap '' 0
|
||||
fi
|
||||
done
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,215 @@
|
|||
#! /bin/sh
|
||||
# Common wrapper for a few potentially missing GNU programs.
|
||||
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 1996-2018 Free Software Foundation, Inc.
|
||||
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# 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, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
if test $# -eq 0; then
|
||||
echo 1>&2 "Try '$0 --help' for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case $1 in
|
||||
|
||||
--is-lightweight)
|
||||
# Used by our autoconf macros to check whether the available missing
|
||||
# script is modern enough.
|
||||
exit 0
|
||||
;;
|
||||
|
||||
--run)
|
||||
# Back-compat with the calling convention used by older automake.
|
||||
shift
|
||||
;;
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||
|
||||
Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
|
||||
to PROGRAM being missing or too old.
|
||||
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal autoconf autoheader autom4te automake makeinfo
|
||||
bison yacc flex lex help2man
|
||||
|
||||
Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
|
||||
'g' are ignored when checking the name.
|
||||
|
||||
Send bug reports to <bug-automake@gnu.org>."
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing $scriptversion (GNU Automake)"
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: unknown '$1' option"
|
||||
echo 1>&2 "Try '$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# Run the given program, remember its exit status.
|
||||
"$@"; st=$?
|
||||
|
||||
# If it succeeded, we are done.
|
||||
test $st -eq 0 && exit 0
|
||||
|
||||
# Also exit now if we it failed (or wasn't found), and '--version' was
|
||||
# passed; such an option is passed most likely to detect whether the
|
||||
# program is present and works.
|
||||
case $2 in --version|--help) exit $st;; esac
|
||||
|
||||
# Exit code 63 means version mismatch. This often happens when the user
|
||||
# tries to use an ancient version of a tool on a file that requires a
|
||||
# minimum version.
|
||||
if test $st -eq 63; then
|
||||
msg="probably too old"
|
||||
elif test $st -eq 127; then
|
||||
# Program was missing.
|
||||
msg="missing on your system"
|
||||
else
|
||||
# Program was found and executed, but failed. Give up.
|
||||
exit $st
|
||||
fi
|
||||
|
||||
perl_URL=https://www.perl.org/
|
||||
flex_URL=https://github.com/westes/flex
|
||||
gnu_software_URL=https://www.gnu.org/software
|
||||
|
||||
program_details ()
|
||||
{
|
||||
case $1 in
|
||||
aclocal|automake)
|
||||
echo "The '$1' program is part of the GNU Automake package:"
|
||||
echo "<$gnu_software_URL/automake>"
|
||||
echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
|
||||
echo "<$gnu_software_URL/autoconf>"
|
||||
echo "<$gnu_software_URL/m4/>"
|
||||
echo "<$perl_URL>"
|
||||
;;
|
||||
autoconf|autom4te|autoheader)
|
||||
echo "The '$1' program is part of the GNU Autoconf package:"
|
||||
echo "<$gnu_software_URL/autoconf/>"
|
||||
echo "It also requires GNU m4 and Perl in order to run:"
|
||||
echo "<$gnu_software_URL/m4/>"
|
||||
echo "<$perl_URL>"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
give_advice ()
|
||||
{
|
||||
# Normalize program name to check for.
|
||||
normalized_program=`echo "$1" | sed '
|
||||
s/^gnu-//; t
|
||||
s/^gnu//; t
|
||||
s/^g//; t'`
|
||||
|
||||
printf '%s\n' "'$1' is $msg."
|
||||
|
||||
configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
|
||||
case $normalized_program in
|
||||
autoconf*)
|
||||
echo "You should only need it if you modified 'configure.ac',"
|
||||
echo "or m4 files included by it."
|
||||
program_details 'autoconf'
|
||||
;;
|
||||
autoheader*)
|
||||
echo "You should only need it if you modified 'acconfig.h' or"
|
||||
echo "$configure_deps."
|
||||
program_details 'autoheader'
|
||||
;;
|
||||
automake*)
|
||||
echo "You should only need it if you modified 'Makefile.am' or"
|
||||
echo "$configure_deps."
|
||||
program_details 'automake'
|
||||
;;
|
||||
aclocal*)
|
||||
echo "You should only need it if you modified 'acinclude.m4' or"
|
||||
echo "$configure_deps."
|
||||
program_details 'aclocal'
|
||||
;;
|
||||
autom4te*)
|
||||
echo "You might have modified some maintainer files that require"
|
||||
echo "the 'autom4te' program to be rebuilt."
|
||||
program_details 'autom4te'
|
||||
;;
|
||||
bison*|yacc*)
|
||||
echo "You should only need it if you modified a '.y' file."
|
||||
echo "You may want to install the GNU Bison package:"
|
||||
echo "<$gnu_software_URL/bison/>"
|
||||
;;
|
||||
lex*|flex*)
|
||||
echo "You should only need it if you modified a '.l' file."
|
||||
echo "You may want to install the Fast Lexical Analyzer package:"
|
||||
echo "<$flex_URL>"
|
||||
;;
|
||||
help2man*)
|
||||
echo "You should only need it if you modified a dependency" \
|
||||
"of a man page."
|
||||
echo "You may want to install the GNU Help2man package:"
|
||||
echo "<$gnu_software_URL/help2man/>"
|
||||
;;
|
||||
makeinfo*)
|
||||
echo "You should only need it if you modified a '.texi' file, or"
|
||||
echo "any other file indirectly affecting the aspect of the manual."
|
||||
echo "You might want to install the Texinfo package:"
|
||||
echo "<$gnu_software_URL/texinfo/>"
|
||||
echo "The spurious makeinfo call might also be the consequence of"
|
||||
echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
|
||||
echo "want to install GNU make:"
|
||||
echo "<$gnu_software_URL/make/>"
|
||||
;;
|
||||
*)
|
||||
echo "You might have modified some files without having the proper"
|
||||
echo "tools for further handling them. Check the 'README' file, it"
|
||||
echo "often tells you about the needed prerequisites for installing"
|
||||
echo "this package. You may also peek at any GNU archive site, in"
|
||||
echo "case some other package contains this missing '$1' program."
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
give_advice "$1" | sed -e '1s/^/WARNING: /' \
|
||||
-e '2,$s/^/ /' >&2
|
||||
|
||||
# Propagate the correct exit status (expected to be 127 for a program
|
||||
# not found, 63 for a program that failed due to version mismatch).
|
||||
exit $st
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
|
@ -0,0 +1,170 @@
|
|||
#!/bin/sh
|
||||
# py-compile - Compile a Python program
|
||||
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 2000-2018 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
if [ -z "$PYTHON" ]; then
|
||||
PYTHON=python
|
||||
fi
|
||||
|
||||
me=py-compile
|
||||
|
||||
usage_error ()
|
||||
{
|
||||
echo "$me: $*" >&2
|
||||
echo "Try '$me --help' for more information." >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
basedir=
|
||||
destdir=
|
||||
while test $# -ne 0; do
|
||||
case "$1" in
|
||||
--basedir)
|
||||
if test $# -lt 2; then
|
||||
usage_error "option '--basedir' requires an argument"
|
||||
else
|
||||
basedir=$2
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
--destdir)
|
||||
if test $# -lt 2; then
|
||||
usage_error "option '--destdir' requires an argument"
|
||||
else
|
||||
destdir=$2
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
cat <<\EOF
|
||||
Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..."
|
||||
|
||||
Byte compile some python scripts FILES. Use --destdir to specify any
|
||||
leading directory path to the FILES that you don't want to include in the
|
||||
byte compiled file. Specify --basedir for any additional path information you
|
||||
do want to be shown in the byte compiled file.
|
||||
|
||||
Example:
|
||||
py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v|--version)
|
||||
echo "$me $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
;;
|
||||
-*)
|
||||
usage_error "unrecognized option '$1'"
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
files=$*
|
||||
if test -z "$files"; then
|
||||
usage_error "no files given"
|
||||
fi
|
||||
|
||||
# if basedir was given, then it should be prepended to filenames before
|
||||
# byte compilation.
|
||||
if [ -z "$basedir" ]; then
|
||||
pathtrans="path = file"
|
||||
else
|
||||
pathtrans="path = os.path.join('$basedir', file)"
|
||||
fi
|
||||
|
||||
# if destdir was given, then it needs to be prepended to the filename to
|
||||
# byte compile but not go into the compiled file.
|
||||
if [ -z "$destdir" ]; then
|
||||
filetrans="filepath = path"
|
||||
else
|
||||
filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)"
|
||||
fi
|
||||
|
||||
$PYTHON -c "
|
||||
import sys, os, py_compile, imp
|
||||
|
||||
files = '''$files'''
|
||||
|
||||
sys.stdout.write('Byte-compiling python modules...\n')
|
||||
for file in files.split():
|
||||
$pathtrans
|
||||
$filetrans
|
||||
if not os.path.exists(filepath) or not (len(filepath) >= 3
|
||||
and filepath[-3:] == '.py'):
|
||||
continue
|
||||
sys.stdout.write(file)
|
||||
sys.stdout.flush()
|
||||
if hasattr(imp, 'get_tag'):
|
||||
py_compile.compile(filepath, imp.cache_from_source(filepath), path)
|
||||
else:
|
||||
py_compile.compile(filepath, filepath + 'c', path)
|
||||
sys.stdout.write('\n')" || exit $?
|
||||
|
||||
# this will fail for python < 1.5, but that doesn't matter ...
|
||||
$PYTHON -O -c "
|
||||
import sys, os, py_compile, imp
|
||||
|
||||
# pypy does not use .pyo optimization
|
||||
if hasattr(sys, 'pypy_translation_info'):
|
||||
sys.exit(0)
|
||||
|
||||
files = '''$files'''
|
||||
sys.stdout.write('Byte-compiling python modules (optimized versions) ...\n')
|
||||
for file in files.split():
|
||||
$pathtrans
|
||||
$filetrans
|
||||
if not os.path.exists(filepath) or not (len(filepath) >= 3
|
||||
and filepath[-3:] == '.py'):
|
||||
continue
|
||||
sys.stdout.write(file)
|
||||
sys.stdout.flush()
|
||||
if hasattr(imp, 'get_tag'):
|
||||
py_compile.compile(filepath, imp.cache_from_source(filepath, False), path)
|
||||
else:
|
||||
py_compile.compile(filepath, filepath + 'o', path)
|
||||
sys.stdout.write('\n')" 2>/dev/null || :
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
|
@ -0,0 +1,153 @@
|
|||
#! /bin/sh
|
||||
# test-driver - basic testsuite driver script.
|
||||
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 2011-2018 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
# Make unconditional expansion of undefined variables an error. This
|
||||
# helps a lot in preventing typo-related bugs.
|
||||
set -u
|
||||
|
||||
usage_error ()
|
||||
{
|
||||
echo "$0: $*" >&2
|
||||
print_usage >&2
|
||||
exit 2
|
||||
}
|
||||
|
||||
print_usage ()
|
||||
{
|
||||
cat <<END
|
||||
Usage:
|
||||
test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
|
||||
[--expect-failure={yes|no}] [--color-tests={yes|no}]
|
||||
[--enable-hard-errors={yes|no}] [--]
|
||||
TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
|
||||
The '--test-name', '--log-file' and '--trs-file' options are mandatory.
|
||||
END
|
||||
}
|
||||
|
||||
test_name= # Used for reporting.
|
||||
log_file= # Where to save the output of the test script.
|
||||
trs_file= # Where to save the metadata of the test run.
|
||||
expect_failure=no
|
||||
color_tests=no
|
||||
enable_hard_errors=yes
|
||||
while test $# -gt 1; do
|
||||
arg=${1%=*}
|
||||
val=${1#*=}
|
||||
if [ $arg = $val ]; then
|
||||
val=$2
|
||||
shift
|
||||
fi
|
||||
case $arg in
|
||||
--help) print_usage; exit $?;;
|
||||
--version) echo "test-driver $scriptversion"; exit $?;;
|
||||
--test-name) test_name=$val;;
|
||||
--log-file) log_file=$val;;
|
||||
--trs-file) trs_file=$val;;
|
||||
--color-tests) color_tests=$val;;
|
||||
--expect-failure) expect_failure=$val;;
|
||||
--enable-hard-errors) enable_hard_errors=$val;;
|
||||
--) break;;
|
||||
-*) usage_error "invalid option: '$1'";;
|
||||
esac
|
||||
[ $arg != $val ] && shift
|
||||
done
|
||||
|
||||
missing_opts=
|
||||
test x"$test_name" = x && missing_opts="$missing_opts --test-name"
|
||||
test x"$log_file" = x && missing_opts="$missing_opts --log-file"
|
||||
test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
|
||||
if test x"$missing_opts" != x; then
|
||||
usage_error "the following mandatory options are missing:$missing_opts"
|
||||
fi
|
||||
|
||||
if test $# -eq 0; then
|
||||
usage_error "missing argument"
|
||||
fi
|
||||
|
||||
if test $color_tests = yes; then
|
||||
# Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
|
||||
red='[0;31m' # Red.
|
||||
grn='[0;32m' # Green.
|
||||
lgn='[1;32m' # Light green.
|
||||
blu='[1;34m' # Blue.
|
||||
mgn='[0;35m' # Magenta.
|
||||
std='[m' # No color.
|
||||
else
|
||||
red= grn= lgn= blu= mgn= std=
|
||||
fi
|
||||
|
||||
do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
|
||||
trap "st=129; $do_exit" 1
|
||||
trap "st=130; $do_exit" 2
|
||||
trap "st=141; $do_exit" 13
|
||||
trap "st=143; $do_exit" 15
|
||||
|
||||
# Test script is run here.
|
||||
"$@" >$log_file 2>&1
|
||||
estatus=$?
|
||||
|
||||
if test $enable_hard_errors = no && test $estatus -eq 99; then
|
||||
tweaked_estatus=1
|
||||
else
|
||||
tweaked_estatus=$estatus
|
||||
fi
|
||||
|
||||
case $tweaked_estatus:$expect_failure in
|
||||
0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
|
||||
0:*) col=$grn res=PASS recheck=no gcopy=no;;
|
||||
77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
|
||||
99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
|
||||
*:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
|
||||
*:*) col=$red res=FAIL recheck=yes gcopy=yes;;
|
||||
esac
|
||||
|
||||
# Report the test outcome and exit status in the logs, so that one can
|
||||
# know whether the test passed or failed simply by looking at the '.log'
|
||||
# file, without the need of also peaking into the corresponding '.trs'
|
||||
# file (automake bug#11814).
|
||||
echo "$res $test_name (exit status: $estatus)" >>$log_file
|
||||
|
||||
# Report outcome to console.
|
||||
echo "${col}${res}${std}: $test_name"
|
||||
|
||||
# Register the test result, and other relevant metadata.
|
||||
echo ":test-result: $res" > $trs_file
|
||||
echo ":global-test-result: $res" >> $trs_file
|
||||
echo ":recheck: $recheck" >> $trs_file
|
||||
echo ":copy-in-global-log: $gcopy" >> $trs_file
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,116 @@
|
|||
AC_INIT([pyatspi], [2.36.0], [accessibility-atspi@lists.linux-foundation.org])
|
||||
AC_CONFIG_AUX_DIR(config)
|
||||
|
||||
# The version of python used is determined by the executable pointed to by the
|
||||
# --with-python switch, or if that's not set, by the PYTHON environment
|
||||
# variable. For instance if your system installs Python 3 as python3 to
|
||||
# configure to compile pygobject under Python 3 you would do this:
|
||||
# $ ./configure --with-python=python3
|
||||
# or
|
||||
# $ PYTHON=python3 ./configure
|
||||
#
|
||||
# You can also build against a full interpreter path, such as
|
||||
# $ ./configure --with-python=~/my-patched-python/python
|
||||
|
||||
LT_RELEASE=$AT_SPI_MAJOR_VERSION.$AT_SPI_MINOR_VERSION
|
||||
LT_CURRENT=0
|
||||
LT_REVISION=0
|
||||
LT_AGE=0
|
||||
LT_VERSION_INFO='-version-info ${LT_CURRENT}:${LT_REVISION}:${LT_AGE}'
|
||||
AC_SUBST(LT_VERSION_INFO)
|
||||
AC_SUBST(LT_RELEASE)
|
||||
AC_SUBST(LT_CURRENT)
|
||||
AC_SUBST(LT_REVISION)
|
||||
AC_SUBST(LT_AGE)
|
||||
|
||||
AM_INIT_AUTOMAKE([-Wall foreign no-dist-gzip dist-xz])
|
||||
|
||||
AC_PROG_CC
|
||||
|
||||
# option to specify python interpreter to use; this just sets $PYTHON, so that
|
||||
# we will fallback to reading $PYTHON if --with-python is not given, and
|
||||
# python.m4 will get the expected input
|
||||
AC_ARG_WITH(python,
|
||||
AC_HELP_STRING([--with-python=PATH], [Path to Python interpreter; searches $PATH if only a program name is given; if not given, searches for a few standard names such as "python3" or "python2"]),
|
||||
[PYTHON="$withval"], [])
|
||||
if test x"$PYTHON" = xyes; then
|
||||
AC_MSG_ERROR([--with-python option requires a path or program argument])
|
||||
fi
|
||||
if test -n "$PYTHON" && ! which "$PYTHON"; then
|
||||
AC_MSG_ERROR([Python interpreter $PYTHON does not exist])
|
||||
fi
|
||||
|
||||
AM_PATH_PYTHON(2.6)
|
||||
AM_DISABLE_STATIC
|
||||
AM_PROG_LIBTOOL
|
||||
PKG_PROG_PKG_CONFIG
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
||||
AC_MSG_CHECKING([whether tests are enabled])
|
||||
AC_ARG_ENABLE(tests,
|
||||
[AS_HELP_STRING([--enable-tests], [Build with testing enabled])],
|
||||
enable_tests=$enableval,
|
||||
enable_tests=no)
|
||||
AC_MSG_RESULT($enable_tests)
|
||||
AM_CONDITIONAL(ENABLE_TESTING, test x$enable_tests = xyes)
|
||||
|
||||
if test "$enable_tests" = "yes"; then
|
||||
AM_CHECK_PYMOD(dbus, , , [AC_MSG_ERROR(Could not find python module: dbus)])
|
||||
|
||||
PKG_CHECK_MODULES(DBUS, [dbus-1 >= 1.0])
|
||||
AC_SUBST(DBUS_LIBS)
|
||||
AC_SUBST(DBUS_CFLAGS)
|
||||
|
||||
PKG_CHECK_MODULES(GLIB, [glib-2.0])
|
||||
AC_SUBST(GLIB_LIBS)
|
||||
AC_SUBST(GLIB_CFLAGS)
|
||||
|
||||
PKG_CHECK_MODULES(DBUS_GLIB, [dbus-glib-1 >= 0.7.0])
|
||||
AC_SUBST(DBUS_GLIB_LIBS)
|
||||
AC_SUBST(DBUS_GLIB_CFLAGS)
|
||||
|
||||
PKG_CHECK_MODULES(GOBJ, [gobject-2.0 >= 2.0.0])
|
||||
AC_SUBST(GOBJ_LIBS)
|
||||
AC_SUBST(GOBJ_CFLAGS)
|
||||
|
||||
PKG_CHECK_MODULES(GMODULE, [gmodule-2.0 >= 2.0.0])
|
||||
AC_SUBST(GMODULE_LIBS)
|
||||
AC_SUBST(GMODULE_CFLAGS)
|
||||
|
||||
PKG_CHECK_MODULES(LIB_XML, [libxml-2.0 >= 2.0.0])
|
||||
AC_SUBST(LIB_XML_LIBS)
|
||||
AC_SUBST(LIB_XML_CFLAGS)
|
||||
|
||||
PKG_CHECK_MODULES(ATK, [atk >= 2.11.2])
|
||||
AC_SUBST(ATK_LIBS)
|
||||
AC_SUBST(ATK_CFLAGS)
|
||||
|
||||
PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.10.0])
|
||||
AC_SUBST(GTK_LIBS)
|
||||
AC_SUBST(GTK_CFLAGS)
|
||||
fi
|
||||
|
||||
PKG_CHECK_MODULES(PYGOBJ, [pygobject-3.0 >= 2.90.1])
|
||||
|
||||
AM_CONDITIONAL(SET_GTK_MODULE, test -z "$GTK_MODULE_DIR")
|
||||
AC_ARG_VAR([GTK_MODULE_DIR], [Where to find the atk-adaptor gtk module])
|
||||
if test -z "$GTK_MODULE_DIR"; then
|
||||
GTK_MODULE_DIR=gtk-2.0/modules
|
||||
fi
|
||||
|
||||
AC_PATH_XTRA
|
||||
|
||||
AC_CONFIG_FILES([Makefile
|
||||
tests/Makefile
|
||||
tests/dummyatk/Makefile
|
||||
tests/data/Makefile
|
||||
tests/pyatspi/Makefile
|
||||
tests/pyatspi/testrunner
|
||||
tests/pyatspi/pasytest/Makefile
|
||||
tests/apps/Makefile
|
||||
pyatspi/Makefile
|
||||
examples/Makefile
|
||||
])
|
||||
|
||||
AC_OUTPUT
|
|
@ -0,0 +1,8 @@
|
|||
noinst_SCRIPTS = magFocusTracker.py
|
||||
|
||||
EXTRA_DIST = magFocusTracker.py \
|
||||
caret.py \
|
||||
runningappcheck.py \
|
||||
keypress.py
|
||||
|
||||
pyatspidir=$(bindir)
|
|
@ -0,0 +1,485 @@
|
|||
# Makefile.in generated by automake 1.16.1 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__is_gnu_make = { \
|
||||
if test -z '$(MAKELEVEL)'; then \
|
||||
false; \
|
||||
elif test -n '$(MAKE_HOST)'; then \
|
||||
true; \
|
||||
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
||||
true; \
|
||||
else \
|
||||
false; \
|
||||
fi; \
|
||||
}
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
subdir = examples
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
SCRIPTS = $(noinst_SCRIPTS)
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
||||
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_@AM_V@)
|
||||
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
AR = @AR@
|
||||
ATK_CFLAGS = @ATK_CFLAGS@
|
||||
ATK_LIBS = @ATK_LIBS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DBUS_CFLAGS = @DBUS_CFLAGS@
|
||||
DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
|
||||
DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
|
||||
DBUS_LIBS = @DBUS_LIBS@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||
GLIB_LIBS = @GLIB_LIBS@
|
||||
GMODULE_CFLAGS = @GMODULE_CFLAGS@
|
||||
GMODULE_LIBS = @GMODULE_LIBS@
|
||||
GOBJ_CFLAGS = @GOBJ_CFLAGS@
|
||||
GOBJ_LIBS = @GOBJ_LIBS@
|
||||
GREP = @GREP@
|
||||
GTK_CFLAGS = @GTK_CFLAGS@
|
||||
GTK_LIBS = @GTK_LIBS@
|
||||
GTK_MODULE_DIR = @GTK_MODULE_DIR@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIB_XML_CFLAGS = @LIB_XML_CFLAGS@
|
||||
LIB_XML_LIBS = @LIB_XML_LIBS@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
LT_AGE = @LT_AGE@
|
||||
LT_CURRENT = @LT_CURRENT@
|
||||
LT_RELEASE = @LT_RELEASE@
|
||||
LT_REVISION = @LT_REVISION@
|
||||
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
|
||||
LT_VERSION_INFO = @LT_VERSION_INFO@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PKG_CONFIG = @PKG_CONFIG@
|
||||
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
|
||||
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
|
||||
PYGOBJ_CFLAGS = @PYGOBJ_CFLAGS@
|
||||
PYGOBJ_LIBS = @PYGOBJ_LIBS@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
|
||||
PYTHON_PLATFORM = @PYTHON_PLATFORM@
|
||||
PYTHON_PREFIX = @PYTHON_PREFIX@
|
||||
PYTHON_VERSION = @PYTHON_VERSION@
|
||||
RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
XMKMF = @XMKMF@
|
||||
X_CFLAGS = @X_CFLAGS@
|
||||
X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||
X_LIBS = @X_LIBS@
|
||||
X_PRE_LIBS = @X_PRE_LIBS@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
pkgpyexecdir = @pkgpyexecdir@
|
||||
pkgpythondir = @pkgpythondir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
pyexecdir = @pyexecdir@
|
||||
pythondir = @pythondir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
noinst_SCRIPTS = magFocusTracker.py
|
||||
EXTRA_DIST = magFocusTracker.py \
|
||||
caret.py \
|
||||
runningappcheck.py \
|
||||
keypress.py
|
||||
|
||||
pyatspidir = $(bindir)
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(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 ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign examples/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__maybe_remake_depfiles)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
|
||||
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
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
tags TAGS:
|
||||
|
||||
ctags CTAGS:
|
||||
|
||||
cscope cscopelist:
|
||||
|
||||
|
||||
distdir: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||
|
||||
distdir-am: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(SCRIPTS)
|
||||
installdirs:
|
||||
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:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am:
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
||||
cscopelist-am ctags-am distclean distclean-generic \
|
||||
distclean-libtool distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-pdf install-pdf-am install-ps install-ps-am \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags-am uninstall uninstall-am
|
||||
|
||||
.PRECIOUS: Makefile
|
||||
|
||||
|
||||
# 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,43 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# caret.py
|
||||
#
|
||||
# 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., Franklin Street, Fifth Floor,
|
||||
# Boston MA 02110-1301 USA.
|
||||
#
|
||||
# This example demonstrates how the pyatspi2 text interface can be used.
|
||||
|
||||
import pyatspi
|
||||
|
||||
def on_caret_move(event):
|
||||
if event.source and event.source.getRole() == pyatspi.ROLE_TERMINAL:
|
||||
return
|
||||
|
||||
print_text_at_offset(event.source, event.detail1)
|
||||
|
||||
def print_text_at_offset(obj, offset):
|
||||
try:
|
||||
text = obj.queryText()
|
||||
except:
|
||||
return
|
||||
else:
|
||||
char, char_start_offset, char_end_offset = text.getTextAtOffset(offset, pyatspi.TEXT_BOUNDARY_CHAR)
|
||||
word, word_start_offset, word_end_offset = text.getTextAtOffset(offset, pyatspi.TEXT_BOUNDARY_WORD_START)
|
||||
sentence, sentence_start_offset, sentence_end_offset = text.getTextAtOffset(offset, pyatspi.TEXT_BOUNDARY_SENTENCE_START)
|
||||
line, line_start_offset, line_end_offset = text.getTextAtOffset(offset,pyatspi.TEXT_BOUNDARY_LINE_START)
|
||||
print("\n\nChar:%s \nWord:%s \nSentence:%s Line:%s " % (char, word, sentence, line))
|
||||
|
||||
pyatspi.Registry.registerEventListener(on_caret_move, "object:text-caret-moved")
|
||||
pyatspi.Registry.start()
|
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# keypress.py
|
||||
#
|
||||
# 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., Franklin Street, Fifth Floor,
|
||||
# Boston MA 02110-1301 USA.
|
||||
#
|
||||
# An pyatspi2 example to demonstate a client listener for
|
||||
# Keypresses and releases in pyatspi2
|
||||
|
||||
import pyatspi
|
||||
|
||||
# Callback to print the active window on key press amd filter out the key release
|
||||
def on_key_input(event):
|
||||
|
||||
if event.type == pyatspi.KEY_RELEASED_EVENT:
|
||||
return False
|
||||
if event.event_string=='F4':
|
||||
pyatspi.Registry.stop()
|
||||
return True
|
||||
if event.event_string =='F3':
|
||||
print_tree(0, active_window())
|
||||
return True
|
||||
help_message()
|
||||
|
||||
def active_window():
|
||||
desktop = pyatspi.Registry.getDesktop(0)
|
||||
for app in desktop:
|
||||
for window in app:
|
||||
if window.getState().contains(pyatspi.STATE_ACTIVE):
|
||||
return window
|
||||
|
||||
# Print hierarchy tree.
|
||||
def print_tree(level,root):
|
||||
print ('%s-> %s' % (' ' * level, root))
|
||||
for tree in root:
|
||||
print_tree(level+1, tree)
|
||||
|
||||
def help_message():
|
||||
print('Press F3 to print the accessible hierarchy for the active window.\nPress F4 to exit.')
|
||||
|
||||
help_message()
|
||||
pyatspi.Registry.registerKeystrokeListener(on_key_input, kind=(pyatspi.KEY_PRESSED_EVENT, pyatspi.KEY_RELEASED_EVENT))
|
||||
pyatspi.Registry.start()
|
|
@ -0,0 +1,290 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
# magFocusTracker
|
||||
#
|
||||
# Copyright 2009 Sun Microsystems Inc.
|
||||
# Copyright 2010 Willie Walker
|
||||
# Copyright 2011-2012 Igalia, S. L.
|
||||
# Copyright 2011-2012 Inclusive Design Research Centre, OCAD University
|
||||
#
|
||||
# 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., Franklin Street, Fifth Floor,
|
||||
# Boston MA 02110-1301 USA.
|
||||
#
|
||||
# * Contributor: Joanie Diggs <diggs@igalia.com>
|
||||
# * Contributor: Joseph Scheuhammer <clown@alum.mit.edu>
|
||||
|
||||
"""Proof-of-concept standalone application that shows how:
|
||||
1. to track keyboard focus and the caret using AT-SPI events, and
|
||||
2. use D-Bus to drive the magnifier to insure the tracked object is
|
||||
within the magnified view.
|
||||
"""
|
||||
|
||||
__copyright__ = \
|
||||
"Copyright (c) 2009 Sun Microsystems Inc." \
|
||||
"Copyright (c) 2010 Willie Walker" \
|
||||
"Copyright (c) 2011-2012 Igalia, S.L." \
|
||||
"Copyright (c) 2011-2012 Inclusive Design Research Centre, OCAD University"
|
||||
__license__ = "LGPL"
|
||||
|
||||
import dbus
|
||||
import pyatspi
|
||||
import sys
|
||||
from dbus.mainloop.glib import DBusGMainLoop
|
||||
from gi.repository import Gdk
|
||||
from gi.repository.Gio import Settings
|
||||
|
||||
_screenWidth = 0
|
||||
_screenHeight = 0
|
||||
_magnifier = None
|
||||
_zoomer = None
|
||||
|
||||
class RoiHandler:
|
||||
"""For handling D-Bus calls to zoomRegion.getRoi() asynchronously"""
|
||||
|
||||
def __init__(self, left=0, top=0, width=0, height=0, centerX=0, centerY=0,
|
||||
edgeMarginX=0, edgeMarginY=0):
|
||||
self.left = left
|
||||
self.top = top
|
||||
self.width = width
|
||||
self.height = height
|
||||
self.centerX = centerX
|
||||
self.centerY = centerY
|
||||
self.edgeMarginX = edgeMarginX
|
||||
self.edgeMarginY = edgeMarginY
|
||||
|
||||
def setRoiCenter(self, reply):
|
||||
"""Given a region of interest, put that at the center of the magnifier.
|
||||
|
||||
Arguments:
|
||||
- reply: an array defining a rectangle [left, top, right, bottom]
|
||||
"""
|
||||
roiWidth = reply[2] - reply[0]
|
||||
roiHeight = reply[3] - reply[1]
|
||||
if self.width > roiWidth:
|
||||
self.centerX = self.left
|
||||
if self.height > roiHeight:
|
||||
self.centerY = self.top
|
||||
_setROICenter(self.centerX, self.centerY)
|
||||
|
||||
def setRoiCursorPush(self, reply):
|
||||
"""Given a region of interest, nudge it if the caret or control is not
|
||||
visible.
|
||||
|
||||
Arguments:
|
||||
- reply: an array defining a rectangle [left, top, right, bottom]
|
||||
"""
|
||||
|
||||
roiLeft = reply[0]
|
||||
roiTop = reply[1]
|
||||
roiWidth = reply[2] - roiLeft
|
||||
roiHeight = reply[3] - roiTop
|
||||
leftOfROI = (self.left - self.edgeMarginX) <= roiLeft
|
||||
rightOfROI = \
|
||||
(self.left + self.width + self.edgeMarginX) >= (roiLeft + roiWidth)
|
||||
aboveROI = (self.top - self.edgeMarginY) <= roiTop
|
||||
belowROI = \
|
||||
(self.top + self.height + self.edgeMarginY) >= (roiTop + roiHeight)
|
||||
|
||||
x1 = roiLeft
|
||||
x2 = roiLeft + roiWidth
|
||||
y1 = roiTop
|
||||
y2 = roiTop + roiHeight
|
||||
|
||||
if leftOfROI:
|
||||
x1 = max(0, self.left - self.edgeMarginX)
|
||||
x2 = x1 + roiWidth
|
||||
elif rightOfROI:
|
||||
self.left = min(_screenWidth, self.left + self.edgeMarginX)
|
||||
if self.width > roiWidth:
|
||||
x1 = self.left
|
||||
x2 = x1 + roiWidth
|
||||
else:
|
||||
x2 = self.left + self.width
|
||||
x1 = x2 - roiWidth
|
||||
|
||||
if aboveROI:
|
||||
y1 = max(0, self.top - self.edgeMarginY)
|
||||
y2 = y1 + roiHeight
|
||||
elif belowROI:
|
||||
self.top = min(_screenHeight, self.top + self.edgeMarginY)
|
||||
if self.height > roiHeight:
|
||||
y1 = self.top
|
||||
y2 = y1 + roiHeight
|
||||
else:
|
||||
y2 = self.top + self.height
|
||||
y1 = y2 - roiHeight
|
||||
|
||||
_setROICenter((x1 + x2) / 2, (y1 + y2) / 2)
|
||||
|
||||
def setRoiCenterErr(self, error):
|
||||
_dbusCallbackError('_setROICenter()', error)
|
||||
|
||||
def setRoiCursorPushErr(self, error):
|
||||
_dbusCallbackError('_setROICursorPush()', error)
|
||||
|
||||
def magnifyAccessibleErr(self, error):
|
||||
_dbusCallbackError('magnifyAccessible()', error)
|
||||
|
||||
def _dbusCallbackError(funcName, error):
|
||||
"""Log D-Bus errors
|
||||
|
||||
Arguments:
|
||||
- funcName: The name of the gsmag function that made the D-Bus call.
|
||||
- error: The error that D-Bus returned.
|
||||
"""
|
||||
logLine = funcName + ' failed: ' + str(error)
|
||||
debug.println(debug.LEVEL_WARNING, logLine)
|
||||
|
||||
def _setROICenter(x, y):
|
||||
"""Centers the region of interest around the given point.
|
||||
|
||||
Arguments:
|
||||
- x: integer in unzoomed system coordinates representing x component
|
||||
- y: integer in unzoomed system coordinates representing y component
|
||||
"""
|
||||
_zoomer.shiftContentsTo(x, y, ignore_reply=True)
|
||||
|
||||
def _setROICursorPush(x, y, width, height):
|
||||
"""Nudges the ROI if the caret or control is not visible.
|
||||
|
||||
Arguments:
|
||||
- x: integer in unzoomed system coordinates representing x component
|
||||
- y: integer in unzoomed system coordinates representing y component
|
||||
- width: integer in unzoomed system coordinates representing the width
|
||||
- height: integer in unzoomed system coordinates representing the height
|
||||
"""
|
||||
|
||||
roiPushHandler = RoiHandler(x, y, width, height)
|
||||
_zoomer.getRoi(reply_handler=roiPushHandler.setRoiCursorPush,
|
||||
error_handler=roiPushHandler.setRoiCursorPushErr)
|
||||
|
||||
def magnifyAccessible(event, obj=None, extents=None):
|
||||
"""Sets the region of interest to the upper left of the given
|
||||
accessible, if it implements the Component interface. Otherwise,
|
||||
does nothing.
|
||||
|
||||
Arguments:
|
||||
- event: the Event that caused this to be called
|
||||
- obj: the accessible
|
||||
"""
|
||||
|
||||
if event.type.startswith("object:state-changed") and not event.detail1:
|
||||
# This object just became unselected or unfocused, and we're not
|
||||
# big on nostalgia.
|
||||
return
|
||||
|
||||
obj = obj or event.source
|
||||
|
||||
haveSomethingToMagnify = False
|
||||
|
||||
if extents:
|
||||
[x, y, width, height] = extents
|
||||
haveSomethingToMagnify = True
|
||||
elif event and event.type.startswith("object:text-caret-moved"):
|
||||
try:
|
||||
text = obj.queryText()
|
||||
if text and (text.caretOffset >= 0):
|
||||
offset = text.caretOffset
|
||||
if offset == text.characterCount:
|
||||
offset -= 1
|
||||
[x, y, width, height] = \
|
||||
text.getCharacterExtents(offset, 0)
|
||||
haveSomethingToMagnify = (width + height > 0)
|
||||
except:
|
||||
haveSomethingToMagnify = False
|
||||
|
||||
if haveSomethingToMagnify:
|
||||
_setROICursorPush(x, y, width, height)
|
||||
return
|
||||
|
||||
if not haveSomethingToMagnify:
|
||||
try:
|
||||
extents = obj.queryComponent().getExtents(0)
|
||||
[x, y, width, height] = \
|
||||
[extents.x, extents.y, extents.width, extents.height]
|
||||
haveSomethingToMagnify = True
|
||||
except:
|
||||
haveSomethingToMagnify = False
|
||||
|
||||
if haveSomethingToMagnify:
|
||||
_setROICursorPush(x, y, width, height)
|
||||
|
||||
def startTracking():
|
||||
global _screenWidth
|
||||
global _screenHeight
|
||||
global _magnifier
|
||||
global _zoomer
|
||||
|
||||
if _magnifier and _zoomer:
|
||||
screen = Gdk.Screen.get_default()
|
||||
_screenWidth = screen.width()
|
||||
_screenHeight = screen.height()
|
||||
|
||||
pyatspi.Registry.registerEventListener(magnifyAccessible,
|
||||
"object:text-caret-moved",
|
||||
"object:state-changed:focused",
|
||||
"object:state-changed:selected")
|
||||
|
||||
def stopTracking():
|
||||
pyatspi.Registry.deregisterEventListener(magnifyAccessible,
|
||||
"object:text-caret-moved",
|
||||
"object:state-changed:focused",
|
||||
"object:state-changed:selected")
|
||||
|
||||
def onEnabledChanged(gsetting, key):
|
||||
if key != 'screen-magnifier-enabled':
|
||||
return
|
||||
|
||||
enabled = gsetting.get_boolean(key)
|
||||
if enabled:
|
||||
startTracking()
|
||||
else:
|
||||
stopTracking()
|
||||
|
||||
def _initMagDbus():
|
||||
global _magnifier
|
||||
global _zoomer
|
||||
|
||||
available = False
|
||||
try:
|
||||
bus = dbus.SessionBus(mainloop=DBusGMainLoop())
|
||||
proxy = \
|
||||
bus.get_object('org.gnome.Magnifier', '/org/gnome/Magnifier')
|
||||
_magnifier = dbus.Interface(proxy, 'org.gnome.Magnifier')
|
||||
zoomerPaths = _magnifier.getZoomRegions()
|
||||
if zoomerPaths:
|
||||
proxy = bus.get_object('org.gnome.Magnifier', zoomerPaths[0])
|
||||
_zoomer = dbus.Interface(proxy, 'org.gnome.Magnifier.ZoomRegion')
|
||||
available = True
|
||||
except:
|
||||
available = False
|
||||
|
||||
return available
|
||||
|
||||
def main():
|
||||
magServiceAvailable = _initMagDbus()
|
||||
if magServiceAvailable:
|
||||
a11yAppSettings = Settings('org.gnome.desktop.a11y.applications')
|
||||
a11yAppSettings.connect('changed', onEnabledChanged)
|
||||
if a11yAppSettings.get_boolean('screen-magnifier-enabled'):
|
||||
startTracking()
|
||||
pyatspi.Registry.start()
|
||||
else:
|
||||
print('Magnification service not available. Exiting.')
|
||||
|
||||
return 0
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
|
@ -0,0 +1,47 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# runningappcheck.py
|
||||
#
|
||||
# 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., Franklin Street, Fifth Floor,
|
||||
# Boston MA 02110-1301 USA.
|
||||
#
|
||||
# A pyatspi2 example to demonstrate how to find the number of accessible
|
||||
# applications currently running on the desktop.
|
||||
|
||||
import pyatspi
|
||||
|
||||
def on_key_input(event):
|
||||
if event.type == pyatspi.KEY_RELEASED_EVENT:
|
||||
return False
|
||||
if event.event_string=='F4':
|
||||
pyatspi.Registry.stop()
|
||||
return True
|
||||
if event.event_string =='F5':
|
||||
name_apps()
|
||||
return True
|
||||
help_message()
|
||||
|
||||
def name_apps():
|
||||
desktop = pyatspi.Registry.getDesktop(0)
|
||||
print ('there are %s running applications' % (desktop.childCount))
|
||||
for app in desktop:
|
||||
print app.name
|
||||
|
||||
def help_message():
|
||||
print('Press F5 to print the running apps.\nPress F4 to exit.')
|
||||
|
||||
help_message()
|
||||
pyatspi.Registry.registerKeystrokeListener(on_key_input, kind=(pyatspi.KEY_PRESSED_EVENT, pyatspi.KEY_RELEASED_EVENT))
|
||||
pyatspi.Registry.start()
|
|
@ -0,0 +1,254 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from gi.repository import Atspi
|
||||
|
||||
from pyatspi.registry import *
|
||||
Registry = Registry()
|
||||
|
||||
from pyatspi.application import *
|
||||
from pyatspi.constants import *
|
||||
from pyatspi.editabletext import *
|
||||
from pyatspi.role import *
|
||||
from pyatspi.state import *
|
||||
from pyatspi.text import *
|
||||
from pyatspi.document import *
|
||||
from pyatspi.utils import *
|
||||
from pyatspi.action import *
|
||||
from pyatspi.component import *
|
||||
from pyatspi.collection import *
|
||||
from pyatspi.hypertext import *
|
||||
from pyatspi.image import *
|
||||
from pyatspi.selection import *
|
||||
from pyatspi.table import *
|
||||
from pyatspi.tablecell import *
|
||||
from pyatspi.value import *
|
||||
from pyatspi.appevent import *
|
||||
from pyatspi.interface import *
|
||||
|
||||
def Accessible_getitem(self, i):
|
||||
len=self.get_child_count()
|
||||
if i < 0:
|
||||
i = len + i
|
||||
if i < 0 or i >= len:
|
||||
raise IndexError
|
||||
return self.get_child_at_index(i)
|
||||
|
||||
def Accessible_str(self):
|
||||
'''
|
||||
Gets a human readable representation of the accessible.
|
||||
|
||||
@return: Role and name information for the accessible
|
||||
@rtype: string
|
||||
'''
|
||||
try:
|
||||
return '[%s | %s]' % (self.getRoleName(), self.name)
|
||||
except Exception:
|
||||
return '[DEAD]'
|
||||
|
||||
def pointToList(point):
|
||||
return (point.x, point.y)
|
||||
|
||||
# TODO: Figure out how to override Atspi.Rect constructor and remove this class
|
||||
def getInterface(func, obj):
|
||||
ret = func(obj)
|
||||
if ret:
|
||||
return ret
|
||||
raise NotImplementedError
|
||||
|
||||
def getEventType(event):
|
||||
try:
|
||||
return event.pyType
|
||||
except:
|
||||
event.pyType = EventType(event.rawType)
|
||||
return event.pyType
|
||||
|
||||
def DeviceEvent_str(self):
|
||||
'''
|
||||
Builds a human readable representation of the event.
|
||||
|
||||
@return: Event description
|
||||
@rtype: string
|
||||
'''
|
||||
if self.type == KEY_PRESSED_EVENT:
|
||||
kind = 'pressed'
|
||||
elif self.type == KEY_RELEASED_EVENT:
|
||||
kind = 'released'
|
||||
return '''\
|
||||
%s
|
||||
\thw_code: %d
|
||||
\tevent_string: %s
|
||||
\tmodifiers: %d
|
||||
\tid: %d
|
||||
\ttimestamp: %d
|
||||
\tis_text: %s''' % (kind, self.hw_code, self.event_string, self.modifiers,
|
||||
self.id, self.timestamp, self.is_text)
|
||||
|
||||
def Event_str(self):
|
||||
'''
|
||||
Builds a human readable representation of the event including event type,
|
||||
parameters, and source info.
|
||||
|
||||
@return: Event description
|
||||
@rtype: string
|
||||
'''
|
||||
return '%s(%s, %s, %s)\n\tsource: %s\n\thost_application: %s\n\tsender: %s' % \
|
||||
(self.type, self.detail1, self.detail2, self.any_data,
|
||||
self.source, self.host_application, self.sender)
|
||||
|
||||
### Accessible ###
|
||||
Accessible = Atspi.Accessible
|
||||
Atspi.Accessible.getChildAtIndex = Atspi.Accessible.get_child_at_index
|
||||
Atspi.Accessible.getAttributes = Atspi.Accessible.get_attributes_as_array
|
||||
Atspi.Accessible.getApplication = Atspi.Accessible.get_application
|
||||
Atspi.Accessible.__getitem__ = Accessible_getitem
|
||||
Atspi.Accessible.__len__ = Atspi.Accessible.get_child_count
|
||||
Atspi.Accessible.__bool__ = lambda x: True
|
||||
Atspi.Accessible.__nonzero__ = lambda x: True
|
||||
Atspi.Accessible.__str__ = Accessible_str
|
||||
Atspi.Accessible.childCount = property(fget=Atspi.Accessible.get_child_count)
|
||||
Atspi.Accessible.getChildCount = Atspi.Accessible.get_child_count
|
||||
Atspi.Accessible.getIndexInParent = Atspi.Accessible.get_index_in_parent
|
||||
Atspi.Accessible.getLocalizedRoleName = Atspi.Accessible.get_localized_role_name
|
||||
Atspi.Accessible.getRelationSet = Atspi.Accessible.get_relation_set
|
||||
Atspi.Accessible.getRole = Atspi.Accessible.get_role
|
||||
Atspi.Accessible.getRoleName = Atspi.Accessible.get_role_name
|
||||
Atspi.Accessible.getState = Atspi.Accessible.get_state_set
|
||||
del Atspi.Accessible.children
|
||||
Atspi.Accessible.description = property(fget=Atspi.Accessible.get_description)
|
||||
Atspi.Accessible.objectLocale = property(fget=Atspi.Accessible.get_object_locale)
|
||||
Atspi.Accessible.accessibleId = property(fget=Atspi.Accessible.get_accessible_id)
|
||||
Atspi.Accessible.name = property(fget=Atspi.Accessible.get_name)
|
||||
Atspi.Accessible.isEqual = lambda a,b: a == b
|
||||
Atspi.Accessible.parent = property(fget=Atspi.Accessible.get_parent)
|
||||
Atspi.Accessible.setCacheMask = Atspi.Accessible.set_cache_mask
|
||||
Atspi.Accessible.clearCache = Atspi.Accessible.clear_cache
|
||||
|
||||
Atspi.Accessible.id = property(fget=Atspi.Accessible.get_id)
|
||||
Atspi.Accessible.toolkitName = property(fget=Atspi.Accessible.get_toolkit_name)
|
||||
Atspi.Accessible.toolkitVersion = property(fget=Atspi.Accessible.get_toolkit_version)
|
||||
Atspi.Accessible.atspiVersion = property(fget=Atspi.Accessible.get_atspi_version)
|
||||
|
||||
Atspi.Accessible.queryAction = lambda x: Action(getInterface(Atspi.Accessible.get_action_iface, x))
|
||||
Atspi.Accessible.queryCollection = lambda x: Collection(getInterface(Atspi.Accessible.get_collection_iface, x))
|
||||
Atspi.Accessible.queryComponent = lambda x: Component(getInterface(Atspi.Accessible.get_component_iface, x))
|
||||
Atspi.Accessible.queryDocument = lambda x: Document(getInterface(Atspi.Accessible.get_document_iface, x))
|
||||
Atspi.Accessible.queryEditableText = lambda x: EditableText(getInterface(Atspi.Accessible.get_editable_text_iface, x))
|
||||
Atspi.Accessible.queryHyperlink = lambda x: getInterface(Atspi.Accessible.get_hyperlink, x)
|
||||
Atspi.Accessible.queryHypertext = lambda x: Hypertext(getInterface(Atspi.Accessible.get_hypertext_iface, x))
|
||||
Atspi.Accessible.queryImage = lambda x: Image(getInterface(Atspi.Accessible.get_image_iface, x))
|
||||
Atspi.Accessible.querySelection = lambda x: Selection(getInterface(Atspi.Accessible.get_selection_iface, x))
|
||||
Atspi.Accessible.queryTable = lambda x: Table(getInterface(Atspi.Accessible.get_table_iface, x))
|
||||
Atspi.Accessible.queryTableCell = lambda x: TableCell(getInterface(Atspi.Accessible.get_table_cell, x))
|
||||
Atspi.Accessible.queryText = lambda x: Text(getInterface(Atspi.Accessible.get_text_iface, x))
|
||||
Atspi.Accessible.queryValue = lambda x: Value(getInterface(Atspi.Accessible.get_value_iface, x))
|
||||
|
||||
# Doing this here since otherwise we'd have import recursion
|
||||
interface.queryAction = lambda x: Action(getInterface(Atspi.Accessible.get_action, x.obj))
|
||||
interface.queryCollection = lambda x: Collection(getInterface(Atspi.Accessible.get_collection, x.obj))
|
||||
interface.queryComponent = lambda x: Component(getInterface(Atspi.Accessible.get_component, x.obj))
|
||||
interface.queryDocument = lambda x: Document(getInterface(Atspi.Accessible.get_document, x.obj))
|
||||
interface.queryEditableText = lambda x: EditableText(getInterface(Atspi.Accessible.get_editable_text, x.obj))
|
||||
interface.queryHyperlink = lambda x: getInterface(Atspi.Accessible.get_hyperlink, x.obj)
|
||||
interface.queryHypertext = lambda x: Hypertext(getInterface(Atspi.Accessible.get_hypertext, x.obj))
|
||||
interface.queryImage = lambda x: Image(getInterface(Atspi.Accessible.get_image, x.obj))
|
||||
interface.querySelection = lambda x: Selection(getInterface(Atspi.Accessible.get_selection, x.obj))
|
||||
interface.queryTable = lambda x: Table(getInterface(Atspi.Accessible.get_table, x.obj))
|
||||
interface.queryTableCell = lambda x: Table(getInterface(Atspi.Accessible.get_table_cell, x.obj))
|
||||
interface.queryText = lambda x: Text(getInterface(Atspi.Accessible.get_text, x.obj))
|
||||
interface.queryValue = lambda x: Value(getInterface(Atspi.Accessible.get_value, x.obj))
|
||||
|
||||
### hyperlink ###
|
||||
Hyperlink = Atspi.Hyperlink
|
||||
Atspi.Hyperlink.getObject = Atspi.Hyperlink.get_object
|
||||
Atspi.Hyperlink.getURI = Atspi.Hyperlink.get_uri
|
||||
Atspi.Hyperlink.isValid = Atspi.Hyperlink.is_valid
|
||||
Atspi.Hyperlink.endIndex = property(fget=Atspi.Hyperlink.get_end_index)
|
||||
Atspi.Hyperlink.nAnchors = property(fget=Atspi.Hyperlink.get_n_anchors)
|
||||
Atspi.Hyperlink.startIndex = property(fget=Atspi.Hyperlink.get_start_index)
|
||||
|
||||
### DeviceEvent ###
|
||||
Atspi.DeviceEvent.__str__ = DeviceEvent_str
|
||||
|
||||
### event ###
|
||||
Atspi.Event.host_application = property(fget=lambda x: x.source.get_application())
|
||||
Atspi.Event.rawType = Atspi.Event.type
|
||||
Atspi.Event.source_name = property(fget=lambda x: x.source.name)
|
||||
Atspi.Event.source_role = property(fget=lambda x: x.source.getRole())
|
||||
Atspi.Event.type = property(fget=getEventType)
|
||||
Atspi.Event.__str__ = Event_str
|
||||
|
||||
### RelationSet ###
|
||||
Atspi.Relation.getRelationType = Atspi.Relation.get_relation_type
|
||||
Atspi.Relation.getNTargets = Atspi.Relation.get_n_targets
|
||||
Atspi.Relation.getTarget = Atspi.Relation.get_target
|
||||
RELATION_NULL = Atspi.RelationType.NULL
|
||||
RELATION_LABEL_FOR = Atspi.RelationType.LABEL_FOR
|
||||
RELATION_LABELLED_BY = Atspi.RelationType.LABELLED_BY
|
||||
RELATION_CONTROLLER_FOR = Atspi.RelationType.CONTROLLER_FOR
|
||||
RELATION_CONTROLLED_BY = Atspi.RelationType.CONTROLLED_BY
|
||||
RELATION_MEMBER_OF = Atspi.RelationType.MEMBER_OF
|
||||
RELATION_TOOLTIP_FOR = Atspi.RelationType.TOOLTIP_FOR
|
||||
RELATION_NODE_CHILD_OF = Atspi.RelationType.NODE_CHILD_OF
|
||||
RELATION_NODE_PARENT_OF = Atspi.RelationType.NODE_PARENT_OF
|
||||
RELATION_EXTENDED = Atspi.RelationType.EXTENDED
|
||||
RELATION_FLOWS_TO = Atspi.RelationType.FLOWS_TO
|
||||
RELATION_FLOWS_FROM = Atspi.RelationType.FLOWS_FROM
|
||||
RELATION_SUBWINDOW_OF = Atspi.RelationType.SUBWINDOW_OF
|
||||
RELATION_EMBEDS = Atspi.RelationType.EMBEDS
|
||||
RELATION_EMBEDDED_BY = Atspi.RelationType.EMBEDDED_BY
|
||||
RELATION_POPUP_FOR = Atspi.RelationType.POPUP_FOR
|
||||
RELATION_PARENT_WINDOW_OF = Atspi.RelationType.PARENT_WINDOW_OF
|
||||
RELATION_DESCRIPTION_FOR = Atspi.RelationType.DESCRIPTION_FOR
|
||||
RELATION_DESCRIBED_BY = Atspi.RelationType.DESCRIBED_BY
|
||||
RELATION_DETAILS = Atspi.RelationType.DETAILS
|
||||
RELATION_DETAILS_FOR = Atspi.RelationType.DETAILS_FOR
|
||||
RELATION_ERROR_MESSAGE = Atspi.RelationType.ERROR_MESSAGE
|
||||
RELATION_ERROR_FOR = Atspi.RelationType.ERROR_FOR
|
||||
|
||||
# Build a dictionary mapping relation values to names based on the prefix of the enum constants.
|
||||
|
||||
RELATION_VALUE_TO_NAME = dict(((value, name[9:].lower().replace('_', ' '))
|
||||
for name, value
|
||||
in globals().items()
|
||||
if name.startswith('RELATION_')))
|
||||
|
||||
### ModifierType ###
|
||||
MODIFIER_SHIFT = Atspi.ModifierType.SHIFT
|
||||
MODIFIER_SHIFTLOCK = Atspi.ModifierType.SHIFTLOCK
|
||||
MODIFIER_CONTROL = Atspi.ModifierType.CONTROL
|
||||
MODIFIER_ALT = Atspi.ModifierType.ALT
|
||||
MODIFIER_META = Atspi.ModifierType.META
|
||||
MODIFIER_META2 = Atspi.ModifierType.META2
|
||||
MODIFIER_META3 = Atspi.ModifierType.META3
|
||||
MODIFIER_NUMLOCK = Atspi.ModifierType.NUMLOCK
|
||||
|
||||
### EventType ###
|
||||
KEY_PRESSED_EVENT = Atspi.EventType.KEY_PRESSED_EVENT
|
||||
KEY_RELEASED_EVENT = Atspi.EventType.KEY_RELEASED_EVENT
|
||||
BUTTON_PRESSED_EVENT = Atspi.EventType.BUTTON_PRESSED_EVENT
|
||||
BUTTON_RELEASED_EVENT = Atspi.EventType.BUTTON_RELEASED_EVENT
|
||||
|
||||
### KeySynthType ###
|
||||
KEY_PRESS = Atspi.KeySynthType.PRESS
|
||||
KEY_PRESSRELEASE = Atspi.KeySynthType.PRESSRELEASE
|
||||
KEY_RELEASE = Atspi.KeySynthType.RELEASE
|
||||
KEY_STRING = Atspi.KeySynthType.STRING
|
||||
KEY_SYM = Atspi.KeySynthType.SYM
|
||||
KEY_LOCKMODIFIERS = Atspi.KeySynthType.LOCKMODIFIERS
|
||||
KEY_UNLOCKMODIFIERS = Atspi.KeySynthType.UNLOCKMODIFIERS
|
||||
|
||||
### cache ###
|
||||
cache = Atspi.Cache
|
||||
setTimeout = Atspi.set_timeout
|
|
@ -0,0 +1,30 @@
|
|||
pyatspidir = $(pythondir)/pyatspi
|
||||
|
||||
pyatspi_PYTHON = \
|
||||
Accessibility.py \
|
||||
appevent.py \
|
||||
constants.py \
|
||||
deviceevent.py \
|
||||
atspienum.py \
|
||||
__init__.py \
|
||||
action.py \
|
||||
application.py \
|
||||
collection.py \
|
||||
component.py \
|
||||
document.py \
|
||||
editabletext.py \
|
||||
hypertext.py \
|
||||
image.py \
|
||||
interface.py \
|
||||
registry.py \
|
||||
role.py \
|
||||
selection.py \
|
||||
state.py \
|
||||
table.py \
|
||||
tablecell.py \
|
||||
text.py \
|
||||
utils.py \
|
||||
value.py
|
||||
|
||||
CLEANFILES = *.pyc
|
||||
|
|
@ -0,0 +1,586 @@
|
|||
# Makefile.in generated by automake 1.16.1 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
am__is_gnu_make = { \
|
||||
if test -z '$(MAKELEVEL)'; then \
|
||||
false; \
|
||||
elif test -n '$(MAKE_HOST)'; then \
|
||||
true; \
|
||||
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
||||
true; \
|
||||
else \
|
||||
false; \
|
||||
fi; \
|
||||
}
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
subdir = pyatspi
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(pyatspi_PYTHON) \
|
||||
$(am__DIST_COMMON)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
||||
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_@AM_V@)
|
||||
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
|
||||
am__install_max = 40
|
||||
am__nobase_strip_setup = \
|
||||
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
|
||||
am__nobase_strip = \
|
||||
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
|
||||
am__nobase_list = $(am__nobase_strip_setup); \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
|
||||
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
|
||||
if (++n[$$2] == $(am__install_max)) \
|
||||
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
|
||||
END { for (dir in files) print dir, files[dir] }'
|
||||
am__base_list = \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
|
||||
am__uninstall_files_from_dir = { \
|
||||
test -z "$$files" \
|
||||
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|
||||
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
||||
$(am__cd) "$$dir" && rm -f $$files; }; \
|
||||
}
|
||||
am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile)
|
||||
am__installdirs = "$(DESTDIR)$(pyatspidir)"
|
||||
am__pep3147_tweak = \
|
||||
sed -e 's|\.py$$||' -e 's|[^/]*$$|&.*.pyc\n&.*.pyo|'
|
||||
py_compile = $(top_srcdir)/config/py-compile
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in \
|
||||
$(top_srcdir)/config/py-compile
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
AR = @AR@
|
||||
ATK_CFLAGS = @ATK_CFLAGS@
|
||||
ATK_LIBS = @ATK_LIBS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DBUS_CFLAGS = @DBUS_CFLAGS@
|
||||
DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
|
||||
DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
|
||||
DBUS_LIBS = @DBUS_LIBS@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||
GLIB_LIBS = @GLIB_LIBS@
|
||||
GMODULE_CFLAGS = @GMODULE_CFLAGS@
|
||||
GMODULE_LIBS = @GMODULE_LIBS@
|
||||
GOBJ_CFLAGS = @GOBJ_CFLAGS@
|
||||
GOBJ_LIBS = @GOBJ_LIBS@
|
||||
GREP = @GREP@
|
||||
GTK_CFLAGS = @GTK_CFLAGS@
|
||||
GTK_LIBS = @GTK_LIBS@
|
||||
GTK_MODULE_DIR = @GTK_MODULE_DIR@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIB_XML_CFLAGS = @LIB_XML_CFLAGS@
|
||||
LIB_XML_LIBS = @LIB_XML_LIBS@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
LT_AGE = @LT_AGE@
|
||||
LT_CURRENT = @LT_CURRENT@
|
||||
LT_RELEASE = @LT_RELEASE@
|
||||
LT_REVISION = @LT_REVISION@
|
||||
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
|
||||
LT_VERSION_INFO = @LT_VERSION_INFO@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PKG_CONFIG = @PKG_CONFIG@
|
||||
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
|
||||
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
|
||||
PYGOBJ_CFLAGS = @PYGOBJ_CFLAGS@
|
||||
PYGOBJ_LIBS = @PYGOBJ_LIBS@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
|
||||
PYTHON_PLATFORM = @PYTHON_PLATFORM@
|
||||
PYTHON_PREFIX = @PYTHON_PREFIX@
|
||||
PYTHON_VERSION = @PYTHON_VERSION@
|
||||
RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
XMKMF = @XMKMF@
|
||||
X_CFLAGS = @X_CFLAGS@
|
||||
X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||
X_LIBS = @X_LIBS@
|
||||
X_PRE_LIBS = @X_PRE_LIBS@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
pkgpyexecdir = @pkgpyexecdir@
|
||||
pkgpythondir = @pkgpythondir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
pyexecdir = @pyexecdir@
|
||||
pythondir = @pythondir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
pyatspidir = $(pythondir)/pyatspi
|
||||
pyatspi_PYTHON = \
|
||||
Accessibility.py \
|
||||
appevent.py \
|
||||
constants.py \
|
||||
deviceevent.py \
|
||||
atspienum.py \
|
||||
__init__.py \
|
||||
action.py \
|
||||
application.py \
|
||||
collection.py \
|
||||
component.py \
|
||||
document.py \
|
||||
editabletext.py \
|
||||
hypertext.py \
|
||||
image.py \
|
||||
interface.py \
|
||||
registry.py \
|
||||
role.py \
|
||||
selection.py \
|
||||
state.py \
|
||||
table.py \
|
||||
tablecell.py \
|
||||
text.py \
|
||||
utils.py \
|
||||
value.py
|
||||
|
||||
CLEANFILES = *.pyc
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(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 ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign pyatspi/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign pyatspi/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__maybe_remake_depfiles)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
|
||||
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
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
install-pyatspiPYTHON: $(pyatspi_PYTHON)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(pyatspi_PYTHON)'; dlist=; list2=; test -n "$(pyatspidir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(pyatspidir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(pyatspidir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do \
|
||||
if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \
|
||||
if test -f $$b$$p; then \
|
||||
$(am__strip_dir) \
|
||||
dlist="$$dlist $$f"; \
|
||||
list2="$$list2 $$b$$p"; \
|
||||
else :; fi; \
|
||||
done; \
|
||||
for file in $$list2; do echo $$file; done | $(am__base_list) | \
|
||||
while read files; do \
|
||||
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pyatspidir)'"; \
|
||||
$(INSTALL_DATA) $$files "$(DESTDIR)$(pyatspidir)" || exit $$?; \
|
||||
done || exit $$?; \
|
||||
if test -n "$$dlist"; then \
|
||||
$(am__py_compile) --destdir "$(DESTDIR)" \
|
||||
--basedir "$(pyatspidir)" $$dlist; \
|
||||
else :; fi
|
||||
|
||||
uninstall-pyatspiPYTHON:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(pyatspi_PYTHON)'; test -n "$(pyatspidir)" || list=; \
|
||||
py_files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
||||
test -n "$$py_files" || exit 0; \
|
||||
dir='$(DESTDIR)$(pyatspidir)'; \
|
||||
pyc_files=`echo "$$py_files" | sed 's|$$|c|'`; \
|
||||
pyo_files=`echo "$$py_files" | sed 's|$$|o|'`; \
|
||||
st=0; \
|
||||
for files in "$$py_files" "$$pyc_files" "$$pyo_files"; do \
|
||||
$(am__uninstall_files_from_dir) || st=$$?; \
|
||||
done; \
|
||||
dir='$(DESTDIR)$(pyatspidir)/__pycache__'; \
|
||||
echo "$$py_files" | $(am__pep3147_tweak) | $(am__base_list) | \
|
||||
while read files; do \
|
||||
$(am__uninstall_files_from_dir) || st=$$?; \
|
||||
done || exit $$?; \
|
||||
exit $$st
|
||||
tags TAGS:
|
||||
|
||||
ctags CTAGS:
|
||||
|
||||
cscope cscopelist:
|
||||
|
||||
|
||||
distdir: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||
|
||||
distdir-am: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(pyatspidir)"; 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:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-pyatspiPYTHON
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-pyatspiPYTHON
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
||||
cscopelist-am ctags-am distclean distclean-generic \
|
||||
distclean-libtool distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-pdf install-pdf-am install-ps install-ps-am \
|
||||
install-pyatspiPYTHON install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
|
||||
uninstall-am uninstall-pyatspiPYTHON
|
||||
|
||||
.PRECIOUS: Makefile
|
||||
|
||||
|
||||
# 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,27 @@
|
|||
#Copyright (C) 210 Novell, Inc.
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
__version__ = (1, 9, 0)
|
||||
|
||||
import gi
|
||||
gi.require_version('Atspi', '2.0')
|
||||
from gi.repository import Atspi
|
||||
|
||||
from pyatspi.Accessibility import *
|
||||
|
||||
#This is a re-creation of the namespace pollution implemented
|
||||
#by PyORBit.
|
||||
import sys
|
||||
import pyatspi.Accessibility as Accessibility
|
||||
sys.modules['Accessibility'] = Accessibility
|
|
@ -0,0 +1,114 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
#Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from gi.repository import Atspi
|
||||
from pyatspi.utils import *
|
||||
from pyatspi.interface import *
|
||||
|
||||
__all__ = [
|
||||
"Action",
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class Action(interface):
|
||||
"""
|
||||
An interface through which a user-actionable user interface component
|
||||
can be manipulated. Components which react to mouse or keyboard
|
||||
input from the user, (with the exception of pure text entry fields
|
||||
with no other function), should implement this interface. Typical
|
||||
actions include "click", "press", "release" (for instance for
|
||||
buttons), "menu" (for objects which have context menus invokable
|
||||
from mouse or keyboard), "open" for icons representing files
|
||||
folders, and others.
|
||||
"""
|
||||
|
||||
def getActions(self):
|
||||
"""
|
||||
getActions:
|
||||
Retrieves all the actions at once.
|
||||
@return : an array of an array of strings in the form
|
||||
[[name, description, keybinding], ...]
|
||||
"""
|
||||
return Atspi.Action.get_actions(self.obj)
|
||||
|
||||
def doAction(self, index):
|
||||
"""
|
||||
doAction:
|
||||
@param : index
|
||||
the 0-based index of the action to perform.
|
||||
Causes the object to perform the specified action.
|
||||
@return : a boolean indicating success or failure.
|
||||
"""
|
||||
return Atspi.Action.do_action(self.obj, index)
|
||||
|
||||
def getDescription(self, index):
|
||||
"""
|
||||
getDescription:
|
||||
@param : index
|
||||
the index of the action for which a description is desired.
|
||||
Get the description of the specified action. The description
|
||||
of an action may provide information about the result of action
|
||||
invocation, unlike the action name.
|
||||
@return : a string containing the description of the specified
|
||||
action.
|
||||
"""
|
||||
return Atspi.Action.get_action_description(self.obj, index)
|
||||
|
||||
def getKeyBinding(self, index):
|
||||
"""
|
||||
getKeyBinding:
|
||||
@param : index
|
||||
the 0-based index of the action for which a key binding is requested.
|
||||
Get the key binding associated with a specific action.
|
||||
@return : a string containing the key binding for the specified
|
||||
action, or an empty string ("") if none exists.
|
||||
"""
|
||||
return Atspi.Action.get_key_binding(self.obj, index)
|
||||
|
||||
def getName(self, index):
|
||||
"""
|
||||
getName:
|
||||
@param : index
|
||||
the index of the action whose name is requested.
|
||||
Get the unlocalized name of the specified action. Action names
|
||||
generally describe the user action, i.e. "click" or "press",
|
||||
rather than the result of invoking the action.
|
||||
@return : a string containing the name of the specified action.
|
||||
"""
|
||||
return Atspi.Action.get_action_name(self.obj, index)
|
||||
|
||||
def getLocalizedName(self, index):
|
||||
"""
|
||||
getLocalizedName:
|
||||
@param : index
|
||||
the index of the action whose name is requested.
|
||||
Get the localized name of the specified action. Action names
|
||||
generally describe the user action, i.e. "click" or "press",
|
||||
rather than the result of invoking the action.
|
||||
@return : a string containing the name of the specified action.
|
||||
"""
|
||||
return Atspi.Action.get_localized_name(self.obj, index)
|
||||
|
||||
def get_nActions(self):
|
||||
return Atspi.Action.get_n_actions(self.obj)
|
||||
_nActionsDoc = \
|
||||
"""
|
||||
nActions: a long containing the number of actions this object
|
||||
supports.
|
||||
"""
|
||||
nActions = property(fget=get_nActions, doc=_nActionsDoc)
|
||||
|
||||
#END----------------------------------------------------------------------------
|
|
@ -0,0 +1,91 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
import string
|
||||
|
||||
class _ELessList(list):
|
||||
def __getitem__(self, index):
|
||||
try:
|
||||
return list.__getitem__(self, index)
|
||||
except IndexError:
|
||||
return None
|
||||
|
||||
class EventType(str):
|
||||
"""
|
||||
Wraps the AT-SPI event type string so its components can be accessed
|
||||
individually as klass (can't use the keyword class), major, minor, and detail
|
||||
(klass_major_minor_detail).
|
||||
|
||||
@note: All attributes of an instance of this class should be considered
|
||||
public readable as it is acting a a struct.
|
||||
@ivar klass: Most general event type identifier (object, window, mouse, etc.)
|
||||
@type klass: string
|
||||
@ivar major: Second level event type description
|
||||
@type major: string
|
||||
@ivar minor: Third level event type description
|
||||
@type minor: string
|
||||
@ivar detail: Lowest level event type description
|
||||
@type detail: string
|
||||
@ivar name: Full, unparsed event name as received from AT-SPI
|
||||
@type name: string
|
||||
@cvar format: Names of the event string components
|
||||
@type format: 4-tuple of string
|
||||
"""
|
||||
|
||||
_SEPARATOR = ':'
|
||||
|
||||
def __init__(self, name):
|
||||
"""
|
||||
Parses the full AT-SPI event name into its components
|
||||
(klass:major:minor:detail). If the provided event name is an integer
|
||||
instead of a string, then the event is really a device event.
|
||||
|
||||
@param name: Full AT-SPI event name
|
||||
@type name: string
|
||||
@raise AttributeError: When the given event name is not a valid string
|
||||
"""
|
||||
stripped = name.strip(self._SEPARATOR)
|
||||
separated = stripped.split(self._SEPARATOR, 3)
|
||||
self._separated = _ELessList(separated)
|
||||
|
||||
self.klass = self._separated[0]
|
||||
self.major = self._separated[1]
|
||||
self.minor = self._separated[2]
|
||||
self.detail = self._separated[3]
|
||||
|
||||
def is_subtype(self, event_type, excludeSelf = False):
|
||||
"""
|
||||
Determines if the passed event type is a subtype
|
||||
of this event.
|
||||
"""
|
||||
if event_type.klass and event_type.klass != self.klass:
|
||||
return False
|
||||
else:
|
||||
if event_type.major and event_type.major != self.major:
|
||||
return False
|
||||
else:
|
||||
if event_type.minor and event_type.minor != self.minor:
|
||||
return False
|
||||
if (excludeSelf and event_type.klass == self.klass
|
||||
and event_type.major == self.major and event_type.minor == self.minor):
|
||||
return False
|
||||
return True
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return str(self)
|
||||
|
||||
@property
|
||||
def value(self):
|
||||
return str(self)
|
|
@ -0,0 +1,74 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
#Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from gi.repository import Atspi
|
||||
from pyatspi.utils import *
|
||||
|
||||
__all__ = [
|
||||
"Application",
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class Application:
|
||||
"""
|
||||
An interface identifying an object which is the root of the user
|
||||
interface Accessible hierarchy associated with a running application.
|
||||
Children of Application are typically, but not exclusively, top-level
|
||||
windows.
|
||||
"""
|
||||
|
||||
def __init__(self, obj):
|
||||
self.obj = obj
|
||||
|
||||
def getLocale(self, locale_type):
|
||||
"""
|
||||
Gets the locale in which the application is currently operating.
|
||||
For the current message locale, use lctype LOCALE_TYPE_MESSAGES.
|
||||
@param : lctype
|
||||
The LocaleType for which the locale is queried.
|
||||
@return a string compliant with the POSIX standard for locale
|
||||
description.
|
||||
"""
|
||||
print("pyatspi: getLocale unimplemented")
|
||||
pass
|
||||
|
||||
def get_id(self):
|
||||
return self.obj.get_id()
|
||||
_idDoc = \
|
||||
"""
|
||||
The application instance's unique ID as assigned by the registry.
|
||||
"""
|
||||
id = property(fget=get_id, doc=_idDoc)
|
||||
|
||||
def get_toolkitName(self):
|
||||
return self.obj.get_toolkit_name()
|
||||
_toolkitNameDoc = \
|
||||
"""
|
||||
A string indicating the type of user interface toolkit which
|
||||
is used by the application.
|
||||
"""
|
||||
toolkitName = property(fget=get_toolkitName, doc=_toolkitNameDoc)
|
||||
|
||||
def get_version(self):
|
||||
return self.obj.get_version()
|
||||
_versionDoc = \
|
||||
"""
|
||||
A string indicating the version number of the application's accessibility
|
||||
bridge implementation.
|
||||
"""
|
||||
version = property(fget=get_version, doc=_versionDoc)
|
||||
|
||||
#END----------------------------------------------------------------------------
|
|
@ -0,0 +1,39 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
__all__ = [
|
||||
"AtspiEnum",
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class AtspiEnum(int):
|
||||
def __str__(self):
|
||||
return self._enum_lookup[int(self)]
|
||||
|
||||
def __eq__(self, other):
|
||||
if other is None:
|
||||
return False
|
||||
try:
|
||||
if int(self) == int(other):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
except ValueError:
|
||||
return False
|
||||
|
||||
def __hash__(self):
|
||||
return int(self)
|
||||
|
||||
#END---------------------------------------------------------------------------
|
|
@ -0,0 +1,105 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
#Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from gi.repository import Atspi
|
||||
from pyatspi.atspienum import *
|
||||
from pyatspi.utils import *
|
||||
|
||||
__all__ = [
|
||||
"Collection",
|
||||
"SortOrder",
|
||||
"MatchType",
|
||||
"TreeTraversalType",
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class MatchType(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'MATCH_INVALID',
|
||||
1:'MATCH_ALL',
|
||||
2:'MATCH_ANY',
|
||||
3:'MATCH_NONE',
|
||||
4:'MATCH_EMPTY',
|
||||
5:'MATCH_LAST_DEFINED',
|
||||
}
|
||||
|
||||
class SortOrder(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'SORT_ORDER_INVALID',
|
||||
1:'SORT_ORDER_CANONICAL',
|
||||
2:'SORT_ORDER_FLOW',
|
||||
3:'SORT_ORDER_TAB',
|
||||
4:'SORT_ORDER_REVERSE_CANONICAL',
|
||||
5:'SORT_ORDER_REVERSE_FLOW',
|
||||
6:'SORT_ORDER_REVERSE_TAB',
|
||||
7:'SORT_ORDER_LAST_DEFINED',
|
||||
}
|
||||
|
||||
class TreeTraversalType(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'TREE_RESTRICT_CHILDREN',
|
||||
1:'TREE_RESTRICT_SIBLING',
|
||||
2:'TREE_INORDER',
|
||||
3:'TREE_LAST_DEFINED',
|
||||
}
|
||||
|
||||
class Collection:
|
||||
|
||||
MATCH_ALL = MatchType(1)
|
||||
MATCH_ANY = MatchType(2)
|
||||
MATCH_EMPTY = MatchType(4)
|
||||
MATCH_INVALID = MatchType(0)
|
||||
MATCH_LAST_DEFINED = MatchType(5)
|
||||
MATCH_NONE = MatchType(3)
|
||||
|
||||
SORT_ORDER_CANONICAL = SortOrder(1)
|
||||
SORT_ORDER_FLOW = SortOrder(2)
|
||||
SORT_ORDER_INVALID = SortOrder(0)
|
||||
SORT_ORDER_LAST_DEFINED = SortOrder(7)
|
||||
SORT_ORDER_REVERSE_CANONICAL = SortOrder(4)
|
||||
SORT_ORDER_REVERSE_FLOW = SortOrder(5)
|
||||
SORT_ORDER_REVERSE_TAB = SortOrder(6)
|
||||
SORT_ORDER_TAB = SortOrder(3)
|
||||
|
||||
TREE_INORDER = TreeTraversalType(2)
|
||||
TREE_LAST_DEFINED = TreeTraversalType(3)
|
||||
TREE_RESTRICT_CHILDREN = TreeTraversalType(0)
|
||||
TREE_RESTRICT_SIBLING = TreeTraversalType(1)
|
||||
|
||||
def __init__(self, obj):
|
||||
self.obj = obj
|
||||
|
||||
def isAncestorOf(self, object):
|
||||
return Atspi.Collection.is_ancestor_of(self.obj)
|
||||
|
||||
def createMatchRule(self, states, stateMatchType, attributes, attributeMatchType, roles, roleMatchType, interfaces, interfaceMatchType, invert):
|
||||
attributes_hash = attributeListToHash(attributes)
|
||||
return Atspi.MatchRule.new(states, stateMatchType, attributes_hash, attributeMatchType, roles, roleMatchType, interfaces, interfaceMatchType, invert)
|
||||
|
||||
def freeMatchRule(self, rule):
|
||||
pass
|
||||
|
||||
def getMatches(self, rule, sortby, count, traverse):
|
||||
return Atspi.Collection.get_matches(self.obj, rule, sortby, count, traverse)
|
||||
|
||||
def getMatchesTo(self, current_object, rule, sortby, tree, recurse, count, traverse):
|
||||
return Atspi.Collection.get_matches_to(self.obj, current_object, rule, sortby, tree, recurse, count, traverse)
|
||||
|
||||
def getMatchesFrom(self, current_object, rule, sortby, tree, count, traverse):
|
||||
return Atspi.Collection.get_matches_from(self.obj, current_object, rule, sortby, tree, count, traverse)
|
||||
|
||||
def getActiveDescendant(self):
|
||||
return Atspi.Collection.get_active_descendant(self.obj)
|
|
@ -0,0 +1,227 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
#Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from gi.repository import Atspi
|
||||
from pyatspi.atspienum import *
|
||||
from pyatspi.utils import *
|
||||
from pyatspi.interface import *
|
||||
|
||||
__all__ = [
|
||||
"CoordType",
|
||||
"XY_SCREEN",
|
||||
"XY_WINDOW",
|
||||
"XY_PARENT",
|
||||
"ComponentLayer",
|
||||
"Component",
|
||||
"LAYER_BACKGROUND",
|
||||
"LAYER_CANVAS",
|
||||
"LAYER_INVALID",
|
||||
"LAYER_LAST_DEFINED",
|
||||
"LAYER_MDI",
|
||||
"LAYER_OVERLAY",
|
||||
"LAYER_POPUP",
|
||||
"LAYER_WIDGET",
|
||||
"LAYER_WINDOW",
|
||||
"ScrollType",
|
||||
"SCROLL_TOP_LEFT",
|
||||
"SCROLL_BOTTOM_RIGHT",
|
||||
"SCROLL_TOP_EDGE",
|
||||
"SCROLL_BOTTOM_EDGE",
|
||||
"SCROLL_LEFT_EDGE",
|
||||
"SCROLL_RIGHT_EDGE",
|
||||
"SCROLL_ANYWHERE",
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class CoordType(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'XY_SCREEN',
|
||||
1:'XY_WINDOW',
|
||||
2:'XY_PARENT',
|
||||
}
|
||||
|
||||
XY_SCREEN = CoordType(0)
|
||||
XY_WINDOW = CoordType(1)
|
||||
XY_PARENT = CoordType(2)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class ComponentLayer(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'LAYER_INVALID',
|
||||
1:'LAYER_BACKGROUND',
|
||||
2:'LAYER_CANVAS',
|
||||
3:'LAYER_WIDGET',
|
||||
4:'LAYER_MDI',
|
||||
5:'LAYER_POPUP',
|
||||
6:'LAYER_OVERLAY',
|
||||
7:'LAYER_WINDOW',
|
||||
8:'LAYER_LAST_DEFINED',
|
||||
}
|
||||
|
||||
LAYER_BACKGROUND = ComponentLayer(1)
|
||||
LAYER_CANVAS = ComponentLayer(2)
|
||||
LAYER_INVALID = ComponentLayer(0)
|
||||
LAYER_LAST_DEFINED = ComponentLayer(8)
|
||||
LAYER_MDI = ComponentLayer(4)
|
||||
LAYER_OVERLAY = ComponentLayer(6)
|
||||
LAYER_POPUP = ComponentLayer(5)
|
||||
LAYER_WIDGET = ComponentLayer(3)
|
||||
LAYER_WINDOW = ComponentLayer(7)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class ScrollType(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'SCROLL_TOP_LEFT',
|
||||
1:'SCROLL_BOTTOM_RIGHT',
|
||||
2:'SCROLL_TOP_EDGE',
|
||||
3:'SCROLL_BOTTOM_EDGE',
|
||||
4:'SCROLL_LEFT_EDGE',
|
||||
5:'SCROLL_RIGHT_EDGE',
|
||||
6:'SCROLL_ANYWHERE',
|
||||
}
|
||||
|
||||
SCROLL_ANYWHERE = ScrollType(6)
|
||||
SCROLL_BOTTOM_EDGE = ScrollType(3)
|
||||
SCROLL_BOTTOM_RIGHT = ScrollType(1)
|
||||
SCROLL_LEFT_EDGE = ScrollType(4)
|
||||
SCROLL_RIGHT_EDGE = ScrollType(5)
|
||||
SCROLL_TOP_EDGE = ScrollType(2)
|
||||
SCROLL_TOP_LEFT = ScrollType(0)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class Component(interface):
|
||||
"""
|
||||
The Component interface is implemented by objects which occupy
|
||||
on-screen space, e.g. objects which have onscreen visual representations.
|
||||
The methods in Component allow clients to identify where the
|
||||
objects lie in the onscreen coordinate system, their relative
|
||||
size, stacking order, and position. It also provides a mechanism
|
||||
whereby keyboard focus may be transferred to specific user interface
|
||||
elements programmatically. This is a 2D API, coordinates of 3D
|
||||
objects are projected into the 2-dimensional screen view for
|
||||
purposes of this interface.
|
||||
"""
|
||||
|
||||
def contains(self, x, y, coord_type):
|
||||
"""
|
||||
@return True if the specified point lies within the Component's
|
||||
bounding box, False otherwise.
|
||||
"""
|
||||
return Atspi.Component.contains(self.obj, x, y, coord_type)
|
||||
|
||||
def getAccessibleAtPoint(self, x, y, coord_type):
|
||||
"""
|
||||
@return the Accessible child whose bounding box contains the
|
||||
specified point.
|
||||
"""
|
||||
return Atspi.Component.get_accessible_at_point(self.obj, x, y, coord_type)
|
||||
|
||||
def getAlpha(self):
|
||||
"""
|
||||
Obtain the alpha value of the component. An alpha value of 1.0
|
||||
or greater indicates that the object is fully opaque, and an
|
||||
alpha value of 0.0 indicates that the object is fully transparent.
|
||||
Negative alpha values have no defined meaning at this time.
|
||||
"""
|
||||
return Atspi.Component.get_alpha(self.obj)
|
||||
|
||||
def getExtents(self, coord_type):
|
||||
"""
|
||||
Obtain the Component's bounding box, in pixels, relative to the
|
||||
specified coordinate system.
|
||||
The returned values are meaningful only if the Component has
|
||||
both STATE_VISIBLE and STATE_SHOWING.
|
||||
@param coord_type
|
||||
@return a BoundingBox which entirely contains the object's onscreen
|
||||
visual representation.
|
||||
"""
|
||||
return getBoundingBox(Atspi.Component.get_extents(self.obj, coord_type))
|
||||
|
||||
def getLayer(self):
|
||||
"""
|
||||
@return the ComponentLayer in which this object resides.
|
||||
"""
|
||||
return Atspi.Component.get_layer(self.obj)
|
||||
|
||||
def getMDIZOrder(self):
|
||||
"""
|
||||
Obtain the relative stacking order (i.e. 'Z' order) of an object.
|
||||
Larger values indicate that an object is on "top" of the stack,
|
||||
therefore objects with smaller MDIZOrder may be obscured by objects
|
||||
with a larger MDIZOrder, but not vice-versa.
|
||||
@return an integer indicating the object's place in the stacking
|
||||
order.
|
||||
"""
|
||||
return Atspi.Component.get_mdi_z_order(self.obj)
|
||||
|
||||
def getPosition(self, coord_type):
|
||||
"""
|
||||
Obtain the position of the current component in the coordinate
|
||||
system specified by coord_type.
|
||||
The returned values are meaningful only if the Component has
|
||||
both STATE_VISIBLE and STATE_SHOWING.
|
||||
@param : coord_type
|
||||
@param : x
|
||||
an out parameter which will be back-filled with the returned
|
||||
x coordinate.
|
||||
@param : y
|
||||
an out parameter which will be back-filled with the returned
|
||||
y coordinate.
|
||||
"""
|
||||
return pointToList(Atspi.Component.get_position(self.obj, coord_type))
|
||||
|
||||
def getSize(self):
|
||||
"""
|
||||
Obtain the size, in the coordinate system specified by coord_type,
|
||||
of the rectangular area which fully contains the object's visual
|
||||
representation, without accounting for viewport clipping.
|
||||
The returned values are meaningful only if the Component has
|
||||
both STATE_VISIBLE and STATE_SHOWING.
|
||||
@param : width
|
||||
the object's horizontal extents in the specified coordinate system.
|
||||
@param : height
|
||||
the object's vertical extents in the specified coordinate system.
|
||||
"""
|
||||
return pointToList(Atspi.Component.get_size(self.obj))
|
||||
|
||||
def grabFocus(self):
|
||||
"""
|
||||
Request that the object obtain keyboard focus.
|
||||
@return True if keyboard focus was successfully transferred to
|
||||
the Component.
|
||||
"""
|
||||
return Atspi.Component.grab_focus(self.obj)
|
||||
|
||||
def scrollTo(self, scroll_type):
|
||||
"""
|
||||
Makes the object visible on the screen at a given position by
|
||||
scrolling all necessary parents.
|
||||
@return True if scrolling was successful.
|
||||
"""
|
||||
return Atspi.Component.scroll_to(self.obj, scroll_type)
|
||||
|
||||
def scrollToPoint(self, coord_type, x, y):
|
||||
"""
|
||||
Makes the object visible on the screen at a given position by
|
||||
scrolling all necessary parents.
|
||||
@return True if scrolling was successful.
|
||||
"""
|
||||
return Atspi.Component.scroll_to_point(self.obj, coord_type, x, y)
|
||||
|
||||
#END----------------------------------------------------------------------------
|
|
@ -0,0 +1,149 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
#copyright: Copyright (c) 2005, 2007 IBM Corporation
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
#Portions of this code originally licensed and copyright (c) 2005, 2007
|
||||
#IBM Corporation under the BSD license, available at
|
||||
#U{http://www.opensource.org/licenses/bsd-license.php}
|
||||
|
||||
#authors: Peter Parente, Mark Doffman
|
||||
|
||||
# Constants used in the Component interface to get screen coordinates
|
||||
DESKTOP_COORDS = 0
|
||||
WINDOW_COORDS = 1
|
||||
|
||||
# Constants used to synthesize mouse events
|
||||
MOUSE_B1P = 'b1p'
|
||||
MOUSE_B1R = 'b1r'
|
||||
MOUSE_B1C = 'b1c'
|
||||
MOUSE_B1D = 'b1d'
|
||||
MOUSE_B2P = 'b2p'
|
||||
MOUSE_B2R = 'b2r'
|
||||
MOUSE_B2C = 'b2c'
|
||||
MOUSE_B2D = 'b2d'
|
||||
MOUSE_B3P = 'b3p'
|
||||
MOUSE_B3R = 'b3r'
|
||||
MOUSE_B3C = 'b3c'
|
||||
MOUSE_B3D = 'b3d'
|
||||
MOUSE_ABS = 'abs'
|
||||
MOUSE_REL = 'rel'
|
||||
|
||||
# events that clear cached properties
|
||||
CACHE_EVENTS = ['object:property-change:accessible-name',
|
||||
'object:property-change:accessible-description',
|
||||
'object:property-change:accessible-role',
|
||||
'object:property-change:accessible-parent']
|
||||
|
||||
CACHE_PROPERTIES = ''
|
||||
|
||||
# This was placed into at-spi-corba because it apparently had a bug where
|
||||
# one could not register for all the subevents of an event given only an
|
||||
# AT-SPI event class (ie, first part of the event name). Pyatspi2 does not
|
||||
# have this issue, but will leave the tree as-is for now, and some programs
|
||||
# pass it to registerEventListener, so the constant needs to stay.
|
||||
# Keys are event names having subevents and values are the subevents
|
||||
# under the key event; handlers *can* be registered for events not in this tree
|
||||
EVENT_TREE = {
|
||||
'terminal':
|
||||
['terminal:line-changed',
|
||||
'terminal:columncount-changed',
|
||||
'terminal:linecount-changed',
|
||||
'terminal:application-changed',
|
||||
'terminal:charwidth-changed'
|
||||
],
|
||||
'document':
|
||||
['document:load-complete',
|
||||
'document:reload',
|
||||
'document:load-stopped',
|
||||
'document:attributes-changed'
|
||||
'document:page-changed'
|
||||
],
|
||||
'object':
|
||||
['object:property-change',
|
||||
'object:bounds-changed',
|
||||
'object:link-selected',
|
||||
'object:state-changed',
|
||||
'object:children-changed',
|
||||
'object:visible-data-changed',
|
||||
'object:selection-changed',
|
||||
'object:model-changed',
|
||||
'object:active-descendant-changed',
|
||||
'object:row-inserted',
|
||||
'object:row-reordered',
|
||||
'object:row-deleted',
|
||||
'object:column-inserted',
|
||||
'object:column-reordered',
|
||||
'object:column-deleted',
|
||||
'object:text-bounds-changed',
|
||||
'object:text-selection-changed',
|
||||
'object:text-changed',
|
||||
'object:text-attributes-changed',
|
||||
'object:text-caret-moved',
|
||||
'object:attributes-changed'],
|
||||
'object:text-changed' :
|
||||
['object:text-changed:insert',
|
||||
'object:text-changed:delete'],
|
||||
'object:property-change' :
|
||||
['object:property-change:accessible-parent',
|
||||
'object:property-change:accessible-name',
|
||||
'object:property-change:accessible-description',
|
||||
'object:property-change:accessible-value',
|
||||
'object:property-change:accessible-role',
|
||||
'object:property-change:accessible-table-caption',
|
||||
'object:property-change:accessible-table-column-description',
|
||||
'object:property-change:accessible-table-column-header',
|
||||
'object:property-change:accessible-table-row-description',
|
||||
'object:property-change:accessible-table-row-header',
|
||||
'object:property-change:accessible-table-summary'],
|
||||
'object:children-changed' :
|
||||
['object:children-changed:add',
|
||||
'object:children-changed:remove'],
|
||||
'object:state-changed' :
|
||||
['object:state-changed:'],
|
||||
'mouse' :
|
||||
['mouse:abs',
|
||||
'mouse:rel',
|
||||
'mouse:button'],
|
||||
'mouse:button' :
|
||||
['mouse:button:1p',
|
||||
'mouse:button:1r',
|
||||
'mouse:button:2p',
|
||||
'mouse:button:2r',
|
||||
'mouse:button:3p',
|
||||
'mouse:button:3r'],
|
||||
'screen-reader' :
|
||||
['screen-reader:region-changed'],
|
||||
'window' :
|
||||
['window:minimize',
|
||||
'window:maximize',
|
||||
'window:restore',
|
||||
'window:close',
|
||||
'window:create',
|
||||
'window:reparent',
|
||||
'window:desktop-create',
|
||||
'window:desktop-destroy',
|
||||
'window:activate',
|
||||
'window:deactivate',
|
||||
'window:raise',
|
||||
'window:lower',
|
||||
'window:move',
|
||||
'window:resize',
|
||||
'window:shade',
|
||||
'window:unshade',
|
||||
'window:restyle'],
|
||||
'focus' :
|
||||
['focus:']
|
||||
}
|
||||
|
||||
from pyatspi.state import *
|
|
@ -0,0 +1,255 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
import pyatspi.registry as registry
|
||||
|
||||
from pyatspi.atspienum import *
|
||||
|
||||
import traceback
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class PressedEventType(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'KEY_PRESSED_EVENT',
|
||||
1:'KEY_RELEASED_EVENT',
|
||||
2:'BUTTON_PRESSED_EVENT',
|
||||
3:'BUTTON_RELEASED_EVENT',
|
||||
}
|
||||
|
||||
KEY_PRESSED_EVENT = PressedEventType(0)
|
||||
KEY_RELEASED_EVENT = PressedEventType(1)
|
||||
BUTTON_PRESSED_EVENT = PressedEventType(2)
|
||||
BUTTON_RELEASED_EVENT = PressedEventType(3)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class ControllerEventMask(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
1:'KEY_PRESSED_EVENT_MASK',
|
||||
2:'KEY_RELEASED_EVENT_MASK',
|
||||
4:'BUTTON_PRESSED_EVENT_MASK',
|
||||
8:'BUTTON_RELEASED_EVENT_MASK',
|
||||
}
|
||||
|
||||
KEY_PRESSED_EVENT_MASK = ControllerEventMask(1)
|
||||
KEY_RELEASED_EVENT_MASK = ControllerEventMask(2)
|
||||
BUTTON_PRESSED_EVENT_MASK = ControllerEventMask(4)
|
||||
BUTTON_RELEASED_EVENT_MASK = ControllerEventMask(8)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class KeyEventType(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'KEY_PRESSED',
|
||||
1:'KEY_RELEASED',
|
||||
}
|
||||
KEY_PRESSED = KeyEventType(0)
|
||||
KEY_RELEASED = KeyEventType(1)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class KeySynthType(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'KEY_PRESS',
|
||||
1:'KEY_RELEASE',
|
||||
2:'KEY_PRESSRELEASE',
|
||||
3:'KEY_SYM',
|
||||
4:'KEY_STRING',
|
||||
5:'KEY_LOCKMODIFIERS',
|
||||
6:'KEY_UNLOCKMODIFIERS',
|
||||
}
|
||||
|
||||
KEY_LOCKMODIFIERS = KeySynthType(5)
|
||||
KEY_PRESS = KeySynthType(0)
|
||||
KEY_PRESSRELEASE = KeySynthType(2)
|
||||
KEY_RELEASE = KeySynthType(1)
|
||||
KEY_STRING = KeySynthType(4)
|
||||
KEY_SYM = KeySynthType(3)
|
||||
KEY_UNLOCKMODIFIERS = KeySynthType(6)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class ModifierType(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'MODIFIER_SHIFT',
|
||||
1:'MODIFIER_SHIFTLOCK',
|
||||
2:'MODIFIER_CONTROL',
|
||||
3:'MODIFIER_ALT',
|
||||
4:'MODIFIER_META',
|
||||
5:'MODIFIER_META2',
|
||||
6:'MODIFIER_META3',
|
||||
7:'MODIFIER_NUMLOCK',
|
||||
}
|
||||
|
||||
MODIFIER_ALT = ModifierType(3)
|
||||
MODIFIER_CONTROL = ModifierType(2)
|
||||
MODIFIER_META = ModifierType(4)
|
||||
MODIFIER_META2 = ModifierType(5)
|
||||
MODIFIER_META3 = ModifierType(6)
|
||||
MODIFIER_NUMLOCK = ModifierType(7)
|
||||
MODIFIER_SHIFT = ModifierType(0)
|
||||
MODIFIER_SHIFTLOCK = ModifierType(1)
|
||||
|
||||
def allModifiers():
|
||||
"""
|
||||
Generates all possible keyboard modifiers for use with
|
||||
L{registry.Registry.registerKeystrokeListener}.
|
||||
"""
|
||||
mask = 0
|
||||
while mask <= (1 << MODIFIER_NUMLOCK):
|
||||
yield mask
|
||||
mask += 1
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class DeviceEvent(list):
|
||||
"""
|
||||
Wraps an AT-SPI device event with a more Pythonic interface. Primarily adds
|
||||
a consume attribute which can be used to cease propagation of a device event.
|
||||
|
||||
@ivar consume: Should this event be consumed and not allowed to pass on to
|
||||
observers further down the dispatch chain in this process or possibly
|
||||
system wide?
|
||||
@type consume: boolean
|
||||
@ivar type: Kind of event, KEY_PRESSED_EVENT or KEY_RELEASED_EVENT
|
||||
@type type: Accessibility.EventType
|
||||
@ivar id: Serial identifier for this key event
|
||||
@type id: integer
|
||||
@ivar hw_code: Hardware scan code for the key
|
||||
@type hw_code: integer
|
||||
@ivar modifiers: Modifiers held at the time of the key event
|
||||
@type modifiers: integer
|
||||
@ivar timestamp: Time at which the event occurred relative to some platform
|
||||
dependent starting point (e.g. XWindows start time)
|
||||
@type timestamp: integer
|
||||
@ivar event_string: String describing the key pressed (e.g. keysym)
|
||||
@type event_string: string
|
||||
@ivar is_text: Is the event representative of text to be inserted (True), or
|
||||
of a control key (False)?
|
||||
@type is_text: boolean
|
||||
"""
|
||||
def __new__(cls, type, id, hw_code, modifiers, timestamp, event_string, is_text):
|
||||
return list.__new__(cls, (type, id, hw_code, modifiers, timestamp, event_string, is_text))
|
||||
def __init__(self, type, id, hw_code, modifiers, timestamp, event_string, is_text):
|
||||
list.__init__(self, (type, id, hw_code, modifiers, timestamp, event_string, is_text))
|
||||
self.consume = False
|
||||
def _get_type(self):
|
||||
return self[0]
|
||||
def _set_type(self, val):
|
||||
self[0] = val
|
||||
type = property(fget=_get_type, fset=_set_type)
|
||||
def _get_id(self):
|
||||
return self[1]
|
||||
def _set_id(self, val):
|
||||
self[1] = val
|
||||
id = property(fget=_get_id, fset=_set_id)
|
||||
def _get_hw_code(self):
|
||||
return self[2]
|
||||
def _set_hw_code(self, val):
|
||||
self[2] = val
|
||||
hw_code = property(fget=_get_hw_code, fset=_set_hw_code)
|
||||
def _get_modifiers(self):
|
||||
return self[3]
|
||||
def _set_modifiers(self, val):
|
||||
self[3] = val
|
||||
modifiers = property(fget=_get_modifiers, fset=_set_modifiers)
|
||||
def _get_timestamp(self):
|
||||
return self[4]
|
||||
def _set_timestamp(self, val):
|
||||
self[4] = val
|
||||
timestamp = property(fget=_get_timestamp, fset=_set_timestamp)
|
||||
def _get_event_string(self):
|
||||
return self[5]
|
||||
def _set_event_string(self, val):
|
||||
self[5] = val
|
||||
event_string = property(fget=_get_event_string, fset=_set_event_string)
|
||||
def _get_is_text(self):
|
||||
return self[6]
|
||||
def _set_is_text(self, val):
|
||||
self[6] = val
|
||||
is_text = property(fget=_get_is_text, fset=_set_is_text)
|
||||
|
||||
def __str__(self):
|
||||
"""
|
||||
Builds a human readable representation of the event.
|
||||
|
||||
@return: Event description
|
||||
@rtype: string
|
||||
"""
|
||||
import constants
|
||||
if self.type == constants.KEY_PRESSED_EVENT:
|
||||
kind = 'pressed'
|
||||
elif self.type == constants.KEY_RELEASED_EVENT:
|
||||
kind = 'released'
|
||||
return """\
|
||||
%s
|
||||
\thw_code: %d
|
||||
\tevent_string: %s
|
||||
\tmodifiers: %d
|
||||
\tid: %d
|
||||
\ttimestamp: %d
|
||||
\tis_text: %s""" % (kind, self.hw_code, self.event_string, self.modifiers,
|
||||
self.id, self.timestamp, self.is_text)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class EventListenerMode(list):
|
||||
def __new__(cls, synchronous, preemptive, global_):
|
||||
return list.__new__(cls, (synchronous, preemptive, global_))
|
||||
def __init__(self, synchronous, preemptive, global_):
|
||||
list.__init__(self, (synchronous, preemptive, global_))
|
||||
def _get_synchronous(self):
|
||||
return self[0]
|
||||
def _set_synchronous(self, val):
|
||||
self[0] = val
|
||||
synchronous = property(fget=_get_synchronous, fset=_set_synchronous)
|
||||
def _get_preemptive(self):
|
||||
return self[1]
|
||||
def _set_preemptive(self, val):
|
||||
self[1] = val
|
||||
preemptive = property(fget=_get_preemptive, fset=_set_preemptive)
|
||||
def _get_global_(self):
|
||||
return self[2]
|
||||
def _set_global_(self, val):
|
||||
self[2] = val
|
||||
global_ = property(fget=_get_global_, fset=_set_global_)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class KeyDefinition(list):
|
||||
def __new__(cls, keycode, keysym, keystring, unused):
|
||||
return list.__new__(cls, (keycode, keysym, keystring, unused))
|
||||
def __init__(self, keycode, keysym, keystring, unused):
|
||||
list.__init__(self, (keycode, keysym, keystring, unused))
|
||||
def _get_keycode(self):
|
||||
return self[0]
|
||||
def _set_keycode(self, val):
|
||||
self[0] = val
|
||||
keycode = property(fget=_get_keycode, fset=_set_keycode)
|
||||
def _get_keysym(self):
|
||||
return self[1]
|
||||
def _set_keysym(self, val):
|
||||
self[1] = val
|
||||
keysym = property(fget=_get_keysym, fset=_set_keysym)
|
||||
def _get_keystring(self):
|
||||
return self[2]
|
||||
def _set_keystring(self, val):
|
||||
self[2] = val
|
||||
keystring = property(fget=_get_keystring, fset=_set_keystring)
|
||||
def _get_unused(self):
|
||||
return self[3]
|
||||
def _set_unused(self, val):
|
||||
self[3] = val
|
||||
unused = property(fget=_get_unused, fset=_set_unused)
|
|
@ -0,0 +1,86 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
#Copyright (C) 2010 Novell, Inc.
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from gi.repository import Atspi
|
||||
from pyatspi.utils import *
|
||||
from pyatspi.interface import *
|
||||
|
||||
__all__ = [
|
||||
"Document",
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class Document(interface):
|
||||
"""
|
||||
Primarily a 'tagging' interface which indicates the start of
|
||||
document content in the Accessibility hierarchy. Accessible objects
|
||||
below the node implementing Document are normally assumed to
|
||||
be part of the document content. Attributes of Document are those
|
||||
attributes associated with the document as a whole. Objects that
|
||||
implement Document are normally expected to implement Collection
|
||||
as well.
|
||||
"""
|
||||
|
||||
def getAttributeValue(self, key):
|
||||
"""
|
||||
Gets the value of a single attribute, if specified for the document
|
||||
as a whole.
|
||||
@param : attributename
|
||||
a string indicating the name of a specific attribute (name-value
|
||||
pair) being queried.
|
||||
@return a string corresponding to the value of the specified
|
||||
attribute, or an empty string if the attribute is unspecified
|
||||
for the object.
|
||||
"""
|
||||
return Atspi.Document.get_document_attribute_value(self.obj, key)
|
||||
|
||||
def getAttributes(self):
|
||||
"""
|
||||
Gets all attributes specified for a document as a whole. For
|
||||
attributes which change within the document content, see Accessibility::Text::getAttributes
|
||||
instead.
|
||||
@return an AttributeSet containing the attributes of the document,
|
||||
as name-value pairs.
|
||||
"""
|
||||
ret = Atspi.Document.get_document_attributes(self.obj)
|
||||
return [key + ':' + value for key, value in ret.items()]
|
||||
|
||||
def getLocale(self):
|
||||
"""
|
||||
Gets the locale associated with the document's content. e.g.
|
||||
the locale for LOCALE_TYPE_MESSAGES.
|
||||
@return a string compliant with the POSIX standard for locale
|
||||
description.
|
||||
"""
|
||||
return Atspi.Document.get_locale(self.obj)
|
||||
|
||||
def getCurrentPageNumber(self):
|
||||
"""
|
||||
Gets the current page number associated with the document.
|
||||
@return a integer with the current page number. -1 if error
|
||||
or unknown.
|
||||
"""
|
||||
return Atspi.Document.get_current_page_number(self.obj)
|
||||
|
||||
def getPageCount(self):
|
||||
"""
|
||||
Gets the page count of the document.
|
||||
@return a integer with the page count of the document.
|
||||
-1 if error or unknown.
|
||||
"""
|
||||
return Atspi.Document.get_page_count(self.obj)
|
||||
|
||||
#END----------------------------------------------------------------------------
|
|
@ -0,0 +1,115 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from pyatspi.text import *
|
||||
from gi.repository import Atspi
|
||||
from pyatspi.utils import *
|
||||
|
||||
__all__ = [
|
||||
"EditableText",
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class EditableText(Text):
|
||||
"""
|
||||
Derived from interface Text, EditableText provides methods for
|
||||
modifying textual content of components which support editing.
|
||||
EditableText also interacts with the system clipboard via copyText,
|
||||
cutText, and pasteText.
|
||||
"""
|
||||
|
||||
def copyText(self, start, end):
|
||||
"""
|
||||
Copy a range of text into the system clipboard.
|
||||
@param : startPos
|
||||
the character offset of the first character in the range of text
|
||||
being copied.
|
||||
@param : endPos
|
||||
the offset of the first character past the end of the range of
|
||||
text being copied.
|
||||
"""
|
||||
return Atspi.EditableText.copy_text(self.obj, start, end)
|
||||
|
||||
def cutText(self, start, end):
|
||||
"""
|
||||
Excise a range of text from a Text object, copying it into the
|
||||
system clipboard.
|
||||
@param : startPos
|
||||
the character offset of the first character in the range of text
|
||||
being cut.
|
||||
@param : endPos
|
||||
the offset of the first character past the end of the range of
|
||||
text being cut.
|
||||
@return True if the text was successfully cut, False otherwise.
|
||||
"""
|
||||
return Atspi.EditableText.cut_text(self.obj, start, end)
|
||||
|
||||
def deleteText(self, start, end):
|
||||
"""
|
||||
Excise a range of text from a Text object without copying it
|
||||
into the system clipboard.
|
||||
@param : startPos
|
||||
the character offset of the first character in the range of text
|
||||
being deleted.
|
||||
@param : endPos
|
||||
the offset of the first character past the end of the range of
|
||||
text being deleted.
|
||||
@return True if the text was successfully deleted, False otherwise.
|
||||
"""
|
||||
return Atspi.EditableText.delete_text(self.obj, start, end)
|
||||
|
||||
def insertText(self, position, text, length):
|
||||
"""
|
||||
Insert new text contents into an existing text object at a given
|
||||
location, while retaining the old contents.
|
||||
@param : position
|
||||
the character offset into the Text implementor's content at which
|
||||
the new content will be inserted.
|
||||
@param : text
|
||||
a UTF-8 string of which length characters will be inserted into
|
||||
the text object's text buffer.
|
||||
@param : length
|
||||
the number of characters of text to insert. If the character
|
||||
count of text is less than or equal to length, the entire contents
|
||||
of text will be inserted.
|
||||
@return True if the text content was successfully inserted, False
|
||||
otherwise.
|
||||
"""
|
||||
return Atspi.EditableText.insert_text(self.obj, position, text, length)
|
||||
|
||||
def pasteText(self, position):
|
||||
"""
|
||||
Copy the text contents of the system clipboard, if any, into
|
||||
a Text object, inserting it at a particular character offset.
|
||||
@param : position
|
||||
the character offset before which the text will be inserted.
|
||||
@return True if the text was successfully pasted into the Text
|
||||
object, False otherwise.
|
||||
"""
|
||||
return Atspi.EditableText.paste_text(self.obj, position)
|
||||
|
||||
def setTextContents(self, contents):
|
||||
"""
|
||||
Replace the text contents with a new string, discarding the old
|
||||
contents.
|
||||
@param : newContents
|
||||
a UTF-8 string with which the text object's contents will be
|
||||
replaced.
|
||||
@return True if the text content was successfully changed, False
|
||||
otherwise.
|
||||
"""
|
||||
return Atspi.EditableText.set_text_contents(self.obj, contents)
|
||||
|
||||
#END----------------------------------------------------------------------------
|
|
@ -0,0 +1,65 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
#Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from gi.repository import Atspi
|
||||
from pyatspi.utils import *
|
||||
from pyatspi.interface import *
|
||||
|
||||
__all__ = [
|
||||
"Hypertext",
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class Hypertext(interface):
|
||||
"""
|
||||
An interface used for objects which implement linking between
|
||||
multiple resource or content locations, or multiple 'markers'
|
||||
within a single document. A Hypertext instance is associated
|
||||
with one or more Hyperlinks, which are associated with particular
|
||||
offsets within the Hypertext's included content.
|
||||
"""
|
||||
|
||||
def getLink(self, index):
|
||||
"""
|
||||
Get one of the Hyperlinks associated with this Hypertext object,
|
||||
by index.
|
||||
@param : linkIndex
|
||||
an integer from 0 to getNLinks() - 1.
|
||||
@return the Hyperlink in this Hypertext object.
|
||||
"""
|
||||
return Atspi.Hypertext.get_link(self.obj, index)
|
||||
|
||||
def getLinkIndex(self, character_index):
|
||||
"""
|
||||
Get the hyperlink index, if any, associated with a particular
|
||||
character offset in the Hypertext object. For Hypertext implementors
|
||||
without textual content, all hyperlinks are associated with character
|
||||
offset '0'.
|
||||
@return the index of the Hyperlink associated with character
|
||||
offset characterIndex, or -1 if no Hyperlink is associated with
|
||||
that character offset.
|
||||
"""
|
||||
return Atspi.Hypertext.get_link_index(self.obj, character_index)
|
||||
|
||||
def getNLinks(self):
|
||||
"""
|
||||
Query the hypertext object for the number of Hyperlinks it contains.
|
||||
@return the number of Hyperlinks associated with this Hypertext
|
||||
object, as a long integer.
|
||||
"""
|
||||
return Atspi.Hypertext.get_n_links(self.obj)
|
||||
|
||||
#END----------------------------------------------------------------------------
|
|
@ -0,0 +1,109 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
#Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from gi.repository import Atspi
|
||||
from pyatspi.utils import *
|
||||
|
||||
__all__ = [
|
||||
"Image",
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class Image:
|
||||
"""
|
||||
An interface implemented by objects which render image data or
|
||||
pictorial information to the screen. When onscreen components
|
||||
include graphical information that is not purely intended to
|
||||
enhance "3d effect" or visual layout, but which conveys some
|
||||
semantic or informational content to the sighted user, they should
|
||||
implement Image, and that semantic content should be conveyed
|
||||
textually to the extent possible via the image description, as
|
||||
well as the Accessible::name and Accessible::description properties.
|
||||
"""
|
||||
|
||||
def __init__(self, obj):
|
||||
self.obj = obj
|
||||
|
||||
def getImageExtents(self, coordType):
|
||||
"""
|
||||
Obtain a bounding box which entirely contains the image contents,
|
||||
as displayed on screen. The bounds returned do not account for
|
||||
any viewport clipping or the fact that the image may be partially
|
||||
or wholly obscured by other onscreen content.
|
||||
The returned values are meaningful only if the Image has
|
||||
both STATE_VISIBLE and STATE_SHOWING.
|
||||
@param : coordType
|
||||
If 0, the returned bounding box position is returned relative
|
||||
to the screen; if 1, the bounding box position is returned relative
|
||||
to the containing window.
|
||||
@return a BoundingBox enclosing the image's onscreen representation.
|
||||
"""
|
||||
return getBoundingBox(Atspi.Image.get_image_extents(self.obj, coordType))
|
||||
|
||||
def getImagePosition(self, coord_type):
|
||||
"""
|
||||
Get the coordinates of the current image position on screen.
|
||||
The returned values are meaningful only if the Image has
|
||||
both STATE_VISIBLE and STATE_SHOWING.
|
||||
@param : x
|
||||
Back-filled with the x coordinate of the onscreen image (i.e.
|
||||
the minimum x coordinate)
|
||||
@param : y
|
||||
Back-filled with the y coordinate of the onscreen image (i.e.
|
||||
the minimum y coordinate)
|
||||
@param : coordType
|
||||
If 0, the returned x and y coordinates are returned relative
|
||||
to the screen; if 1, they are returned relative to the containing
|
||||
window.
|
||||
"""
|
||||
return pointToList(Atspi.Image.get_image_position(self.obj, coord_type))
|
||||
|
||||
def getImageSize(self):
|
||||
"""
|
||||
Obtain the width and height of the current onscreen view of the
|
||||
image. The extents returned do not account for any viewport clipping
|
||||
or the fact that the image may be partially or wholly obscured
|
||||
by other onscreen content.
|
||||
The returned values are meaningful only if the Image has
|
||||
both STATE_VISIBLE and STATE_SHOWING.
|
||||
@param : width
|
||||
Back-filled with the x extents of the onscreen image (i.e. the
|
||||
image width in pixels)
|
||||
@param : height
|
||||
Back-filled with the y extents of the onscreen image (i.e. the
|
||||
image height in pixels)
|
||||
"""
|
||||
return pointToList(Atspi.Image.get_image_size(self.obj))
|
||||
|
||||
def get_imageDescription(self):
|
||||
return Atspi.Image.get_image_description(self.obj)
|
||||
_imageDescriptionDoc = \
|
||||
"""
|
||||
A UTF-8 string providing a textual description of what is visually
|
||||
depicted in the image.
|
||||
"""
|
||||
imageDescription = property(fget=get_imageDescription, doc=_imageDescriptionDoc)
|
||||
|
||||
def get_imageLocale(self):
|
||||
return Atspi.Image.get_image_locale(self.obj)
|
||||
_imageLocaleDoc = \
|
||||
"""
|
||||
A string corresponding to the POSIX LC_MESSAGES locale used by
|
||||
the imageDescription.
|
||||
"""
|
||||
imageLocale = property(fget=get_imageLocale, doc=_imageLocaleDoc)
|
||||
|
||||
#END----------------------------------------------------------------------------
|
|
@ -0,0 +1,28 @@
|
|||
#Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from gi.repository import Atspi
|
||||
from pyatspi.utils import *
|
||||
#from pyatspi.component import *
|
||||
|
||||
__all__ = [
|
||||
"interface"
|
||||
]
|
||||
|
||||
class interface(object):
|
||||
def __init__(self, obj):
|
||||
self.obj = obj
|
||||
|
||||
def __eq__(a, b):
|
||||
return (a.__class__ == b.__class__ and a.obj == b.obj)
|
|
@ -0,0 +1,448 @@
|
|||
#Copyright (C) 2010 Novell, Inc.
|
||||
#Copyright (C) 2008 Codethink Ltd
|
||||
#copyright: Copyright (c) 2005, 2007 IBM Corporation
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
#Portions of this code originally licensed and copyright (c) 2005, 2007
|
||||
#IBM Corporation under the BSD license, available at
|
||||
#U{http://www.opensource.org/licenses/bsd-license.php}
|
||||
|
||||
#authors: Peter Parente, Mark Doffman
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
__all__ = ["Registry",
|
||||
"MAIN_LOOP_GLIB",
|
||||
"MAIN_LOOP_NONE",
|
||||
"set_default_registry"]
|
||||
|
||||
import os as _os
|
||||
from gi.repository import Atspi
|
||||
from gi.repository import GLib
|
||||
import time
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
MAIN_LOOP_GLIB = 'GLib'
|
||||
MAIN_LOOP_QT = 'Qt'
|
||||
MAIN_LOOP_NONE = 'None'
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class Registry(object):
|
||||
"""
|
||||
Wraps the Accessibility.Registry to provide more Pythonic registration for
|
||||
events.
|
||||
|
||||
This object should be treated as a singleton, but such treatment is not
|
||||
enforced. You can construct another instance of this object and give it a
|
||||
reference to the Accessibility.Registry singleton. Doing so is harmless and
|
||||
has no point.
|
||||
|
||||
@@ivar asynchronous: Should event dispatch to local listeners be decoupled
|
||||
from event receiving from the registry?
|
||||
@@type asynchronous: boolean
|
||||
@@ivar reg: Reference to the real, wrapped registry object
|
||||
@@type reg: Accessibility.Registry
|
||||
@@ivar dev: Reference to the device controller
|
||||
@@type dev: Accessibility.DeviceEventController
|
||||
@@ivar clients: Map of event names to client listeners
|
||||
@@type clients: dictionary
|
||||
@@ivar observers: Map of event names to AT-SPI L{_Observer} objects
|
||||
@@type observers: dictionary
|
||||
"""
|
||||
__shared_state = {}
|
||||
|
||||
def __init__(self):
|
||||
self.__dict__ = self.__shared_state
|
||||
|
||||
try:
|
||||
if (self.has_implementations):
|
||||
return
|
||||
except (AttributeError):
|
||||
pass
|
||||
|
||||
self.has_implementations = False
|
||||
|
||||
self.device_event_register = None
|
||||
self.app_event_register = None
|
||||
self.desktop = None
|
||||
|
||||
self.main_loop = GLib.MainLoop()
|
||||
|
||||
def __call__(self):
|
||||
"""
|
||||
@@return: This instance of the registry
|
||||
@@rtype: L{Registry}
|
||||
"""
|
||||
return self
|
||||
|
||||
def _set_registry (self, main_loop_type, app_name=None):
|
||||
"""
|
||||
Creates a new 'Registry' object and sets this object
|
||||
as the default returned by pyatspi.Registry.
|
||||
|
||||
The default registry (without calling this function) uses the
|
||||
GLib main loop with caching. It connects to a registry daemon.
|
||||
|
||||
This function should be called before pyatspi is used if you
|
||||
wish to change these defaults.
|
||||
|
||||
@@param main_loop_type: 'GLib', 'None' or 'Qt'. If 'None' is selected then caching
|
||||
is disabled.
|
||||
|
||||
@@param use_registry: Whether to connect to a registry daemon for device events.
|
||||
Without this the application to connect to must be declared in the
|
||||
app_name parameter.
|
||||
|
||||
@@param app_name: D-Bus name of the application to connect to when not using the registry daemon.
|
||||
"""
|
||||
|
||||
self.has_implementations = True
|
||||
|
||||
self.asynchronous = False # not fully supported yet
|
||||
self.started = False
|
||||
self.event_listeners = dict()
|
||||
|
||||
def __getattr__(self, name):
|
||||
"""
|
||||
For backwards compatibility with old API
|
||||
"""
|
||||
if name == 'async':
|
||||
return self.asynchronous
|
||||
return object.__getattr__(self, name)
|
||||
|
||||
def __setattr__(self, name, value):
|
||||
"""
|
||||
For backwards compatibility with old API
|
||||
"""
|
||||
if name == 'async':
|
||||
self.asynchronous = value
|
||||
object.__setattr__(self, name, value)
|
||||
|
||||
def _set_default_registry (self):
|
||||
self._set_registry (MAIN_LOOP_GLIB)
|
||||
|
||||
def start(self, asynchronous=False, gil=True, **kwargs):
|
||||
"""
|
||||
Enter the main loop to start receiving and dispatching events.
|
||||
|
||||
@@param asynchronous: Should event dispatch be asynchronous
|
||||
(decoupled) from event receiving from the AT-SPI registry?
|
||||
@@type asynchronous: boolean
|
||||
@@param gil: Add an idle callback which releases the Python GIL for a few
|
||||
milliseconds to allow other threads to run? Necessary if other threads
|
||||
will be used in this process.
|
||||
@@type gil: boolean
|
||||
"""
|
||||
if 'async' in kwargs:
|
||||
# support previous API
|
||||
asynchronous = kwargs['async']
|
||||
if not self.has_implementations:
|
||||
self._set_default_registry ()
|
||||
self.started = True
|
||||
|
||||
if gil:
|
||||
def releaseGIL():
|
||||
try:
|
||||
time.sleep(1e-2)
|
||||
except KeyboardInterrupt as e:
|
||||
# store the exception for later
|
||||
releaseGIL.keyboard_exception = e
|
||||
self.stop()
|
||||
return True
|
||||
# make room for an exception if one occurs during the
|
||||
releaseGIL.keyboard_exception = None
|
||||
i = GLib.idle_add(releaseGIL)
|
||||
Atspi.event_main()
|
||||
GLib.source_remove(i)
|
||||
if releaseGIL.keyboard_exception is not None:
|
||||
# raise an keyboard exception we may have gotten earlier
|
||||
raise releaseGIL.keyboard_exception
|
||||
else:
|
||||
Atspi.event_main()
|
||||
|
||||
self.started = False
|
||||
|
||||
def stop(self, *args):
|
||||
"""
|
||||
Quits the main loop.
|
||||
"""
|
||||
if not self.has_implementations:
|
||||
self._set_default_registry ()
|
||||
Atspi.event_quit()
|
||||
|
||||
def getDesktopCount(self):
|
||||
"""
|
||||
Gets the number of available desktops.
|
||||
|
||||
@@return: Number of desktops
|
||||
@@rtype: integer
|
||||
"""
|
||||
return 1
|
||||
|
||||
def getDesktop(self, i):
|
||||
"""
|
||||
Gets a reference to the i-th desktop.
|
||||
|
||||
@@param i: Which desktop to get
|
||||
@@type i: integer
|
||||
@@return: Desktop reference
|
||||
@@rtype: Accessibility.Desktop
|
||||
"""
|
||||
if not self.has_implementations:
|
||||
self._set_default_registry ()
|
||||
return Atspi.get_desktop(i)
|
||||
|
||||
def eventWrapper(self, event, callback):
|
||||
return callback(event)
|
||||
|
||||
def registerEventListener(self, client, *names):
|
||||
"""
|
||||
Registers a new client callback for the given event names. Supports
|
||||
registration for all subevents if only partial event name is specified.
|
||||
Do not include a trailing colon.
|
||||
|
||||
For example, 'object' will register for all object events,
|
||||
'object:property-change' will register for all property change events,
|
||||
and 'object:property-change:accessible-parent' will register only for the
|
||||
parent property change event.
|
||||
|
||||
Registered clients will not be automatically removed when the client dies.
|
||||
To ensure the client is properly garbage collected, call
|
||||
L{deregisterEventListener}.
|
||||
|
||||
@@param client: Callable to be invoked when the event occurs
|
||||
@@type client: callable
|
||||
@@param names: List of full or partial event names
|
||||
@@type names: list of string
|
||||
"""
|
||||
if not self.has_implementations:
|
||||
self._set_default_registry ()
|
||||
try:
|
||||
listener = self.event_listeners[client]
|
||||
except:
|
||||
listener = self.event_listeners[client] = Atspi.EventListener.new(self.eventWrapper, client)
|
||||
for name in names:
|
||||
Atspi.EventListener.register (listener, name)
|
||||
|
||||
def deregisterEventListener(self, client, *names):
|
||||
"""
|
||||
Unregisters an existing client callback for the given event names. Supports
|
||||
unregistration for all subevents if only partial event name is specified.
|
||||
Do not include a trailing colon.
|
||||
|
||||
This method must be called to ensure a client registered by
|
||||
L{registerEventListener} is properly garbage collected.
|
||||
|
||||
@@param client: Client callback to remove
|
||||
@@type client: callable
|
||||
@@param names: List of full or partial event names
|
||||
@@type names: list of string
|
||||
@@return: Were event names specified for which the given client was not
|
||||
registered?
|
||||
@@rtype: boolean
|
||||
"""
|
||||
if not self.has_implementations:
|
||||
self._set_default_registry ()
|
||||
try:
|
||||
listener = self.event_listeners[client]
|
||||
except:
|
||||
return
|
||||
for name in names:
|
||||
Atspi.EventListener.deregister(listener, name)
|
||||
|
||||
# -------------------------------------------------------------------------------
|
||||
|
||||
# TODO: Remove this hack
|
||||
_KEY_PRESSED_EVENT=0
|
||||
_KEY_RELEASED_EVENT=1
|
||||
|
||||
def makeSyncType(self, synchronous, preemptive, global_):
|
||||
result = Atspi.KeyListenerSyncType.NOSYNC
|
||||
if synchronous:
|
||||
result |= Atspi.KeyListenerSyncType.SYNCHRONOUS
|
||||
if preemptive:
|
||||
result |= Atspi.KeyListenerSyncType.CANCONSUME
|
||||
if global_:
|
||||
result |= Atspi.KeyListenerSyncType.ALL_WINDOWS
|
||||
return result
|
||||
|
||||
def makeKind(self, kind):
|
||||
result = 0
|
||||
for i in kind:
|
||||
result |= (1 << i)
|
||||
return result
|
||||
|
||||
def registerKeystrokeListener(self,
|
||||
client,
|
||||
key_set=[],
|
||||
mask=0,
|
||||
kind=(_KEY_PRESSED_EVENT, _KEY_RELEASED_EVENT),
|
||||
synchronous=True,
|
||||
preemptive=True,
|
||||
global_=False):
|
||||
"""
|
||||
Registers a listener for key stroke events.
|
||||
|
||||
@@param client: Callable to be invoked when the event occurs
|
||||
@@type client: callable
|
||||
@@param key_set: Set of hardware key codes to stop monitoring. Leave empty
|
||||
to indicate all keys.
|
||||
@@type key_set: list of integer
|
||||
@@param mask: When the mask is None, the codes in the key_set will be
|
||||
monitored only when no modifier is held. When the mask is an
|
||||
integer, keys in the key_set will be monitored only when the modifiers in
|
||||
the mask are held. When the mask is an iterable over more than one
|
||||
integer, keys in the key_set will be monitored when any of the modifier
|
||||
combinations in the set are held.
|
||||
@@type mask: integer, iterable, None
|
||||
@@param kind: Kind of events to watch, KEY_PRESSED_EVENT or
|
||||
KEY_RELEASED_EVENT.
|
||||
@@type kind: list
|
||||
@@param synchronous: Should the callback notification be synchronous, giving
|
||||
the client the chance to consume the event?
|
||||
@@type synchronous: boolean
|
||||
@@param preemptive: Should the callback be allowed to preempt / consume the
|
||||
event?
|
||||
@@type preemptive: boolean
|
||||
@@param global_: Should callback occur even if an application not supporting
|
||||
AT-SPI is in the foreground? (requires xevie)
|
||||
@@type global_: boolean
|
||||
"""
|
||||
if not self.has_implementations:
|
||||
self._set_default_registry ()
|
||||
try:
|
||||
listener = self.event_listeners[client]
|
||||
except:
|
||||
listener = self.event_listeners[client] = Atspi.DeviceListener.new(self.eventWrapper, client)
|
||||
syncFlag = self.makeSyncType(synchronous, preemptive, global_)
|
||||
if hasattr(mask, '__iter__'):
|
||||
masks = mask
|
||||
else:
|
||||
masks = [mask]
|
||||
for m in masks:
|
||||
Atspi.register_keystroke_listener(listener,
|
||||
key_set,
|
||||
m,
|
||||
self.makeKind (kind),
|
||||
syncFlag)
|
||||
|
||||
def deregisterKeystrokeListener(self,
|
||||
client,
|
||||
key_set=[],
|
||||
mask=0,
|
||||
kind=(_KEY_PRESSED_EVENT, _KEY_RELEASED_EVENT)):
|
||||
"""
|
||||
Deregisters a listener for key stroke events.
|
||||
|
||||
@@param client: Callable to be invoked when the event occurs
|
||||
@@type client: callable
|
||||
@@param key_set: Set of hardware key codes to stop monitoring. Leave empty
|
||||
to indicate all keys.
|
||||
@@type key_set: list of integer
|
||||
@@param mask: When the mask is None, the codes in the key_set will be
|
||||
monitored only when no modifier is held. When the mask is an
|
||||
integer, keys in the key_set will be monitored only when the modifiers in
|
||||
the mask are held. When the mask is an iterable over more than one
|
||||
integer, keys in the key_set will be monitored when any of the modifier
|
||||
combinations in the set are held.
|
||||
@@type mask: integer, iterable, None
|
||||
@@param kind: Kind of events to stop watching, KEY_PRESSED_EVENT or
|
||||
KEY_RELEASED_EVENT.
|
||||
@@type kind: list
|
||||
@@raise KeyError: When the client isn't already registered for events
|
||||
"""
|
||||
if not self.has_implementations:
|
||||
self._set_default_registry ()
|
||||
try:
|
||||
listener = self.event_listeners[client]
|
||||
except:
|
||||
return
|
||||
|
||||
if hasattr(mask, '__iter__'):
|
||||
masks = mask
|
||||
else:
|
||||
masks = [mask]
|
||||
for m in masks:
|
||||
Atspi.deregister_keystroke_listener (listener, key_set,
|
||||
m, self.makeKind(kind))
|
||||
|
||||
# TODO: enqueueEvent, etc?
|
||||
|
||||
def generateKeyboardEvent(self, keycode, keysym, kind):
|
||||
"""
|
||||
Generates a keyboard event. One of the keycode or the keysym parameters
|
||||
should be specified and the other should be None. The kind parameter is
|
||||
required and should be one of the KEY_PRESS, KEY_RELEASE, KEY_PRESSRELEASE,
|
||||
KEY_SYM, KEY_STRING, KEY_LOCKMODIFIERS, or KEY_UNLOCKMODIFIERS.
|
||||
|
||||
@@param keycode: Hardware keycode or None
|
||||
@@type keycode: integer
|
||||
@@param keysym: Symbolic key string or None
|
||||
@@type keysym: string
|
||||
@@param kind: Kind of event to synthesize
|
||||
@@type kind: integer
|
||||
"""
|
||||
if not self.has_implementations:
|
||||
self._set_default_registry ()
|
||||
if keysym is None:
|
||||
keysym = ""
|
||||
Atspi.generate_keyboard_event (keycode, keysym, kind)
|
||||
|
||||
def generateMouseEvent(self, x, y, name):
|
||||
"""
|
||||
Generates a mouse event at the given absolute x and y coordinate. The kind
|
||||
of event generated is specified by the name. For example, MOUSE_B1P
|
||||
(button 1 press), MOUSE_REL (relative motion), MOUSE_B3D (butten 3
|
||||
double-click).
|
||||
|
||||
@@param x: Horizontal coordinate, usually left-hand oriented
|
||||
@@type x: integer
|
||||
@@param y: Vertical coordinate, usually left-hand oriented
|
||||
@@type y: integer
|
||||
@@param name: Name of the event to generate
|
||||
@@type name: string
|
||||
"""
|
||||
if not self.has_implementations:
|
||||
self._set_default_registry ()
|
||||
Atspi.generate_mouse_event (x, y, name)
|
||||
|
||||
def setReferenceWIndow(accessible):
|
||||
"""
|
||||
Sets the reference window that will be used when
|
||||
generateMouseEvent is called. Coordinates will be assumed to
|
||||
be relative to this window. This * is needed because, due to
|
||||
Wayland's security model, it is not currently possible to
|
||||
possible to retrieve global coordinates.
|
||||
If NULL is passed, then AT-SPI will use the window that has
|
||||
focus at the time that atspi_generate_mouse_event is called.
|
||||
|
||||
@@param accessible: the accessible corresponding to the window
|
||||
to select. should be a top-level window with a role of
|
||||
pyatspi.ROLE_APPLICATION.
|
||||
"""
|
||||
if not self.has_implementations:
|
||||
self._set_default_registry ()
|
||||
Atspi.setReferenceWindow(accessible)
|
||||
|
||||
def pumpQueuedEvents (self):
|
||||
"""
|
||||
Dispatch events that have been queued.
|
||||
"""
|
||||
pass
|
||||
|
||||
def set_default_registry (main_loop, app_name=None):
|
||||
registry = Registry ()
|
||||
registry._set_registry (main_loop, app_name)
|
|
@ -0,0 +1,410 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from pyatspi.atspienum import *
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class Role(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'ROLE_INVALID',
|
||||
1:'ROLE_ACCELERATOR_LABEL',
|
||||
2:'ROLE_ALERT',
|
||||
3:'ROLE_ANIMATION',
|
||||
4:'ROLE_ARROW',
|
||||
5:'ROLE_CALENDAR',
|
||||
6:'ROLE_CANVAS',
|
||||
7:'ROLE_CHECK_BOX',
|
||||
8:'ROLE_CHECK_MENU_ITEM',
|
||||
9:'ROLE_COLOR_CHOOSER',
|
||||
10:'ROLE_COLUMN_HEADER',
|
||||
11:'ROLE_COMBO_BOX',
|
||||
12:'ROLE_DATE_EDITOR',
|
||||
13:'ROLE_DESKTOP_ICON',
|
||||
14:'ROLE_DESKTOP_FRAME',
|
||||
15:'ROLE_DIAL',
|
||||
16:'ROLE_DIALOG',
|
||||
17:'ROLE_DIRECTORY_PANE',
|
||||
18:'ROLE_DRAWING_AREA',
|
||||
19:'ROLE_FILE_CHOOSER',
|
||||
20:'ROLE_FILLER',
|
||||
21:'ROLE_FOCUS_TRAVERSABLE',
|
||||
22:'ROLE_FONT_CHOOSER',
|
||||
23:'ROLE_FRAME',
|
||||
24:'ROLE_GLASS_PANE',
|
||||
25:'ROLE_HTML_CONTAINER',
|
||||
26:'ROLE_ICON',
|
||||
27:'ROLE_IMAGE',
|
||||
28:'ROLE_INTERNAL_FRAME',
|
||||
29:'ROLE_LABEL',
|
||||
30:'ROLE_LAYERED_PANE',
|
||||
31:'ROLE_LIST',
|
||||
32:'ROLE_LIST_ITEM',
|
||||
33:'ROLE_MENU',
|
||||
34:'ROLE_MENU_BAR',
|
||||
35:'ROLE_MENU_ITEM',
|
||||
36:'ROLE_OPTION_PANE',
|
||||
37:'ROLE_PAGE_TAB',
|
||||
38:'ROLE_PAGE_TAB_LIST',
|
||||
39:'ROLE_PANEL',
|
||||
40:'ROLE_PASSWORD_TEXT',
|
||||
41:'ROLE_POPUP_MENU',
|
||||
42:'ROLE_PROGRESS_BAR',
|
||||
43:'ROLE_PUSH_BUTTON',
|
||||
44:'ROLE_RADIO_BUTTON',
|
||||
45:'ROLE_RADIO_MENU_ITEM',
|
||||
46:'ROLE_ROOT_PANE',
|
||||
47:'ROLE_ROW_HEADER',
|
||||
48:'ROLE_SCROLL_BAR',
|
||||
49:'ROLE_SCROLL_PANE',
|
||||
50:'ROLE_SEPARATOR',
|
||||
51:'ROLE_SLIDER',
|
||||
52:'ROLE_SPIN_BUTTON',
|
||||
53:'ROLE_SPLIT_PANE',
|
||||
54:'ROLE_STATUS_BAR',
|
||||
55:'ROLE_TABLE',
|
||||
56:'ROLE_TABLE_CELL',
|
||||
57:'ROLE_TABLE_COLUMN_HEADER',
|
||||
58:'ROLE_TABLE_ROW_HEADER',
|
||||
59:'ROLE_TEAROFF_MENU_ITEM',
|
||||
60:'ROLE_TERMINAL',
|
||||
61:'ROLE_TEXT',
|
||||
62:'ROLE_TOGGLE_BUTTON',
|
||||
63:'ROLE_TOOL_BAR',
|
||||
64:'ROLE_TOOL_TIP',
|
||||
65:'ROLE_TREE',
|
||||
66:'ROLE_TREE_TABLE',
|
||||
67:'ROLE_UNKNOWN',
|
||||
68:'ROLE_VIEWPORT',
|
||||
69:'ROLE_WINDOW',
|
||||
70:'ROLE_EXTENDED',
|
||||
71:'ROLE_HEADER',
|
||||
72:'ROLE_FOOTER',
|
||||
73:'ROLE_PARAGRAPH',
|
||||
74:'ROLE_RULER',
|
||||
75:'ROLE_APPLICATION',
|
||||
76:'ROLE_AUTOCOMPLETE',
|
||||
77:'ROLE_EDITBAR',
|
||||
78:'ROLE_EMBEDDED',
|
||||
79:'ROLE_ENTRY',
|
||||
80:'ROLE_CHART',
|
||||
81:'ROLE_CAPTION',
|
||||
82:'ROLE_DOCUMENT_FRAME',
|
||||
83:'ROLE_HEADING',
|
||||
84:'ROLE_PAGE',
|
||||
85:'ROLE_SECTION',
|
||||
86:'ROLE_REDUNDANT_OBJECT',
|
||||
87:'ROLE_FORM',
|
||||
88:'ROLE_LINK',
|
||||
89:'ROLE_INPUT_METHOD_WINDOW',
|
||||
90:'ROLE_TABLE_ROW',
|
||||
91:'ROLE_TREE_ITEM',
|
||||
92:'ROLE_DOCUMENT_SPREADSHEET',
|
||||
93:'ROLE_DOCUMENT_PRESENTATION',
|
||||
94:'ROLE_DOCUMENT_TEXT',
|
||||
95:'ROLE_DOCUMENT_WEB',
|
||||
96:'ROLE_DOCUMENT_EMAIL',
|
||||
97:'ROLE_COMMENT',
|
||||
98:'ROLE_LIST_BOX',
|
||||
99:'ROLE_GROUPING',
|
||||
100:'ROLE_IMAGE_MAP',
|
||||
101:'ROLE_NOTIFICATION',
|
||||
102:'ROLE_INFO_BAR',
|
||||
103:'ROLE_LEVEL_BAR',
|
||||
104:'ROLE_TITLE_BAR',
|
||||
105:'ROLE_BLOCK_QUOTE',
|
||||
106:'ROLE_AUDIO',
|
||||
107:'ROLE_VIDEO',
|
||||
108:'ROLE_DEFINITION',
|
||||
109:'ROLE_ARTICLE',
|
||||
110:'ROLE_LANDMARK',
|
||||
111:'ROLE_LOG',
|
||||
112:'ROLE_MARQUEE',
|
||||
113:'ROLE_MATH',
|
||||
114:'ROLE_RATING',
|
||||
115:'ROLE_TIMER',
|
||||
116:'ROLE_STATIC',
|
||||
117:'ROLE_MATH_FRACTION',
|
||||
118:'ROLE_MATH_ROOT',
|
||||
119:'ROLE_SUBSCRIPT',
|
||||
120:'ROLE_SUPERSCRIPT',
|
||||
121:'ROLE_DESCRIPTION_LIST',
|
||||
122:'ROLE_DESCRIPTION_TERM',
|
||||
123:'ROLE_DESCRIPTION_VALUE',
|
||||
124:'ROLE_FOOTNOTE',
|
||||
125:'ROLE_CONTENT_DELETION',
|
||||
126:'ROLE_CONTENT_INSERTION',
|
||||
127:'ROLE_MARK',
|
||||
128:'ROLE_SUGGESTION',
|
||||
129:'ROLE_LAST_DEFINED',
|
||||
}
|
||||
|
||||
ROLE_ACCELERATOR_LABEL = Role(1)
|
||||
ROLE_ALERT = Role(2)
|
||||
ROLE_ANIMATION = Role(3)
|
||||
ROLE_APPLICATION = Role(75)
|
||||
ROLE_ARROW = Role(4)
|
||||
ROLE_ARTICLE = Role(109)
|
||||
ROLE_AUDIO = Role(106)
|
||||
ROLE_AUTOCOMPLETE = Role(76)
|
||||
ROLE_BLOCK_QUOTE = Role(105)
|
||||
ROLE_CALENDAR = Role(5)
|
||||
ROLE_CANVAS = Role(6)
|
||||
ROLE_CAPTION = Role(81)
|
||||
ROLE_CHART = Role(80)
|
||||
ROLE_CHECK_BOX = Role(7)
|
||||
ROLE_CHECK_MENU_ITEM = Role(8)
|
||||
ROLE_COLOR_CHOOSER = Role(9)
|
||||
ROLE_COLUMN_HEADER = Role(10)
|
||||
ROLE_COMBO_BOX = Role(11)
|
||||
ROLE_COMMENT = Role(97)
|
||||
ROLE_CONTENT_DELETION = Role(125)
|
||||
ROLE_CONTENT_INSERTION = Role(126)
|
||||
ROLE_DATE_EDITOR = Role(12)
|
||||
ROLE_DEFINITION = Role(108)
|
||||
ROLE_DESCRIPTION_LIST = Role(121)
|
||||
ROLE_DESCRIPTION_TERM = Role(122)
|
||||
ROLE_DESCRIPTION_VALUE = Role(123)
|
||||
ROLE_DESKTOP_FRAME = Role(14)
|
||||
ROLE_DESKTOP_ICON = Role(13)
|
||||
ROLE_DIAL = Role(15)
|
||||
ROLE_DIALOG = Role(16)
|
||||
ROLE_DIRECTORY_PANE = Role(17)
|
||||
ROLE_DOCUMENT_EMAIL = Role(96)
|
||||
ROLE_DOCUMENT_FRAME = Role(82)
|
||||
ROLE_DOCUMENT_PRESENTATION = Role(93)
|
||||
ROLE_DOCUMENT_SPREADSHEET = Role(92)
|
||||
ROLE_DOCUMENT_TEXT = Role(94)
|
||||
ROLE_DOCUMENT_WEB = Role(95)
|
||||
ROLE_DRAWING_AREA = Role(18)
|
||||
ROLE_EDITBAR = Role(77)
|
||||
ROLE_EMBEDDED = Role(78)
|
||||
ROLE_ENTRY = Role(79)
|
||||
ROLE_EXTENDED = Role(70)
|
||||
ROLE_FILE_CHOOSER = Role(19)
|
||||
ROLE_FILLER = Role(20)
|
||||
ROLE_FOCUS_TRAVERSABLE = Role(21)
|
||||
ROLE_FONT_CHOOSER = Role(22)
|
||||
ROLE_FOOTER = Role(72)
|
||||
ROLE_FOOTNOTE = Role(124)
|
||||
ROLE_FORM = Role(87)
|
||||
ROLE_FRAME = Role(23)
|
||||
ROLE_GLASS_PANE = Role(24)
|
||||
ROLE_GROUPING = Role(99)
|
||||
ROLE_HEADER = Role(71)
|
||||
ROLE_HEADING = Role(83)
|
||||
ROLE_HTML_CONTAINER = Role(25)
|
||||
ROLE_ICON = Role(26)
|
||||
ROLE_IMAGE = Role(27)
|
||||
ROLE_IMAGE_MAP = Role(100)
|
||||
ROLE_INFO_BAR = Role(102)
|
||||
ROLE_INPUT_METHOD_WINDOW = Role(89)
|
||||
ROLE_INTERNAL_FRAME = Role(28)
|
||||
ROLE_INVALID = Role(0)
|
||||
ROLE_LABEL = Role(29)
|
||||
ROLE_LANDMARK = Role(110)
|
||||
ROLE_LAST_DEFINED = Role(129)
|
||||
ROLE_LAYERED_PANE = Role(30)
|
||||
ROLE_LEVEL_BAR = Role(103)
|
||||
ROLE_LINK = Role(88)
|
||||
ROLE_LIST = Role(31)
|
||||
ROLE_LIST_BOX = Role(98)
|
||||
ROLE_LIST_ITEM = Role(32)
|
||||
ROLE_LOG = Role(111)
|
||||
ROLE_MARK = Role(127)
|
||||
ROLE_MARQUEE = Role(112)
|
||||
ROLE_MATH = Role(113)
|
||||
ROLE_MATH_FRACTION = Role(117)
|
||||
ROLE_MATH_ROOT = Role(118)
|
||||
ROLE_MENU = Role(33)
|
||||
ROLE_MENU_BAR = Role(34)
|
||||
ROLE_MENU_ITEM = Role(35)
|
||||
ROLE_NOTIFICATION = Role(101)
|
||||
ROLE_OPTION_PANE = Role(36)
|
||||
ROLE_PAGE = Role(84)
|
||||
ROLE_PAGE_TAB = Role(37)
|
||||
ROLE_PAGE_TAB_LIST = Role(38)
|
||||
ROLE_PANEL = Role(39)
|
||||
ROLE_PARAGRAPH = Role(73)
|
||||
ROLE_PASSWORD_TEXT = Role(40)
|
||||
ROLE_POPUP_MENU = Role(41)
|
||||
ROLE_PROGRESS_BAR = Role(42)
|
||||
ROLE_PUSH_BUTTON = Role(43)
|
||||
ROLE_RADIO_BUTTON = Role(44)
|
||||
ROLE_RADIO_MENU_ITEM = Role(45)
|
||||
ROLE_RATING = Role(114)
|
||||
ROLE_REDUNDANT_OBJECT = Role(86)
|
||||
ROLE_ROOT_PANE = Role(46)
|
||||
ROLE_ROW_HEADER = Role(47)
|
||||
ROLE_RULER = Role(74)
|
||||
ROLE_SCROLL_BAR = Role(48)
|
||||
ROLE_SCROLL_PANE = Role(49)
|
||||
ROLE_SECTION = Role(85)
|
||||
ROLE_SEPARATOR = Role(50)
|
||||
ROLE_SLIDER = Role(51)
|
||||
ROLE_SPIN_BUTTON = Role(52)
|
||||
ROLE_SPLIT_PANE = Role(53)
|
||||
ROLE_STATIC = Role(116)
|
||||
ROLE_STATUS_BAR = Role(54)
|
||||
ROLE_SUBSCRIPT = Role(119)
|
||||
ROLE_SUGGESTION = Role(128)
|
||||
ROLE_SUPERSCRIPT = Role(120)
|
||||
ROLE_TABLE = Role(55)
|
||||
ROLE_TABLE_CELL = Role(56)
|
||||
ROLE_TABLE_COLUMN_HEADER = Role(57)
|
||||
ROLE_TABLE_ROW = Role(90)
|
||||
ROLE_TABLE_ROW_HEADER = Role(58)
|
||||
ROLE_TEAROFF_MENU_ITEM = Role(59)
|
||||
ROLE_TERMINAL = Role(60)
|
||||
ROLE_TEXT = Role(61)
|
||||
ROLE_TIMER = Role(115)
|
||||
ROLE_TITLE_BAR = Role(104)
|
||||
ROLE_TOGGLE_BUTTON = Role(62)
|
||||
ROLE_TOOL_BAR = Role(63)
|
||||
ROLE_TOOL_TIP = Role(64)
|
||||
ROLE_TREE = Role(65)
|
||||
ROLE_TREE_ITEM = Role(91)
|
||||
ROLE_TREE_TABLE = Role(66)
|
||||
ROLE_UNKNOWN = Role(67)
|
||||
ROLE_VIDEO = Role(107)
|
||||
ROLE_VIEWPORT = Role(68)
|
||||
ROLE_WINDOW = Role(69)
|
||||
|
||||
ROLE_NAMES = {
|
||||
ROLE_INVALID:'invalid',
|
||||
ROLE_ACCELERATOR_LABEL:'accelerator label',
|
||||
ROLE_ALERT:'alert',
|
||||
ROLE_ANIMATION:'animation',
|
||||
ROLE_ARROW:'arrow',
|
||||
ROLE_CALENDAR:'calendar',
|
||||
ROLE_CANVAS:'canvas',
|
||||
ROLE_CHECK_BOX:'check box',
|
||||
ROLE_CHECK_MENU_ITEM:'check menu item',
|
||||
ROLE_COLOR_CHOOSER:'color chooser',
|
||||
ROLE_COLUMN_HEADER:'column header',
|
||||
ROLE_COMBO_BOX:'combo box',
|
||||
ROLE_DATE_EDITOR:'dateeditor',
|
||||
ROLE_DESKTOP_ICON:'desktop icon',
|
||||
ROLE_DESKTOP_FRAME:'desktop frame',
|
||||
ROLE_DIAL:'dial',
|
||||
ROLE_DIALOG:'dialog',
|
||||
ROLE_DIRECTORY_PANE:'directory pane',
|
||||
ROLE_DRAWING_AREA:'drawing area',
|
||||
ROLE_FILE_CHOOSER:'file chooser',
|
||||
ROLE_FILLER:'filler',
|
||||
ROLE_FONT_CHOOSER:'font chooser',
|
||||
ROLE_FRAME:'frame',
|
||||
ROLE_GLASS_PANE:'glass pane',
|
||||
ROLE_HTML_CONTAINER:'html container',
|
||||
ROLE_ICON:'icon',
|
||||
ROLE_IMAGE:'image',
|
||||
ROLE_INTERNAL_FRAME:'internal frame',
|
||||
ROLE_LABEL:'label',
|
||||
ROLE_LAYERED_PANE:'layered pane',
|
||||
ROLE_LIST:'list',
|
||||
ROLE_LIST_ITEM:'list item',
|
||||
ROLE_MENU:'menu',
|
||||
ROLE_MENU_BAR:'menu bar',
|
||||
ROLE_MENU_ITEM:'menu item',
|
||||
ROLE_OPTION_PANE:'option pane',
|
||||
ROLE_PAGE_TAB:'page tab',
|
||||
ROLE_PAGE_TAB_LIST:'page tab list',
|
||||
ROLE_PANEL:'panel',
|
||||
ROLE_PASSWORD_TEXT:'password text',
|
||||
ROLE_POPUP_MENU:'popup menu',
|
||||
ROLE_PROGRESS_BAR:'progress bar',
|
||||
ROLE_PUSH_BUTTON:'push button',
|
||||
ROLE_RADIO_BUTTON:'radio button',
|
||||
ROLE_RADIO_MENU_ITEM:'radio menu item',
|
||||
ROLE_ROOT_PANE:'root pane',
|
||||
ROLE_ROW_HEADER:'row header',
|
||||
ROLE_SCROLL_BAR:'scroll bar',
|
||||
ROLE_SCROLL_PANE:'scroll pane',
|
||||
ROLE_SEPARATOR:'separator',
|
||||
ROLE_SLIDER:'slider',
|
||||
ROLE_SPLIT_PANE:'split pane',
|
||||
ROLE_SPIN_BUTTON:'spin button',
|
||||
ROLE_STATUS_BAR:'status bar',
|
||||
ROLE_TABLE:'table',
|
||||
ROLE_TABLE_CELL:'table cell',
|
||||
ROLE_TABLE_COLUMN_HEADER:'table column header',
|
||||
ROLE_TABLE_ROW_HEADER:'table row header',
|
||||
ROLE_TEAROFF_MENU_ITEM:'tear off menu item',
|
||||
ROLE_TERMINAL:'terminal',
|
||||
ROLE_TEXT:'text',
|
||||
ROLE_TOGGLE_BUTTON:'toggle button',
|
||||
ROLE_TOOL_BAR:'tool bar',
|
||||
ROLE_TOOL_TIP:'tool tip',
|
||||
ROLE_TREE:'tree',
|
||||
ROLE_TREE_TABLE:'tree table',
|
||||
ROLE_UNKNOWN:'unknown',
|
||||
ROLE_VIEWPORT:'viewport',
|
||||
ROLE_WINDOW:'window',
|
||||
ROLE_HEADER:'header',
|
||||
ROLE_FOOTER:'footer',
|
||||
ROLE_PARAGRAPH:'paragraph',
|
||||
ROLE_RULER:'ruler',
|
||||
ROLE_APPLICATION:'application',
|
||||
ROLE_AUTOCOMPLETE:'autocomplete',
|
||||
ROLE_EDITBAR:'edit bar',
|
||||
ROLE_EMBEDDED:'embedded component',
|
||||
ROLE_ENTRY:'entry',
|
||||
ROLE_CHART:'chart',
|
||||
ROLE_CAPTION:'caption',
|
||||
ROLE_DOCUMENT_FRAME:'document frame',
|
||||
ROLE_HEADING:'heading',
|
||||
ROLE_PAGE:'page',
|
||||
ROLE_SECTION:'section',
|
||||
ROLE_REDUNDANT_OBJECT:'redundant object',
|
||||
ROLE_FORM:'form',
|
||||
ROLE_LINK:'link',
|
||||
ROLE_INPUT_METHOD_WINDOW:'input method window',
|
||||
ROLE_TABLE_ROW:'table row',
|
||||
ROLE_TREE_ITEM:'tree item',
|
||||
ROLE_DOCUMENT_SPREADSHEET:'document spreadsheet',
|
||||
ROLE_DOCUMENT_PRESENTATION:'document presentation',
|
||||
ROLE_DOCUMENT_TEXT:'document text',
|
||||
ROLE_DOCUMENT_WEB:'document web',
|
||||
ROLE_DOCUMENT_EMAIL:'document email',
|
||||
ROLE_COMMENT:'comment',
|
||||
ROLE_LIST_BOX:'list box',
|
||||
ROLE_GROUPING:'grouping',
|
||||
ROLE_IMAGE_MAP:'image map',
|
||||
ROLE_NOTIFICATION:'notification',
|
||||
ROLE_INFO_BAR:'info bar',
|
||||
ROLE_LEVEL_BAR:'level bar',
|
||||
ROLE_TITLE_BAR:'title bar',
|
||||
ROLE_BLOCK_QUOTE:'block quote',
|
||||
ROLE_AUDIO:'audio',
|
||||
ROLE_VIDEO:'video',
|
||||
ROLE_DEFINITION:'definition',
|
||||
ROLE_ARTICLE:'article',
|
||||
ROLE_LANDMARK:'landmark',
|
||||
ROLE_LOG:'log',
|
||||
ROLE_MARQUEE:'marquee',
|
||||
ROLE_MATH:'math',
|
||||
ROLE_RATING:'rating',
|
||||
ROLE_TIMER:'timer',
|
||||
ROLE_STATIC:'static',
|
||||
ROLE_MATH_FRACTION:'math fraction',
|
||||
ROLE_MATH_ROOT: 'math root',
|
||||
ROLE_SUBSCRIPT: 'subscript',
|
||||
ROLE_SUPERSCRIPT: 'superscript',
|
||||
ROLE_CONTENT_DELETION: 'content deletion',
|
||||
ROLE_CONTENT_INSERTION: 'content insertion',
|
||||
ROLE_MARK: 'mark',
|
||||
ROLE_SUGGESTION: 'suggestion',
|
||||
}
|
||||
|
||||
#END----------------------------------------------------------------------------
|
|
@ -0,0 +1,124 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
#Copyright (C) 2010-2011 Novell, inc.
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from gi.repository import Atspi
|
||||
from pyatspi.utils import *
|
||||
from pyatspi.interface import *
|
||||
|
||||
__all__ = [
|
||||
"Selection",
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class Selection(interface):
|
||||
"""
|
||||
An interface which indicates that an object exposes a 'selection'
|
||||
model, allowing the selection of one or more of its children.
|
||||
Read-only Selection instances are possible, in which case the
|
||||
interface is used to programmatically determine the selected-ness
|
||||
of its children. A selected child has State::STATE_SELECTED,
|
||||
and a child which may hypothetically be selected (though possibly
|
||||
not programmatically selectable) has State::STATE_SELECTABLE.
|
||||
"""
|
||||
|
||||
def clearSelection(self):
|
||||
"""
|
||||
Attempt to clear all selections (i.e. deselect all children)
|
||||
of a Selection. Not all Selection implementations allow the removal
|
||||
of all selections.
|
||||
@return True if the selections were successfully cleared, False
|
||||
otherwise.
|
||||
"""
|
||||
return Atspi.Text.clear_selection(self.obj)
|
||||
|
||||
def deselectChild(self, childIndex):
|
||||
"""
|
||||
Remove a child from the selected children list of a Selection,
|
||||
if the child is currently selected.
|
||||
@param : childIndex
|
||||
a long integer (the zero offset index into the Accessible object's
|
||||
list of children) indicating which child of the Selection is
|
||||
to be selected.
|
||||
@return True if the child was successfully selected, False otherwise.
|
||||
"""
|
||||
return Atspi.Selection.deselect_child(self.obj, childIndex)
|
||||
|
||||
def deselectSelectedChild(self, index):
|
||||
"""
|
||||
Remove a child to the selected children list of a Selection.
|
||||
@param : selectedChildIndex
|
||||
a long integer indicating which of the selected children of the
|
||||
Selection is to be deselected. The index is a zero-offset index
|
||||
into the 'selected child list', not a zero-offset index into
|
||||
the list of all children of the Selection.
|
||||
@return True if the child was successfully deselected, False
|
||||
otherwise.
|
||||
"""
|
||||
return Atspi.Selection.deselect_selected_child(self.obj, index)
|
||||
|
||||
def getSelectedChild(self, index):
|
||||
"""
|
||||
Get the i-th selected Accessible child of a Selection.
|
||||
@param : selectedChildIndex
|
||||
a long integer indicating which of the selected children of an
|
||||
object is being requested.
|
||||
@return a pointer to a selected Accessible child object, specified
|
||||
by selectedChildIndex.
|
||||
"""
|
||||
return Atspi.Selection.get_selected_child(self.obj, index)
|
||||
|
||||
def isChildSelected(self, index):
|
||||
"""
|
||||
Determine whether a particular child of an Selection implementor
|
||||
is currently selected. Note that childIndex is the zero-offset
|
||||
index into the standard Accessible container's list of children.
|
||||
@param : childIndex
|
||||
an index into the Selection's list of children.
|
||||
@return True if the specified child is currently selected, False
|
||||
otherwise.
|
||||
"""
|
||||
return Atspi.Selection.is_child_selected(self.obj, index)
|
||||
|
||||
def selectAll(self):
|
||||
"""
|
||||
Attempt to select all of the children of a Selection implementor.
|
||||
Not all Selection implementors support this operation (for instance,
|
||||
implementations which support only "single selection" do not
|
||||
support this operation).
|
||||
@return True if successful, False otherwise.
|
||||
"""
|
||||
return Atspi.Selection.select_all(self.obj)
|
||||
|
||||
def selectChild(self, index):
|
||||
"""
|
||||
Add a child to the selected children list of a Selection.
|
||||
@param : childIndex
|
||||
a long integer indicating which child of the Selection is to
|
||||
be selected.
|
||||
@return True if the child was successfully selected, False otherwise.
|
||||
"""
|
||||
return Atspi.Selection.select_child(self.obj, index)
|
||||
|
||||
def get_nSelectedChildren(self):
|
||||
return Atspi.Selection.get_n_selected_children(self.obj)
|
||||
_nSelectedChildrenDoc = \
|
||||
"""
|
||||
The number of children of a Selection implementor which are currently
|
||||
selected.
|
||||
"""
|
||||
nSelectedChildren = property(fget=get_nSelectedChildren, doc=_nSelectedChildrenDoc)
|
||||
|
||||
#END----------------------------------------------------------------------------
|
|
@ -0,0 +1,153 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
#copyright: Copyright (c) 2005, 2007 IBM Corporation
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
#Portions of this code originally licensed and copyright (c) 2005, 2007
|
||||
#IBM Corporation under the BSD license, available at
|
||||
#U{http://www.opensource.org/licenses/bsd-license.php}
|
||||
|
||||
#authors: Peter Parente, Mark Doffman
|
||||
|
||||
from gi.repository import Atspi
|
||||
from gi.repository import GObject
|
||||
from pyatspi.atspienum import *
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class StateType(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'STATE_INVALID',
|
||||
1:'STATE_ACTIVE',
|
||||
2:'STATE_ARMED',
|
||||
3:'STATE_BUSY',
|
||||
4:'STATE_CHECKED',
|
||||
5:'STATE_COLLAPSED',
|
||||
6:'STATE_DEFUNCT',
|
||||
7:'STATE_EDITABLE',
|
||||
8:'STATE_ENABLED',
|
||||
9:'STATE_EXPANDABLE',
|
||||
10:'STATE_EXPANDED',
|
||||
11:'STATE_FOCUSABLE',
|
||||
12:'STATE_FOCUSED',
|
||||
13:'STATE_HAS_TOOLTIP',
|
||||
14:'STATE_HORIZONTAL',
|
||||
15:'STATE_ICONIFIED',
|
||||
16:'STATE_MODAL',
|
||||
17:'STATE_MULTI_LINE',
|
||||
18:'STATE_MULTISELECTABLE',
|
||||
19:'STATE_OPAQUE',
|
||||
20:'STATE_PRESSED',
|
||||
21:'STATE_RESIZABLE',
|
||||
22:'STATE_SELECTABLE',
|
||||
23:'STATE_SELECTED',
|
||||
24:'STATE_SENSITIVE',
|
||||
25:'STATE_SHOWING',
|
||||
26:'STATE_SINGLE_LINE',
|
||||
27:'STATE_STALE',
|
||||
28:'STATE_TRANSIENT',
|
||||
29:'STATE_VERTICAL',
|
||||
30:'STATE_VISIBLE',
|
||||
31:'STATE_MANAGES_DESCENDANTS',
|
||||
32:'STATE_INDETERMINATE',
|
||||
33:'STATE_REQUIRED',
|
||||
34:'STATE_TRUNCATED',
|
||||
35:'STATE_ANIMATED',
|
||||
36:'STATE_INVALID_ENTRY',
|
||||
37:'STATE_SUPPORTS_AUTOCOMPLETION',
|
||||
38:'STATE_SELECTABLE_TEXT',
|
||||
39:'STATE_IS_DEFAULT',
|
||||
40:'STATE_VISITED',
|
||||
41:'STATE_CHECKABLE',
|
||||
42:'STATE_HAS_POPUP',
|
||||
43:'STATE_READ_ONLY',
|
||||
44:'STATE_LAST_DEFINED',
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
STATE_ACTIVE = StateType(1)
|
||||
STATE_ANIMATED = StateType(35)
|
||||
STATE_ARMED = StateType(2)
|
||||
STATE_BUSY = StateType(3)
|
||||
STATE_CHECKABLE = StateType(41)
|
||||
STATE_CHECKED = StateType(4)
|
||||
STATE_COLLAPSED = StateType(5)
|
||||
STATE_DEFUNCT = StateType(6)
|
||||
STATE_EDITABLE = StateType(7)
|
||||
STATE_ENABLED = StateType(8)
|
||||
STATE_EXPANDABLE = StateType(9)
|
||||
STATE_EXPANDED = StateType(10)
|
||||
STATE_FOCUSABLE = StateType(11)
|
||||
STATE_FOCUSED = StateType(12)
|
||||
STATE_HAS_POPUP = StateType(42)
|
||||
STATE_HAS_TOOLTIP = StateType(13)
|
||||
STATE_HORIZONTAL = StateType(14)
|
||||
STATE_ICONIFIED = StateType(15)
|
||||
STATE_INDETERMINATE = StateType(32)
|
||||
STATE_INVALID = StateType(0)
|
||||
STATE_INVALID_ENTRY = StateType(36)
|
||||
STATE_IS_DEFAULT = StateType(39)
|
||||
STATE_LAST_DEFINED = StateType(44)
|
||||
STATE_MANAGES_DESCENDANTS = StateType(31)
|
||||
STATE_MODAL = StateType(16)
|
||||
STATE_MULTISELECTABLE = StateType(18)
|
||||
STATE_MULTI_LINE = StateType(17)
|
||||
STATE_OPAQUE = StateType(19)
|
||||
STATE_PRESSED = StateType(20)
|
||||
STATE_READ_ONLY = StateType(43)
|
||||
STATE_REQUIRED = StateType(33)
|
||||
STATE_RESIZABLE = StateType(21)
|
||||
STATE_SELECTABLE = StateType(22)
|
||||
STATE_SELECTABLE_TEXT = StateType(38)
|
||||
STATE_SELECTED = StateType(23)
|
||||
STATE_SENSITIVE = StateType(24)
|
||||
STATE_SHOWING = StateType(25)
|
||||
STATE_SINGLE_LINE = StateType(26)
|
||||
STATE_STALE = StateType(27)
|
||||
STATE_SUPPORTS_AUTOCOMPLETION = StateType(37)
|
||||
STATE_TRANSIENT = StateType(28)
|
||||
STATE_TRUNCATED = StateType(34)
|
||||
STATE_VERTICAL = StateType(29)
|
||||
STATE_VISIBLE = StateType(30)
|
||||
STATE_VISITED = StateType(40)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# Build a dictionary mapping state values to names based on the prefix of the enum constants.
|
||||
|
||||
STATE_VALUE_TO_NAME = dict(((value, name[6:].lower().replace('_', ' '))
|
||||
for name, value
|
||||
in globals().items()
|
||||
if name.startswith('STATE_')))
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
def stateset_init(self, *states):
|
||||
GObject.GObject.__init__(self)
|
||||
list(map(self.add, states))
|
||||
|
||||
# TODO: Fix pygobject so that this isn't needed (BGO#646581 may be related)
|
||||
def StateSet_getStates(self):
|
||||
ret = []
|
||||
for i in range(0, 64):
|
||||
if (self.states & (1 << i)):
|
||||
ret.append(Atspi.StateType(i))
|
||||
return ret
|
||||
|
||||
StateSet = Atspi.StateSet
|
||||
StateSet.getStates = StateSet_getStates
|
||||
StateSet.isEmpty = StateSet.is_empty
|
||||
StateSet.raw = lambda x: x
|
||||
StateSet.unref = lambda x: None
|
||||
StateSet.__init__ = stateset_init
|
|
@ -0,0 +1,351 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
#Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from gi.repository import Atspi
|
||||
from pyatspi.utils import *
|
||||
from pyatspi.interface import *
|
||||
|
||||
__all__ = [
|
||||
"Table",
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class Table(interface):
|
||||
"""
|
||||
An interface used by containers whose contained data is arranged
|
||||
in a "tabular" (i.e. row-column) fashion. Tables may resemble
|
||||
a two-dimensional grid, as in a spreadsheet, or may feature objects
|
||||
which span multiple rows and/or columns, but whose bounds are
|
||||
aligned on a row/column matrix. Thus, the Table interface may
|
||||
be used to represent "spreadsheets" as well as "frames".
|
||||
Objects within tables are children of the Table instance, and
|
||||
they may be referenced either via a child index or via a row/column
|
||||
pair. Their role may be ROLE_TABLE_CELL, but table 'cells' may
|
||||
have other roles as well. These 'cells' may implement other interfaces,
|
||||
such as Text, Action, Image, and Component, and should do so
|
||||
as appropriate to their onscreen representation and/or behavior.
|
||||
"""
|
||||
|
||||
def addColumnSelection(self, column):
|
||||
"""
|
||||
Select the specified column, adding it to the current column
|
||||
selection, if the table's selection model permits it.
|
||||
@param : column
|
||||
@return True if the specified column was successfully selected,
|
||||
False if not.
|
||||
"""
|
||||
return Atspi.Table.add_column_selection(self.obj, column)
|
||||
|
||||
def addRowSelection(self, row):
|
||||
"""
|
||||
Select the specified row, adding it to the current row selection,
|
||||
if the table's selection model permits it.
|
||||
@param : row
|
||||
@return True if the specified row was successfully selected,
|
||||
False if not.
|
||||
"""
|
||||
return Atspi.Table.add_row_selection(self.obj, row)
|
||||
|
||||
def getAccessibleAt(self, row, column):
|
||||
"""
|
||||
Get the table cell at the specified row and column indices.
|
||||
@param : row
|
||||
the specified table row, zero-indexed.
|
||||
@param : column
|
||||
the specified table column, zero-indexed.
|
||||
@return an Accessible object representing the specified table
|
||||
cell.
|
||||
"""
|
||||
return Atspi.Table.get_accessible_at(self.obj, row, column)
|
||||
|
||||
def getColumnAtIndex(self, index):
|
||||
"""
|
||||
Get the table column index occupied by the child at a particular
|
||||
1-D child index.
|
||||
@param : index
|
||||
the specified child index, zero-indexed.
|
||||
@return a long integer indicating the first column spanned by
|
||||
the child of a table, at the specified 1-D (zero-offset) index.
|
||||
"""
|
||||
return Atspi.Table.get_column_at_index(self.obj, index);
|
||||
|
||||
def getColumnDescription(self, column):
|
||||
"""
|
||||
Get a text description of a particular table column. This differs
|
||||
from AccessibleTable_getColumnHeader, which returns an Accessible.
|
||||
@param : column
|
||||
the specified table column, zero-indexed.
|
||||
@return a UTF-8 string describing the specified table column,
|
||||
if available.
|
||||
"""
|
||||
return Atspi.Table.get_column_description(self.obj, column)
|
||||
|
||||
def getColumnExtentAt(self, row, column):
|
||||
"""
|
||||
Get the number of columns spanned by the table cell at the specific
|
||||
row and column. (some tables can have cells which span multiple
|
||||
rows and/or columns).
|
||||
The returned values are meaningful only if the Table has
|
||||
both STATE_VISIBLE and STATE_SHOWING.
|
||||
@param : row
|
||||
the specified table row, zero-indexed.
|
||||
@param : column
|
||||
the specified table column, zero-indexed.
|
||||
@return a long integer indicating the number of columns spanned
|
||||
by the specified cell.
|
||||
"""
|
||||
return Atspi.Table.get_column_extent_at(self.obj, row, column)
|
||||
|
||||
def getColumnHeader(self, index):
|
||||
"""
|
||||
Get the header associated with a table column, if available,
|
||||
as an instance of Accessible. This differs from getColumnDescription,
|
||||
which returns a string.
|
||||
@param : column
|
||||
the specified table column, zero-indexed.
|
||||
@return an Accessible representatin of the specified table column,
|
||||
if available.
|
||||
"""
|
||||
return Atspi.Table.get_column_header(self.obj, index)
|
||||
|
||||
def getIndexAt(self, row, column):
|
||||
"""
|
||||
Get the 1-D child index corresponding to the specified 2-D row
|
||||
and column indices.
|
||||
@param : row
|
||||
the specified table row, zero-indexed.
|
||||
@param : column
|
||||
the specified table column, zero-indexed.
|
||||
@return a long integer which serves as the index of a specified
|
||||
cell in the table, in a form usable by Accessible::getChildAtIndex.
|
||||
"""
|
||||
return Atspi.Table.get_index_at(self.obj, row, column)
|
||||
|
||||
def getRowAtIndex(self, index):
|
||||
"""
|
||||
Get the table row index occupied by the child at a particular
|
||||
1-D child index.
|
||||
@param : index
|
||||
the specified child index, zero-indexed.
|
||||
@return a long integer indicating the first row spanned by the
|
||||
child of a table, at the specified 1-D (zero-offset) index.
|
||||
"""
|
||||
return Atspi.Table.get_row_at_index(self.obj, index)
|
||||
|
||||
def getRowColumnExtentsAtIndex(self, index):
|
||||
"""
|
||||
Given a child index, determine the row and column indices and
|
||||
extents, and whether the cell is currently selected. If the child
|
||||
at index is not a cell (for instance, if it is a summary, caption,
|
||||
etc.), False is returned.
|
||||
The returned values are meaningful only if the Table has
|
||||
both STATE_VISIBLE and STATE_SHOWING.
|
||||
@param : index
|
||||
the index of the Table child whose row/column extents are requested.
|
||||
@param : row
|
||||
back-filled with the first table row associated with the cell
|
||||
with child index index.
|
||||
@param : col
|
||||
back-filled with the first table column associated with the cell
|
||||
with child index index.
|
||||
@param : row_extents
|
||||
back-filled with the number of table rows across which child
|
||||
i extends.
|
||||
@param : col_extents
|
||||
back-filled with the number of table columns across which child
|
||||
i extends.
|
||||
@param : is_selected
|
||||
a boolean which is back-filled with True if the child at index
|
||||
i corresponds to a selected table cell, False otherwise.
|
||||
Example: If the Table child at index '6' extends across columns
|
||||
5 and 6 of row 2 of a Table instance, and is currently selected,
|
||||
then retval=table::getRowColumnExtentsAtIndex(6,row,col,
|
||||
row_extents,
|
||||
col_extents,
|
||||
is_selected);
|
||||
will return True, and after the call row, col, row_extents,
|
||||
col_extents, and is_selected will contain 2, 5, 1, 2, and True,
|
||||
respectively.
|
||||
@return True if the index is associated with a valid table cell,
|
||||
False if the index does not correspond to a cell. If False is
|
||||
returned, the values of the out parameters are undefined.
|
||||
"""
|
||||
return Atspi.Table.get_row_column_extents_at_index(self.obj, index)
|
||||
|
||||
def getRowDescription(self, index):
|
||||
"""
|
||||
Get a text description of a particular table row. This differs
|
||||
from AccessibleTable_getRowHeader, which returns an Accessible.
|
||||
@param : row
|
||||
the specified table row, zero-indexed.
|
||||
@return a UTF-8 string describing the specified table row, if
|
||||
available.
|
||||
"""
|
||||
return Atspi.Table.get_row_description(self.obj, index)
|
||||
|
||||
def getRowExtentAt(self, row, column):
|
||||
"""
|
||||
Get the number of rows spanned by the table cell at the specific
|
||||
row and column. (some tables can have cells which span multiple
|
||||
rows and/or columns).
|
||||
The returned values are meaningful only if the Table has
|
||||
both STATE_VISIBLE and STATE_SHOWING.
|
||||
@param : row
|
||||
the specified table row, zero-indexed.
|
||||
@param : column
|
||||
the specified table column, zero-indexed.
|
||||
@return a long integer indicating the number of rows spanned
|
||||
by the specified cell.
|
||||
"""
|
||||
return Atspi.Table.get_row_extent_at(self.obj, row, column)
|
||||
|
||||
def getRowHeader(self, row):
|
||||
"""
|
||||
Get the header associated with a table row, if available. This
|
||||
differs from getRowDescription, which returns a string.
|
||||
@param : row
|
||||
the specified table row, zero-indexed.
|
||||
@return an Accessible representatin of the specified table row,
|
||||
if available.
|
||||
"""
|
||||
return Atspi.Table.get_row_header(self.obj, row)
|
||||
|
||||
def getSelectedColumns(self):
|
||||
"""
|
||||
Obtain the indices of all columns which are currently selected.
|
||||
@return a sequence of integers comprising the indices of columns
|
||||
currently selected.
|
||||
"""
|
||||
return Atspi.Table.get_selected_columns(self.obj)
|
||||
|
||||
def getSelectedRows(self):
|
||||
"""
|
||||
Obtain the indices of all rows which are currently selected.
|
||||
@return a sequence of integers comprising the indices of rows
|
||||
currently selected.
|
||||
"""
|
||||
return Atspi.Table.get_selected_rows(self.obj)
|
||||
|
||||
def isColumnSelected(self, column):
|
||||
"""
|
||||
Determine whether a table column is selected.
|
||||
@param : column
|
||||
the column being queried.
|
||||
@return True if the specified column is currently selected, False
|
||||
if not.
|
||||
"""
|
||||
return Atspi.Table.is_column_selected(self.obj, column)
|
||||
|
||||
def isRowSelected(self, row):
|
||||
"""
|
||||
Determine whether a table row is selected.
|
||||
@param : row
|
||||
the row being queried.
|
||||
@return True if the specified row is currently selected, False
|
||||
if not.
|
||||
"""
|
||||
return Atspi.Table.is_row_selected(self.obj, row)
|
||||
|
||||
def isSelected(self, row, column):
|
||||
"""
|
||||
Determine whether the cell at a specific row and column is selected.
|
||||
@param : row
|
||||
a row occupied by the cell whose state is being queried.
|
||||
@param : column
|
||||
a column occupied by the cell whose state is being queried.
|
||||
@return True if the specified cell is currently selected, False
|
||||
if not.
|
||||
"""
|
||||
return Atspi.Table.is_selected(self.obj, row, column)
|
||||
|
||||
def removeColumnSelection(self, column):
|
||||
"""
|
||||
Remove the specified column from current column selection, if
|
||||
the table's selection model permits it.
|
||||
@param : column
|
||||
@return True if the specified column was successfully de-selected,
|
||||
False if not.
|
||||
"""
|
||||
return Atspi.Table.remove_column_selection(self.obj, column)
|
||||
|
||||
def removeRowSelection(self, row):
|
||||
"""
|
||||
Remove the specified row from current row selection, if the table's
|
||||
selection model permits it.
|
||||
@param : row
|
||||
@return True if the specified row was successfully de-selected,
|
||||
False if not.
|
||||
"""
|
||||
return Atspi.Table.remove_row_selection(self.obj, row)
|
||||
|
||||
def get_caption(self):
|
||||
return Atspi.Table.get_caption(self.obj)
|
||||
_captionDoc = \
|
||||
"""
|
||||
An Accessible which represents of a caption for a Table.
|
||||
"""
|
||||
caption = property(fget=get_caption, doc=_captionDoc)
|
||||
|
||||
def get_nColumns(self):
|
||||
return Atspi.Table.get_n_columns(self.obj)
|
||||
_nColumnsDoc = \
|
||||
"""
|
||||
The total number of columns in this table (including empty columns),
|
||||
exclusive of columns which are programmatically hidden. Columns
|
||||
which are scrolled out of view or clipped by the current viewport
|
||||
are included.
|
||||
"""
|
||||
nColumns = property(fget=get_nColumns, doc=_nColumnsDoc)
|
||||
|
||||
def get_nRows(self):
|
||||
return Atspi.Table.get_n_rows(self.obj)
|
||||
_nRowsDoc = \
|
||||
"""
|
||||
The total number of rows in this table (including empty rows),
|
||||
exclusive of any rows which are programmatically hidden. Rows
|
||||
which are merely scrolled out of view are included.
|
||||
"""
|
||||
nRows = property(fget=get_nRows, doc=_nRowsDoc)
|
||||
|
||||
def get_nSelectedColumns(self):
|
||||
return Atspi.Table.get_n_selected_columns(self.obj)
|
||||
_nSelectedColumnsDoc = \
|
||||
"""
|
||||
The number of columns currently selected. A selected column is
|
||||
one in which all included cells are selected.
|
||||
"""
|
||||
nSelectedColumns = property(fget=get_nSelectedColumns, doc=_nSelectedColumnsDoc)
|
||||
|
||||
def get_nSelectedRows(self):
|
||||
return Atspi.Table.get_n_selected_rows(self.obj)
|
||||
_nSelectedRowsDoc = \
|
||||
"""
|
||||
The number of rows currently selected. A selected row is one
|
||||
in which all included cells are selected.
|
||||
"""
|
||||
nSelectedRows = property(fget=get_nSelectedRows, doc=_nSelectedRowsDoc)
|
||||
|
||||
def get_summary(self):
|
||||
return Atspi.Table.get_summary(self.obj)
|
||||
_summaryDoc = \
|
||||
"""
|
||||
An accessible object which summarizes the contents of a Table.
|
||||
This object is frequently itself a Table instance, albeit a simplified
|
||||
one.
|
||||
"""
|
||||
summary = property(fget=get_summary, doc=_summaryDoc)
|
||||
|
||||
#END----------------------------------------------------------------------------
|
|
@ -0,0 +1,84 @@
|
|||
#Copyright (c) 2013 SUSE LLC.
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from gi.repository import Atspi
|
||||
from pyatspi.utils import *
|
||||
from pyatspi.interface import *
|
||||
|
||||
__all__ = [
|
||||
"TableCell",
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class TableCell(interface):
|
||||
"""
|
||||
An interface used by cells in a table.
|
||||
"""
|
||||
|
||||
def get_columnSpan(self):
|
||||
return Atspi.TableCell.get_column_span(self.obj)
|
||||
_columnSpanDoc = \
|
||||
"""
|
||||
Get the number of columns occupied by this cell.
|
||||
"""
|
||||
columnSpan = property(fget=get_columnSpan, doc=_columnSpanDoc)
|
||||
|
||||
def get_columnHeaderCells(self):
|
||||
return Atspi.TableCell.get_column_header_cells(self.obj)
|
||||
_columnHeaderCellsDoc = \
|
||||
"""
|
||||
Get the column headers as an array of cell accessibles.
|
||||
"""
|
||||
columnHeaderCells = property(fget=get_columnHeaderCells, doc=_columnHeaderCellsDoc)
|
||||
|
||||
def get_rowSpan(self):
|
||||
return Atspi.TableCell.get_row_span(self.obj)
|
||||
_rowSpanDoc = \
|
||||
"""
|
||||
Get the number of rows occupied by this cell.
|
||||
"""
|
||||
rowSpan = property(fget=get_rowSpan, doc=_rowSpanDoc)
|
||||
|
||||
def get_rowHeaderCells(self):
|
||||
return Atspi.TableCell.get_row_header_cells(self.obj)
|
||||
_rowHeaderCellsDoc = \
|
||||
"""
|
||||
Get the row headers as an array of cell accessibles.
|
||||
"""
|
||||
rowHeaderCells = property(fget=get_rowHeaderCells, doc=_rowHeaderCellsDoc)
|
||||
|
||||
def get_position(self):
|
||||
return Atspi.TableCell.get_position(self.obj)
|
||||
_positionDoc = \
|
||||
"""
|
||||
Returns the tabular position of this accessible.
|
||||
"""
|
||||
position = property(fget=get_position, doc=_positionDoc)
|
||||
|
||||
def getRowColumnSpan(self):
|
||||
"""
|
||||
determine the row and column indices and span of the given cell.
|
||||
"""
|
||||
return Atspi.TableCell.get_row_column_span(self.obj)
|
||||
|
||||
def get_table(self):
|
||||
return Atspi.TableCell.get_table(self.obj)
|
||||
_tableDoc = \
|
||||
"""
|
||||
Returns a reference to the accessible of the containing table.
|
||||
"""
|
||||
table = property(fget=get_table, doc=_tableDoc)
|
||||
|
||||
#END----------------------------------------------------------------------------
|
|
@ -0,0 +1,613 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
#Copyright (C) 2010 Novell, Inc.
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from gi.repository import Atspi
|
||||
from pyatspi.atspienum import *
|
||||
from pyatspi.utils import *
|
||||
from pyatspi.interface import *
|
||||
|
||||
|
||||
__all__ = [
|
||||
"Text",
|
||||
"TEXT_BOUNDARY_TYPE",
|
||||
"TEXT_BOUNDARY_CHAR",
|
||||
"TEXT_BOUNDARY_WORD_START",
|
||||
"TEXT_BOUNDARY_WORD_END",
|
||||
"TEXT_BOUNDARY_SENTENCE_START",
|
||||
"TEXT_BOUNDARY_SENTENCE_END",
|
||||
"TEXT_BOUNDARY_LINE_START",
|
||||
"TEXT_BOUNDARY_LINE_END",
|
||||
"TEXT_CLIP_TYPE",
|
||||
"TEXT_CLIP_NONE",
|
||||
"TEXT_CLIP_MIN",
|
||||
"TEXT_CLIP_MAX",
|
||||
"TEXT_CLIP_BOTH",
|
||||
"TEXT_GRANULARITY_CHAR",
|
||||
"TEXT_GRANULARITY_WORD",
|
||||
"TEXT_GRANULARITY_SENTENCE",
|
||||
"TEXT_GRANULARITY_LINE",
|
||||
"TEXT_GRANULARITY_PARAGRAPH",
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class TEXT_BOUNDARY_TYPE(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'TEXT_BOUNDARY_CHAR',
|
||||
1:'TEXT_BOUNDARY_WORD_START',
|
||||
2:'TEXT_BOUNDARY_WORD_END',
|
||||
3:'TEXT_BOUNDARY_SENTENCE_START',
|
||||
4:'TEXT_BOUNDARY_SENTENCE_END',
|
||||
5:'TEXT_BOUNDARY_LINE_START',
|
||||
6:'TEXT_BOUNDARY_LINE_END',
|
||||
}
|
||||
|
||||
TEXT_BOUNDARY_CHAR = TEXT_BOUNDARY_TYPE(0)
|
||||
TEXT_BOUNDARY_LINE_END = TEXT_BOUNDARY_TYPE(6)
|
||||
TEXT_BOUNDARY_LINE_START = TEXT_BOUNDARY_TYPE(5)
|
||||
TEXT_BOUNDARY_SENTENCE_END = TEXT_BOUNDARY_TYPE(4)
|
||||
TEXT_BOUNDARY_SENTENCE_START = TEXT_BOUNDARY_TYPE(3)
|
||||
TEXT_BOUNDARY_WORD_END = TEXT_BOUNDARY_TYPE(2)
|
||||
TEXT_BOUNDARY_WORD_START = TEXT_BOUNDARY_TYPE(1)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class TEXT_CLIP_TYPE(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'TEXT_CLIP_NONE',
|
||||
1:'TEXT_CLIP_MIN',
|
||||
2:'TEXT_CLIP_MAX',
|
||||
3:'TEXT_CLIP_BOTH',
|
||||
}
|
||||
|
||||
TEXT_CLIP_BOTH = TEXT_CLIP_TYPE(3)
|
||||
TEXT_CLIP_MAX = TEXT_CLIP_TYPE(2)
|
||||
TEXT_CLIP_MIN = TEXT_CLIP_TYPE(1)
|
||||
TEXT_CLIP_NONE = TEXT_CLIP_TYPE(0)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class TEXT_GRANULARITY_TYPE(AtspiEnum):
|
||||
_enum_lookup = {
|
||||
0:'TEXT_GRANULARITY_CHAR',
|
||||
1:'TEXT_GRANULARITY_WORD',
|
||||
2:'TEXT_GRANULARITY_SENTENCE',
|
||||
3:'TEXT_GRANULARITY_LINE',
|
||||
4:'TEXT_GRANULARITY_PARAGRAPH',
|
||||
}
|
||||
|
||||
TEXT_GRANULARITY_CHAR = TEXT_GRANULARITY_TYPE(0)
|
||||
TEXT_GRANULARITY_WORD = TEXT_GRANULARITY_TYPE(1)
|
||||
TEXT_GRANULARITY_SENTENCE = TEXT_GRANULARITY_TYPE(2)
|
||||
TEXT_GRANULARITY_LINE = TEXT_GRANULARITY_TYPE(3)
|
||||
TEXT_GRANULARITY_PARAGRAPH = TEXT_GRANULARITY_TYPE(4)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class Text(interface):
|
||||
"""
|
||||
The text interface should be implemented by objects which place
|
||||
textual information onscreen as character strings or glyphs.
|
||||
The text interface allows access to textual content, including
|
||||
display attributes and semantic hints associated with runs of
|
||||
text, and access to bounding box information for glyphs and substrings.
|
||||
It also allows portions of textual content to be selected, if
|
||||
the object's StateSet includes STATE_SELECTABLE_TEXT.
|
||||
In some cases a Text object may have, as its content, an empty
|
||||
string. In particular this can occur in the case of Hypertext
|
||||
objects which do not display explicitly textual information onscreen,
|
||||
as Hypertext is derived from the Text interface.
|
||||
Typographic and semantic attributes of onscreen textual content,
|
||||
for instance typeface, weight, language, and such qualities as
|
||||
'emphasis' or 'blockquote', are represented as text attributes.
|
||||
Contiguous sequences of characters over which these attributes
|
||||
are unchanged are referred to as "attribute runs", and are available
|
||||
via Text::getAttributeRun. Where possible, implementing clients
|
||||
will report textual attributes which are the same over the entire
|
||||
text object, for instance those inherited from a default or document-scope
|
||||
style, via getDefaultAttributes instead of reporting them explicitly
|
||||
for each character. Therefore, for any span of text, the attributes
|
||||
in effect are the union of the set returned by Text::getDefaultAttributes,
|
||||
and the set returned at a particular character offset via Text::getAttributeRun.
|
||||
"""
|
||||
|
||||
def addSelection(self, startOffset, endOffset):
|
||||
"""
|
||||
The result of calling addSelection on objects which already have
|
||||
one selection present, and which do not include STATE_MULTISELECTABLE,
|
||||
is undefined, other than the return value.
|
||||
@return True of the selection was successfully added, False otherwise.
|
||||
Selection may fail if the object does not support selection of
|
||||
text (see STATE_SELECTABLE_TEXT), if the object does not support
|
||||
multiple selections and a selection is already defined, or for
|
||||
other reasons (for instance if the user does not have permission
|
||||
to copy the text into the relevant selection buffer).
|
||||
"""
|
||||
return Atspi.Text.add_selection(self.obj, startOffset, endOffset)
|
||||
|
||||
def getAttributeRun(self, offset, includeDefaults=True):
|
||||
"""
|
||||
Query a particular text object for the text attributes defined
|
||||
at a given offset, obtaining the start and end of the "attribute
|
||||
run" over which these attributes are currently invariant. Text
|
||||
attributes are those presentational, typographic, or semantic
|
||||
attributes or qualitites which apply to a range of text specifyable
|
||||
by starting and ending offsets. Attributes relevant to localization
|
||||
should be provided in accordance with the w3c "Internationalization
|
||||
and Localization Markup Requirements", http://www.w3.org/TR/2005/WD-itsreq-20051122/
|
||||
Other text attributes should choose their names and value semantics
|
||||
in accordance with relevant standards such as CSS level 2 (http://www.w3.org/TR/1998/REC-CSS2-19980512),
|
||||
XHTML 1.0 (http://www.w3.org/TR/2002/REC-xhtml1-20020801), and
|
||||
WICD (http://www.w3.org/TR/2005/WD-WICD-20051121/). Those attributes
|
||||
from the aforementioned specifications and recommendations which
|
||||
do not concern typographic, presentational, or semantic aspects
|
||||
of text should be exposed via the more general Accessible::getAttributes()
|
||||
API (if at all).
|
||||
For example, CSS attributes which should be exposed on text (either
|
||||
as default attributes, or as explicitly-set attributes when non-default
|
||||
values are specified in the content view) include the Font attributes
|
||||
(i.e. "css2:font-weight", "css2:font-style"), the "css2:color"
|
||||
and "css2:background-color" attributes, and "css2:text-decoration"
|
||||
attribute.
|
||||
If includeDefaults is TRUE, then this AttributeSet should include
|
||||
the default attributes as well as those which are explicitly
|
||||
assigned to the attribute run in question. startOffset and endOffset
|
||||
will be back-filled to indicate the start and end of the attribute
|
||||
run which contains 'offset' - an attribute run is a contiguous
|
||||
section of text whose attributes are homogeneous.
|
||||
@param : offset
|
||||
the offset of the character whose attributes will be reported.
|
||||
@param : startOffset
|
||||
backfilled with the starting offset of the character range over
|
||||
which all text attributes match those of offset, i.e. the start
|
||||
of the homogeneous attribute run including offset.
|
||||
@param : endOffset
|
||||
backfilled with the offset of the first character past the character
|
||||
range over which all text attributes match those of offset, i.e.
|
||||
the character immediately after the homogeneous attribute run
|
||||
including offset.
|
||||
@param : includeDefaults
|
||||
if False, the call should only return those attributes which
|
||||
are explicitly set on the current attribute run, omitting any
|
||||
attributes which are inherited from the default values. See also
|
||||
Text::getDefaultAttributes.
|
||||
@return the AttributeSet defined at offset, optionally including
|
||||
the 'default' attributes.
|
||||
"""
|
||||
[attrs, startOffset, endOffset] = Atspi.Text.get_attribute_run(self.obj, offset, includeDefaults)
|
||||
dict = [key + ':' + value for key, value in attrs.items()]
|
||||
return [dict, startOffset, endOffset]
|
||||
|
||||
def getAttributeValue(self, offset, attributeName):
|
||||
"""
|
||||
Get the string value of a named attribute at a given offset,
|
||||
if defined.
|
||||
@param : offset
|
||||
the offset of the character for which the attribute run is to
|
||||
be obtained.
|
||||
@param : attributeName
|
||||
the name of the attribute for which the value is to be returned,
|
||||
if defined.
|
||||
@param : startOffset
|
||||
back-filled with the offset of the first character in the attribute
|
||||
run containing the character at offset.
|
||||
@param : endOffset
|
||||
back-filled with the offset of the first character past the end
|
||||
of the attribute run containing the character at offset.
|
||||
@param : defined
|
||||
back-filled with True if the attributeName has a defined value
|
||||
at offset, False otherwise.
|
||||
@return the value of attribute (name-value pair) corresponding
|
||||
to "name", if defined.
|
||||
"""
|
||||
return Atspi.Text.get_text_attribute_value(self.obj, offset, attributeName)
|
||||
|
||||
def getAttributes(self, offset):
|
||||
"""
|
||||
getAttributes is deprecated in favor of getAttributeRun.
|
||||
@return the attributes at offset, as a semicolon-delimited set
|
||||
of colon-delimited name-value pairs.
|
||||
"""
|
||||
[attrs, startOffset, endOffset] = Atspi.Text.get_text_attributes(self.obj, offset)
|
||||
arr = [key + ':' + value for key, value in attrs.items()]
|
||||
str = ';'.join (arr)
|
||||
return [str, startOffset, endOffset]
|
||||
|
||||
def getBoundedRanges(self, x, y, width, height, coordType, xClipType, yClipType):
|
||||
"""
|
||||
Return the text content within a bounding box, as a list of Range
|
||||
structures. Depending on the TEXT_CLIP_TYPE parameters, glyphs
|
||||
which are clipped by the bounding box (i.e. which lie partially
|
||||
inside and partially outside it) may or may not be included in
|
||||
the ranges returned.
|
||||
@param : x
|
||||
the minimum x ( i.e. leftmost) coordinate of the bounding box.
|
||||
@param : y
|
||||
the minimum y coordinate of the bounding box.
|
||||
@param : width
|
||||
the horizontal size of the bounding box. The rightmost bound
|
||||
of the bounding box is (x + width);
|
||||
@param : height
|
||||
the vertical size of the bounding box. The maximum y value of
|
||||
the bounding box is (y + height);
|
||||
@param : coordType
|
||||
If 0, the above coordinates are interpreted as pixels relative
|
||||
to corner of the screen; if 1, the coordinates are interpreted
|
||||
as pixels relative to the corner of the containing toplevel window.
|
||||
@param : xClipType
|
||||
determines whether text which intersects the bounding box in
|
||||
the x direction is included.
|
||||
@param : yClipType
|
||||
determines whether text which intersects the bounding box in
|
||||
the y direction is included.
|
||||
"""
|
||||
return Atspi.Text.get_bounded_ranges(self.obj, x, y, width, height, coordType, xClipType, yClipType)
|
||||
|
||||
def getCharacterAtOffset(self, offset):
|
||||
"""
|
||||
@param : offset
|
||||
position
|
||||
@return an unsigned long integer whose value corresponds to the
|
||||
UCS-4 representation of the character at the specified text offset,
|
||||
or 0 if offset is out of range.
|
||||
"""
|
||||
return Atspi.Text.get_character_at_offset(self.obj, offset)
|
||||
|
||||
def getCharacterExtents(self, offset, coordType):
|
||||
"""
|
||||
Obtain a the bounding box, as x, y, width, and height, of the
|
||||
character or glyph at a particular character offset in this object's
|
||||
text content. The coordinate system in which the results are
|
||||
reported is specified by coordType. If an onscreen glyph corresponds
|
||||
to multiple character offsets, for instance if the glyph is a
|
||||
ligature, the bounding box reported will include the entire glyph
|
||||
and therefore may apply to more than one character offset.
|
||||
The returned values are meaningful only if the Text has
|
||||
both STATE_VISIBLE and STATE_SHOWING.
|
||||
@param : offset
|
||||
the character offset of the character or glyph being queried.
|
||||
@param : coordType
|
||||
If 0, the results will be reported in screen coordinates, i.e.
|
||||
in pixels relative to the upper-left corner of the screen, with
|
||||
the x axis pointing right and the y axis pointing down. If 1,
|
||||
the results will be reported relative to the containing toplevel
|
||||
window, with the x axis pointing right and the y axis pointing
|
||||
down.
|
||||
"""
|
||||
ret = Atspi.Text.get_character_extents(self.obj, offset, coordType)
|
||||
return rectToList(ret)
|
||||
|
||||
def getDefaultAttributeSet(self):
|
||||
"""
|
||||
Return an AttributeSet containing the text attributes which apply
|
||||
to all text in the object by virtue of the default settings of
|
||||
the document, view, or user agent; e.g. those attributes which
|
||||
are implied rather than explicitly applied to the text object.
|
||||
For instance, an object whose entire text content has been explicitly
|
||||
marked as 'bold' will report the 'bold' attribute via getAttributeRun(),
|
||||
whereas an object whose text weight is inspecified may report
|
||||
the default or implied text weight in the default AttributeSet.
|
||||
"""
|
||||
return Atspi.Text.get_default_attributes(self.obj)
|
||||
|
||||
ret = Atspi.Text.get_default_attribute_set(self.obj)
|
||||
return [key + ':' + value for key, value in ret.values()]
|
||||
|
||||
def getDefaultAttributes(self):
|
||||
"""
|
||||
Deprecated in favor of getDefaultAttributeSet.
|
||||
@return the attributes which apply to the entire text content,
|
||||
but which were not explicitly specified by the content creator.
|
||||
"""
|
||||
ret = Atspi.Text.get_default_attributes(self.obj)
|
||||
return ';'.join([key + ':' + value for key, value in ret.items()])
|
||||
|
||||
def getNSelections(self):
|
||||
"""
|
||||
Obtain the number of separate, contiguous selections in the current
|
||||
Text object. Text objects which do not implement selection of
|
||||
discontiguous text regions will always return '0' or '1'. Note
|
||||
that "contiguous" is defined by continuity of the offsets, i.e.
|
||||
a text 'selection' is defined by a start/end offset pair. In
|
||||
the case of bidirectional text, this means that a continguous
|
||||
selection may appear visually discontiguous, and vice-versa.
|
||||
@return the number of contiguous selections in the current Text
|
||||
object.
|
||||
"""
|
||||
return Atspi.Text.get_n_selections(self.obj)
|
||||
|
||||
def getOffsetAtPoint(self, x, y, coordType):
|
||||
"""
|
||||
Get the offset of the character at a given onscreen coordinate.
|
||||
The coordinate system used to interpret x and y is determined
|
||||
by parameter coordType.
|
||||
@param : x
|
||||
@param : y
|
||||
@param : coordType
|
||||
if 0, the input coordinates are interpreted relative to the entire
|
||||
screen, if 1, they are relative to the toplevel window containing
|
||||
this Text object.
|
||||
@return the text offset (as an offset into the character array)
|
||||
of the glyph whose onscreen bounds contain the point x,y, or
|
||||
-1 if the point is outside the bounds of any glyph.
|
||||
"""
|
||||
return Atspi.Text.get_offset_at_point(self.obj, x, y, coordType)
|
||||
|
||||
def getRangeExtents(self, startOffset, endOffset, coordType):
|
||||
"""
|
||||
Obtain the bounding box which entirely contains a given text
|
||||
range. Negative values may be returned for the bounding box parameters
|
||||
in the event that all or part of the text range is offscreen
|
||||
or not mapped to the screen.
|
||||
The returned values are meaningful only if the Text has
|
||||
both STATE_VISIBLE and STATE_SHOWING.
|
||||
@param : startOffset
|
||||
the offset of the first character in the specified range.
|
||||
@param : endOffset
|
||||
the offset of the character immediately after the last character
|
||||
in the specified range.
|
||||
@param : x
|
||||
an integer parameter which is back-filled with the minimum horizontal
|
||||
coordinate of the resulting bounding box.
|
||||
@param : y
|
||||
an integer parameter which is back-filled with the minimum vertical
|
||||
coordinate of the resulting bounding box.
|
||||
@param : width
|
||||
an integer parameter which is back-filled with the horizontal
|
||||
extent of the bounding box.
|
||||
@param : height
|
||||
an integer parameter which is back-filled with the vertical extent
|
||||
of the bounding box.
|
||||
@param : coordType
|
||||
If 0, the above coordinates are reported in pixels relative to
|
||||
corner of the screen; if 1, the coordinates are reported relative
|
||||
to the corner of the containing toplevel window.
|
||||
"""
|
||||
ret = Atspi.Text.get_range_extents(self.obj, startOffset, endOffset, coordType)
|
||||
return rectToList(ret)
|
||||
|
||||
def getSelection(self, selectionNum):
|
||||
"""
|
||||
The result of calling getSelection with an out-of-range selectionNum
|
||||
(i.e. for a selection which does not exist) is not strictly defined,
|
||||
but should set endOffset equal to startOffset.
|
||||
@param : selectionNum
|
||||
indicates which of a set of non-contiguous selections to modify.
|
||||
@param : startOffset
|
||||
back-filled with the starting offset of the resulting substring,
|
||||
if one exists.
|
||||
@param : endOffset
|
||||
back-filled with the offset of the character immediately following
|
||||
the resulting substring, if one exists.
|
||||
"""
|
||||
ret = Atspi.Text.get_selection(self.obj, selectionNum)
|
||||
return rangeToList(ret)
|
||||
|
||||
def getText(self, startOffset, endOffset):
|
||||
"""
|
||||
Obtain all or part of the onscreen textual content of a Text
|
||||
object. If endOffset is specified as "-1", then this method will
|
||||
return the entire onscreen textual contents of the Text object.
|
||||
@param : startOffset
|
||||
back-filled with the starting offset of the resulting substring,
|
||||
if one exists.
|
||||
@param : endOffset
|
||||
back-filled with the offset of the character immediately following
|
||||
the resulting substring, if one exists.
|
||||
@return the textual content of the current Text object beginning
|
||||
startOffset (inclusive) up to but not including the character
|
||||
at endOffset.
|
||||
"""
|
||||
return Atspi.Text.get_text(self.obj, startOffset, endOffset)
|
||||
|
||||
def getTextAfterOffset(self, offset, type):
|
||||
"""
|
||||
Deprecated in favor of getStringAtOffset.
|
||||
Obtain a subset of the text content of an object which entirely
|
||||
follows offset, delimited by character, word, line, or sentence
|
||||
boundaries as specified by type. The starting and ending offsets
|
||||
of the resulting substring are returned in startOffset and endOffset.
|
||||
By definition, if such a substring exists, startOffset must be
|
||||
greater than offset.
|
||||
@param : offset
|
||||
the offset from which the substring search begins, and which
|
||||
must lie before the returned substring.
|
||||
@param : type
|
||||
the text-boundary delimiter which determines whether the returned
|
||||
text constitures a character, word, line, or sentence (and possibly
|
||||
attendant whitespace), and whether the start or ending of such
|
||||
a substring forms the boundary condition.
|
||||
@param : startOffset
|
||||
back-filled with the starting offset of the resulting substring,
|
||||
if one exists.
|
||||
@param : endOffset
|
||||
back-filled with the offset of the character immediately following
|
||||
the resulting substring, if one exists.
|
||||
@return a string which is a substring of the text content of
|
||||
the object, delimited by the specified boundary condition.
|
||||
"""
|
||||
ret = Atspi.Text.get_text_after_offset(self.obj, offset, type)
|
||||
return textRangeToList(ret)
|
||||
|
||||
def getTextAtOffset(self, offset, type):
|
||||
"""
|
||||
Deprecated in favor of getStringAtOffset.
|
||||
Obtain a subset of the text content of an object which includes
|
||||
the specified offset, delimited by character, word, line, or
|
||||
sentence boundaries as specified by type. The starting and ending
|
||||
offsets of the resulting substring are returned in startOffset
|
||||
and endOffset.
|
||||
@param : offset
|
||||
the offset from which the substring search begins, and which
|
||||
must lie within the returned substring.
|
||||
@param : type
|
||||
the text-boundary delimiter which determines whether the returned
|
||||
text constitures a character, word, line, or sentence (and possibly
|
||||
attendant whitespace), and whether the start or ending of such
|
||||
a substring forms the boundary condition.
|
||||
@param : startOffset
|
||||
back-filled with the starting offset of the resulting substring,
|
||||
if one exists.
|
||||
@param : endOffset
|
||||
back-filled with the offset of the character immediately following
|
||||
the resulting substring, if one exists.
|
||||
@return a string which is a substring of the text content of
|
||||
the object, delimited by the specified boundary condition.
|
||||
"""
|
||||
ret = Atspi.Text.get_text_at_offset(self.obj, offset, type)
|
||||
return textRangeToList(ret)
|
||||
|
||||
def getTextBeforeOffset(self, offset, type):
|
||||
"""
|
||||
Deprecated in favor of getStringAtOffset.
|
||||
Obtain a subset of the text content of an object which entirely
|
||||
precedes offset, delimited by character, word, line, or sentence
|
||||
boundaries as specified by type. The starting and ending offsets
|
||||
of the resulting substring are returned in startOffset and endOffset.
|
||||
By definition, if such a substring exists, endOffset is less
|
||||
than or equal to offset.
|
||||
@param : offset
|
||||
the offset from which the substring search begins.
|
||||
@param : type
|
||||
the text-boundary delimiter which determines whether the returned
|
||||
text constitures a character, word, line, or sentence (and possibly
|
||||
attendant whitespace), and whether the start or ending of such
|
||||
a substring forms the boundary condition.
|
||||
@param : startOffset
|
||||
back-filled with the starting offset of the resulting substring,
|
||||
if one exists.
|
||||
@param : endOffset
|
||||
back-filled with the offset of the character immediately following
|
||||
the resulting substring, if one exists.
|
||||
@return a string which is a substring of the text content of
|
||||
the object, delimited by the specified boundary condition.
|
||||
"""
|
||||
ret = Atspi.Text.get_text_before_offset(self.obj, offset, type)
|
||||
return textRangeToList(ret)
|
||||
|
||||
def getStringAtOffset(self, offset, type):
|
||||
"""
|
||||
Obtain a subset of the text content of an object which includes
|
||||
the specified offset, delimited by character, word, line, sentence
|
||||
or paragraph granularity as specified by type. The starting and ending
|
||||
offsets of the resulting substring are returned in startOffset
|
||||
and endOffset.
|
||||
@param : offset
|
||||
the offset from which the substring search begins, and which
|
||||
must lie within the returned substring.
|
||||
@param : type
|
||||
the text granularity which determines whether the returned text
|
||||
constitures a character, word, line, sentence or paragraph (and
|
||||
possibly attendant whitespace). For all of those cases, boundaries
|
||||
will always be defined from the start of the current substring to
|
||||
the start of the following one for the same granularity.
|
||||
@param : startOffset
|
||||
back-filled with the starting offset of the resulting substring,
|
||||
if one exists.
|
||||
@param : endOffset
|
||||
back-filled with the offset of the character immediately following
|
||||
the resulting substring, if one exists.
|
||||
@return a string which is a substring of the text content of
|
||||
the object, delimited by the specified text granularity.
|
||||
"""
|
||||
ret = Atspi.Text.get_string_at_offset(self.obj, offset, type)
|
||||
return textRangeToList(ret)
|
||||
|
||||
def removeSelection(self, selectionNum):
|
||||
"""
|
||||
Deselect the text contained in the specified selectionNum, if
|
||||
such a selection exists, otherwise do nothing. Removal of a non-existant
|
||||
selectionNum has no effect.
|
||||
@param : selectionNum
|
||||
indicates which of a set of non-contiguous selections to modify.
|
||||
@return True if the selection was successfully removed, False
|
||||
otherwise.
|
||||
"""
|
||||
return Atspi.Text.remove_selection(self.obj, selectionNum)
|
||||
|
||||
def setCaretOffset(self, offset):
|
||||
"""
|
||||
Programmatically move the text caret (visible or virtual, as
|
||||
above) to a given position.
|
||||
@param : offset
|
||||
a long int indicating the desired character offset. Not all implementations
|
||||
of Text will honor setCaretOffset requests, so the return value
|
||||
below should be checked by the client.
|
||||
@return TRUE if the request was carried out, or FALSE if the
|
||||
caret could not be moved to the requested position.
|
||||
"""
|
||||
return Atspi.Text.set_caret_offset(self.obj, offset)
|
||||
|
||||
def setSelection(self, selectionNum, startOffset, endOffset):
|
||||
"""
|
||||
Modify an existing selection's start or ending offset.
|
||||
Calling setSelection for a selectionNum that is not already defined
|
||||
has no effect. The result of calling setSelection with a selectionNum
|
||||
greater than 0 for objects that do not include STATE_MULTISELECTABLE
|
||||
is undefined.
|
||||
@param : selectionNum
|
||||
indicates which of a set of non-contiguous selections to modify.
|
||||
@param : startOffset
|
||||
the new starting offset for the selection
|
||||
@param : endOffset
|
||||
the new ending offset for the selection
|
||||
@return True if the selection corresponding to selectionNum is
|
||||
successfully modified, False otherwise.
|
||||
"""
|
||||
return Atspi.Text.set_selection(self.obj, selectionNum, startOffset, endOffset)
|
||||
|
||||
def get_caretOffset(self):
|
||||
return Atspi.Text.get_caret_offset(self.obj)
|
||||
_caretOffsetDoc = \
|
||||
"""
|
||||
The current offset of the text caret in the Text object. This
|
||||
caret may be virtual, e.g. non-visual and notional-only, but
|
||||
if an onscreen representation of the caret position is visible,
|
||||
it will correspond to this offset. The caret offset is given
|
||||
as a character offset, as opposed to a byte offset into a text
|
||||
buffer or a column offset.
|
||||
"""
|
||||
caretOffset = property(fget=get_caretOffset, doc=_caretOffsetDoc)
|
||||
|
||||
def get_characterCount(self):
|
||||
return Atspi.Text.get_character_count(self.obj)
|
||||
_characterCountDoc = \
|
||||
"""
|
||||
The total current number of characters in the Text object, including
|
||||
whitespace and non-spacing characters.
|
||||
"""
|
||||
characterCount = property(fget=get_characterCount, doc=_characterCountDoc)
|
||||
|
||||
def scrollSubstringTo(self, startOffset, endOffset, scroll_type):
|
||||
"""
|
||||
Makes the text range visible on the screen at a given position by
|
||||
scrolling all necessary parents.
|
||||
@return True if scrolling was successful.
|
||||
"""
|
||||
return Atspi.Text.scroll_substring_to(self.obj, startOffset, endOffset, scroll_type)
|
||||
|
||||
def scrollSubstringToPoint(self, startOffset, endOffset, coord_type, x, y):
|
||||
"""
|
||||
Makes the text range visible on the screen at a given position by
|
||||
scrolling all necessary parents.
|
||||
@return True if scrolling was successful.
|
||||
"""
|
||||
return Atspi.Text.scroll_substring_to_point(self.obj, startOffset, endOffset, coord_type, x, y)
|
||||
|
||||
def rangeToList(r):
|
||||
return (r.start_offset, r.end_offset)
|
||||
|
||||
def textRangeToList(r):
|
||||
return (r.content, r.start_offset, r.end_offset)
|
|
@ -0,0 +1,383 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
#copyright: Copyright (c) 2005, 2007 IBM Corporation
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
#Portions of this code originally licensed and copyright (c) 2005, 2007
|
||||
#IBM Corporation under the BSD license, available at
|
||||
#U{http://www.opensource.org/licenses/bsd-license.php}
|
||||
|
||||
#authors: Peter Parente, Mark Doffman
|
||||
|
||||
import pyatspi.Accessibility
|
||||
from pyatspi.deviceevent import allModifiers
|
||||
import pyatspi.state as state
|
||||
import pyatspi.registry as registry
|
||||
|
||||
#from deviceevent import *
|
||||
|
||||
__all__ = [
|
||||
"setCacheLevel",
|
||||
"getCacheLevel",
|
||||
"clearCache",
|
||||
"printCache",
|
||||
"getInterfaceIID",
|
||||
"getInterfaceName",
|
||||
"listInterfaces",
|
||||
"stringToConst",
|
||||
"stateToString",
|
||||
"relationToString",
|
||||
"allModifiers",
|
||||
"findDescendant",
|
||||
"findAllDescendants",
|
||||
"findAncestor",
|
||||
"getPath",
|
||||
"pointToList",
|
||||
"rectToList",
|
||||
"attributeListToHash",
|
||||
"hashToAttributeList",
|
||||
"getBoundingBox"
|
||||
]
|
||||
|
||||
def setCacheLevel(level):
|
||||
pass
|
||||
|
||||
def getCacheLevel():
|
||||
return None
|
||||
|
||||
def clearCache():
|
||||
pass
|
||||
|
||||
def printCache():
|
||||
print("Print cache function is deprecated")
|
||||
|
||||
def getInterfaceIID(obj):
|
||||
"""
|
||||
Gets the ID of an interface class or object in string format for use in
|
||||
queryInterface.
|
||||
|
||||
@param obj: Class representing an AT-SPI interface or instance
|
||||
@type obj: object
|
||||
@return: IID for the interface
|
||||
@rtype: string
|
||||
@raise AttributeError: When the parameter does not provide typecode info
|
||||
|
||||
WARNING!! DEPRECATED!!
|
||||
|
||||
In current D-Bus version of pyatspi this simply returns a null string.
|
||||
"""
|
||||
return ""
|
||||
|
||||
def getInterfaceName(obj):
|
||||
"""
|
||||
Gets the human readable name of an interface class or object in string
|
||||
format.
|
||||
|
||||
@param obj: Class representing an AT-SPI interface or instance
|
||||
@type obj: class
|
||||
@return: Name of the interface
|
||||
@rtype: string
|
||||
@raise AttributeError: When the parameter does not provide typecode info
|
||||
"""
|
||||
return obj._dbus_interface.lstrip("org.a11y.atspi.")
|
||||
|
||||
def listInterfaces(obj):
|
||||
"""
|
||||
Gets a list of the names of all interfaces supported by this object. The
|
||||
names are the short-hand interface names like "Accessible" and "Component",
|
||||
not the full interface identifiers.
|
||||
|
||||
@param obj: Arbitrary object to query for all accessibility related
|
||||
interfaces. Must provide a queryInterface method.
|
||||
@type obj: object
|
||||
@return: Set of supported interface names
|
||||
@rtype: set
|
||||
@raise AttributeError: If the object provide does not implement
|
||||
queryInterface
|
||||
"""
|
||||
return obj.get_interfaces()
|
||||
|
||||
def stringToConst(prefix, suffix):
|
||||
"""
|
||||
Maps a string name to an AT-SPI constant. The rules for the mapping are as
|
||||
follows:
|
||||
- The prefix is captalized and has an _ appended to it.
|
||||
- All spaces in the suffix are mapped to the _ character.
|
||||
- All alpha characters in the suffix are mapped to their uppercase.
|
||||
|
||||
The resulting name is used with getattr to look up a constant with that name
|
||||
in the L{constants} module. If such a constant does not exist, the string
|
||||
suffix is returned instead.
|
||||
|
||||
This method allows strings to be used to refer to roles, relations, etc.
|
||||
without direct access to the constants. It also supports the future expansion
|
||||
of roles, relations, etc. by allowing arbitrary strings which may or may not
|
||||
map to the current standard set of roles, relations, etc., but may still
|
||||
match some non-standard role, relation, etc. being reported by an
|
||||
application.
|
||||
|
||||
@param prefix: Prefix of the constant name such as role, relation, state,
|
||||
text, modifier, key
|
||||
@type prefix: string
|
||||
@param suffix: Name of the role, relation, etc. to use to lookup the constant
|
||||
@type suffix: string
|
||||
@return: The matching constant value
|
||||
@rtype: object
|
||||
"""
|
||||
name = prefix.upper()+'_'+suffix.upper().replace(' ', '_')
|
||||
return getattr(constants, name, suffix)
|
||||
|
||||
def stateToString(value):
|
||||
"""
|
||||
Converts a state value to a string based on the name of the state constant in
|
||||
the L{constants} module that has the given value.
|
||||
|
||||
@param value: An AT-SPI state
|
||||
@type value: Accessibility.StateType
|
||||
@return: Human readable, untranslated name of the state
|
||||
@rtype: string
|
||||
"""
|
||||
return state.STATE_VALUE_TO_NAME.get(value)
|
||||
|
||||
def relationToString(value):
|
||||
"""
|
||||
Converts a relation value to a string based on the name of the state constant
|
||||
in the L{constants} module that has the given value.
|
||||
|
||||
@param value: An AT-SPI relation
|
||||
@type value: Accessibility.RelationType
|
||||
@return: Human readable, untranslated name of the relation
|
||||
@rtype: string
|
||||
"""
|
||||
return pyatspi.Accessibility.RELATION_VALUE_TO_NAME.get(value)
|
||||
|
||||
|
||||
def findDescendant(acc, pred, breadth_first=False):
|
||||
"""
|
||||
Searches for a descendant node satisfying the given predicate starting at
|
||||
this node. The search is performed in depth-first order by default or
|
||||
in breadth first order if breadth_first is True. For example,
|
||||
|
||||
my_win = findDescendant(lambda x: x.name == 'My Window')
|
||||
|
||||
will search all descendants of x until one is located with the name 'My
|
||||
Window' or all nodes are exausted. Calls L{_findDescendantDepth} or
|
||||
L{_findDescendantBreadth} to start the recursive search.
|
||||
|
||||
@param acc: Root accessible of the search
|
||||
@type acc: Accessibility.Accessible
|
||||
@param pred: Search predicate returning True if accessible matches the
|
||||
search criteria or False otherwise
|
||||
@type pred: callable
|
||||
@param breadth_first: Search breadth first (True) or depth first (False)?
|
||||
@type breadth_first: boolean
|
||||
@return: Accessible matching the criteria or None if not found
|
||||
@rtype: Accessibility.Accessible or None
|
||||
"""
|
||||
if breadth_first:
|
||||
return _findDescendantBreadth(acc, pred)
|
||||
|
||||
for child in acc:
|
||||
try:
|
||||
ret = _findDescendantDepth(acc, pred)
|
||||
except Exception:
|
||||
ret = None
|
||||
if ret is not None: return ret
|
||||
|
||||
def _findDescendantBreadth(acc, pred):
|
||||
"""
|
||||
Internal function for locating one descendant. Called by L{findDescendant} to
|
||||
start the search.
|
||||
|
||||
@param acc: Root accessible of the search
|
||||
@type acc: Accessibility.Accessible
|
||||
@param pred: Search predicate returning True if accessible matches the
|
||||
search criteria or False otherwise
|
||||
@type pred: callable
|
||||
@return: Matching node or None to keep searching
|
||||
@rtype: Accessibility.Accessible or None
|
||||
"""
|
||||
for child in acc:
|
||||
try:
|
||||
if pred(child): return child
|
||||
except Exception:
|
||||
pass
|
||||
for child in acc:
|
||||
try:
|
||||
ret = _findDescendantBreadth(child, pred)
|
||||
except Exception:
|
||||
ret = None
|
||||
if ret is not None: return ret
|
||||
|
||||
def _findDescendantDepth(acc, pred):
|
||||
"""
|
||||
Internal function for locating one descendant. Called by L{findDescendant} to
|
||||
start the search.
|
||||
|
||||
@param acc: Root accessible of the search
|
||||
@type acc: Accessibility.Accessible
|
||||
@param pred: Search predicate returning True if accessible matches the
|
||||
search criteria or False otherwise
|
||||
@type pred: callable
|
||||
@return: Matching node or None to keep searching
|
||||
@rtype: Accessibility.Accessible or None
|
||||
"""
|
||||
try:
|
||||
if pred(acc): return acc
|
||||
except Exception:
|
||||
pass
|
||||
for child in acc:
|
||||
try:
|
||||
ret = _findDescendantDepth(child, pred)
|
||||
except Exception:
|
||||
ret = None
|
||||
if ret is not None: return ret
|
||||
|
||||
def findAllDescendants(acc, pred):
|
||||
"""
|
||||
Searches for all descendant nodes satisfying the given predicate starting at
|
||||
this node. Does an in-order traversal. For example,
|
||||
|
||||
pred = lambda x: x.getRole() == pyatspi.ROLE_PUSH_BUTTON
|
||||
buttons = pyatspi.findAllDescendants(node, pred)
|
||||
|
||||
will locate all push button descendants of node.
|
||||
|
||||
@param acc: Root accessible of the search
|
||||
@type acc: Accessibility.Accessible
|
||||
@param pred: Search predicate returning True if accessible matches the
|
||||
search criteria or False otherwise
|
||||
@type pred: callable
|
||||
@return: All nodes matching the search criteria
|
||||
@rtype: list
|
||||
"""
|
||||
matches = []
|
||||
_findAllDescendants(acc, pred, matches)
|
||||
return matches
|
||||
|
||||
def _findAllDescendants(acc, pred, matches):
|
||||
"""
|
||||
Internal method for collecting all descendants. Reuses the same matches
|
||||
list so a new one does not need to be built on each recursive step.
|
||||
"""
|
||||
for child in acc:
|
||||
try:
|
||||
if pred(child): matches.append(child)
|
||||
except Exception:
|
||||
pass
|
||||
_findAllDescendants(child, pred, matches)
|
||||
|
||||
def findAncestor(acc, pred):
|
||||
"""
|
||||
Searches for an ancestor satisfying the given predicate. Note that the
|
||||
AT-SPI hierarchy is not always doubly linked. Node A may consider node B its
|
||||
child, but B is not guaranteed to have node A as its parent (i.e. its parent
|
||||
may be set to None). This means some searches may never make it all the way
|
||||
up the hierarchy to the desktop level.
|
||||
|
||||
@param acc: Starting accessible object
|
||||
@type acc: Accessibility.Accessible
|
||||
@param pred: Search predicate returning True if accessible matches the
|
||||
search criteria or False otherwise
|
||||
@type pred: callable
|
||||
@return: Node matching the criteria or None if not found
|
||||
@rtype: Accessibility.Accessible
|
||||
"""
|
||||
if acc is None:
|
||||
# guard against bad start condition
|
||||
return None
|
||||
while 1:
|
||||
if acc.parent is None:
|
||||
# stop if there is no parent and we haven't returned yet
|
||||
return None
|
||||
try:
|
||||
if pred(acc.parent): return acc.parent
|
||||
except Exception:
|
||||
pass
|
||||
# move to the parent
|
||||
acc = acc.parent
|
||||
|
||||
def getPath(acc):
|
||||
"""
|
||||
Gets the path from the application ancestor to the given accessible in
|
||||
terms of its child index at each level.
|
||||
|
||||
@param acc: Target accessible
|
||||
@type acc: Accessibility.Accessible
|
||||
@return: Path to the target
|
||||
@rtype: list of integer
|
||||
@raise LookupError: When the application accessible cannot be reached
|
||||
"""
|
||||
path = []
|
||||
while 1:
|
||||
if acc.parent is None:
|
||||
path.reverse()
|
||||
return path
|
||||
try:
|
||||
path.append(acc.getIndexInParent())
|
||||
except Exception:
|
||||
raise LookupError
|
||||
acc = acc.parent
|
||||
|
||||
def pointToList(point):
|
||||
return (point.x, point.y)
|
||||
|
||||
def rectToList(rect):
|
||||
return (rect.x, rect.y, rect.width, rect.height)
|
||||
|
||||
def attributeListToHash(list):
|
||||
ret = dict()
|
||||
for item in list:
|
||||
[key, val] = item.split(":")
|
||||
val = val.replace(":", r"\:")
|
||||
if ret.__contains__(key):
|
||||
ret[key] = ret[key] + ":" + val
|
||||
else:
|
||||
ret[key] = val
|
||||
return ret
|
||||
|
||||
def hashToAttributeList(h):
|
||||
return [x + ":" + h[x] for x in h.keys()]
|
||||
|
||||
class BoundingBox(list):
|
||||
def __new__(cls, x, y, width, height):
|
||||
return list.__new__(cls, (x, y, width, height))
|
||||
def __init__(self, x, y, width, height):
|
||||
list.__init__(self, (x, y, width, height))
|
||||
|
||||
def __str__(self):
|
||||
return ("(%d, %d, %d, %d)" % (self.x, self.y, self.width, self.height))
|
||||
|
||||
def _get_x(self):
|
||||
return self[0]
|
||||
def _set_x(self, val):
|
||||
self[0] = val
|
||||
x = property(fget=_get_x, fset=_set_x)
|
||||
def _get_y(self):
|
||||
return self[1]
|
||||
def _set_y(self, val):
|
||||
self[1] = val
|
||||
y = property(fget=_get_y, fset=_set_y)
|
||||
def _get_width(self):
|
||||
return self[2]
|
||||
def _set_width(self, val):
|
||||
self[2] = val
|
||||
width = property(fget=_get_width, fset=_set_width)
|
||||
def _get_height(self):
|
||||
return self[3]
|
||||
def _set_height(self, val):
|
||||
self[3] = val
|
||||
height = property(fget=_get_height, fset=_set_height)
|
||||
|
||||
def getBoundingBox(rect):
|
||||
return BoundingBox (rect.x, rect.y, rect.width, rect.height)
|
|
@ -0,0 +1,70 @@
|
|||
#Copyright (C) 2008 Codethink Ltd
|
||||
#Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
|
||||
#This library is free software; you can redistribute it and/or
|
||||
#modify it under the terms of the GNU Lesser General Public
|
||||
#License version 2 as published by the Free Software Foundation.
|
||||
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied 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 Lesser General Public License
|
||||
#along with this program; if not, write to the Free Software
|
||||
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from gi.repository import Atspi
|
||||
from pyatspi.utils import *
|
||||
from pyatspi.interface import *
|
||||
|
||||
__all__ = [
|
||||
"Value",
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class Value(interface):
|
||||
"""
|
||||
An interface supporting controls which allow a one-dimensional,
|
||||
scalar quantity to be modified or which reflect a scalar quantity.
|
||||
(If STATE_EDITABLE is not present, the valuator is treated as
|
||||
"read only".
|
||||
"""
|
||||
|
||||
def get_currentValue(self):
|
||||
return Atspi.Value.get_current_value(self.obj)
|
||||
def set_currentValue(self, value):
|
||||
Atspi.Value.set_current_value(self.obj, value)
|
||||
_currentValueDoc = \
|
||||
"""
|
||||
The current value of the valuator.
|
||||
"""
|
||||
currentValue = property(fget=get_currentValue, fset=set_currentValue, doc=_currentValueDoc)
|
||||
|
||||
def get_maximumValue(self):
|
||||
return Atspi.Value.get_maximum_value(self.obj)
|
||||
_maximumValueDoc = \
|
||||
"""
|
||||
The maximum value allowed by this valuator.
|
||||
"""
|
||||
maximumValue = property(fget=get_maximumValue, doc=_maximumValueDoc)
|
||||
|
||||
def get_minimumIncrement(self):
|
||||
return Atspi.Value.get_minimum_increment(self.obj)
|
||||
_minimumIncrementDoc = \
|
||||
"""
|
||||
The smallest incremental change which this valuator allows. If
|
||||
0, the incremental changes to the valuator are limited only by
|
||||
the precision of a double precision value on the platform.
|
||||
"""
|
||||
minimumIncrement = property(fget=get_minimumIncrement, doc=_minimumIncrementDoc)
|
||||
|
||||
def get_minimumValue(self):
|
||||
return Atspi.Value.get_minimum_value(self.obj)
|
||||
_minimumValueDoc = \
|
||||
"""
|
||||
The minimum value allowed by this valuator.
|
||||
"""
|
||||
minimumValue = property(fget=get_minimumValue, doc=_minimumValueDoc)
|
||||
|
||||
#END----------------------------------------------------------------------------
|
|
@ -0,0 +1,32 @@
|
|||
<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
|
||||
xmlns:foaf="http://xmlns.com/foaf/0.1/"
|
||||
xmlns:gnome="http://api.gnome.org/doap-extensions#"
|
||||
xmlns="http://usefulinc.com/ns/doap#">
|
||||
|
||||
<name xml:lang="en">pyatspi2</name>
|
||||
<shortdesc xml:lang="en">Python client bindings for D-Bus AT-SPI.</shortdesc>
|
||||
<description xml:lang="en">The Access Technology Service Provider Interface
|
||||
(AT-SPI) is a set of interfaces that allow access technologies such as screen
|
||||
readers to programmatically determine what is being displayed on the screen and
|
||||
simulate keyboard and mouse events. It can also be used for automated testing.
|
||||
|
||||
The pyatspi2 module contains python bindings for the AT-SPI library found in
|
||||
the at-spi2-core module. Note that it is also possible to use libatspi more
|
||||
directly from python via gobject-introspection; this module mainly exists for
|
||||
historical reasons.</description>
|
||||
<homepage rdf:resource="http://www.linuxfoundation.org/en/Accessibility/ATK/AT-SPI/AT-SPI_on_D-Bus"/>
|
||||
<license rdf:resource="http://usefulinc.com/doap/licenses/lgpl" />
|
||||
<bug-database rdf:resource="https://gitlab.gnome.org/GNOME/pyatspi2/issues/" />
|
||||
<download-page rdf:resource="http://download.gnome.org/sources/pyatspi/" />
|
||||
<mailing-list rdf:resource="https://lists.linux-foundation.org/mailman/listinfo/accessibility-atspi"/>
|
||||
<download-page rdf:resource="http://download.gnome.org/sources/pyatspi/" />
|
||||
|
||||
<maintainer>
|
||||
<foaf:Person>
|
||||
<foaf:name>Mike Gorse</foaf:name>
|
||||
<foaf:mbox rdf:resource="mailto:mgorse@suse.com" />
|
||||
<gnome:userid>mgorse</gnome:userid>
|
||||
</foaf:Person>
|
||||
</maintainer>
|
||||
</Project>
|
|
@ -0,0 +1,11 @@
|
|||
SUBDIRS = dummyatk apps data pyatspi
|
||||
|
||||
#TESTS=testrunner.py
|
||||
TESTS_ENVIRONMENT = PYTHONPATH=$(abs_top_srcdir)/python \
|
||||
ATSPI_INTROSPECTION_PATH=$(top_srcdir)/xml/introspection \
|
||||
TEST_DATA_DIRECTORY=$(abs_top_srcdir)/tests/data \
|
||||
TEST_ATSPI_LIBRARY=$(abs_top_srcdir)/atk-adaptor/.libs/libspiatk.so \
|
||||
TEST_MODULES_DIRECTORY=$(abs_top_srcdir)/tests/apps/.libs \
|
||||
TEST_APPLICATION=$(abs_top_srcdir)/tests/apps/test-application
|
||||
|
||||
CLEANFILES = *.pyc
|
|
@ -0,0 +1,668 @@
|
|||
# Makefile.in generated by automake 1.16.1 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
am__is_gnu_make = { \
|
||||
if test -z '$(MAKELEVEL)'; then \
|
||||
false; \
|
||||
elif test -n '$(MAKE_HOST)'; then \
|
||||
true; \
|
||||
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
||||
true; \
|
||||
else \
|
||||
false; \
|
||||
fi; \
|
||||
}
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
subdir = tests
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
||||
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_@AM_V@)
|
||||
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
|
||||
ctags-recursive dvi-recursive html-recursive info-recursive \
|
||||
install-data-recursive install-dvi-recursive \
|
||||
install-exec-recursive install-html-recursive \
|
||||
install-info-recursive install-pdf-recursive \
|
||||
install-ps-recursive install-recursive installcheck-recursive \
|
||||
installdirs-recursive pdf-recursive ps-recursive \
|
||||
tags-recursive uninstall-recursive
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
||||
distclean-recursive maintainer-clean-recursive
|
||||
am__recursive_targets = \
|
||||
$(RECURSIVE_TARGETS) \
|
||||
$(RECURSIVE_CLEAN_TARGETS) \
|
||||
$(am__extra_recursive_targets)
|
||||
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
|
||||
distdir distdir-am
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||
# Read a list of newline-separated strings from the standard input,
|
||||
# and print each of them once, without duplicates. Input order is
|
||||
# *not* preserved.
|
||||
am__uniquify_input = $(AWK) '\
|
||||
BEGIN { nonempty = 0; } \
|
||||
{ items[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in items) print i; }; } \
|
||||
'
|
||||
# Make sure the list of sources is unique. This is necessary because,
|
||||
# e.g., the same source file might be shared among _SOURCES variables
|
||||
# for different programs/libraries.
|
||||
am__define_uniq_tagged_files = \
|
||||
list='$(am__tagged_files)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | $(am__uniquify_input)`
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
am__relativize = \
|
||||
dir0=`pwd`; \
|
||||
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
|
||||
sed_rest='s,^[^/]*/*,,'; \
|
||||
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
|
||||
sed_butlast='s,/*[^/]*$$,,'; \
|
||||
while test -n "$$dir1"; do \
|
||||
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
|
||||
if test "$$first" != "."; then \
|
||||
if test "$$first" = ".."; then \
|
||||
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
|
||||
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
|
||||
else \
|
||||
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
|
||||
if test "$$first2" = "$$first"; then \
|
||||
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
|
||||
else \
|
||||
dir2="../$$dir2"; \
|
||||
fi; \
|
||||
dir0="$$dir0"/"$$first"; \
|
||||
fi; \
|
||||
fi; \
|
||||
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
|
||||
done; \
|
||||
reldir="$$dir2"
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
AR = @AR@
|
||||
ATK_CFLAGS = @ATK_CFLAGS@
|
||||
ATK_LIBS = @ATK_LIBS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DBUS_CFLAGS = @DBUS_CFLAGS@
|
||||
DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
|
||||
DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
|
||||
DBUS_LIBS = @DBUS_LIBS@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||
GLIB_LIBS = @GLIB_LIBS@
|
||||
GMODULE_CFLAGS = @GMODULE_CFLAGS@
|
||||
GMODULE_LIBS = @GMODULE_LIBS@
|
||||
GOBJ_CFLAGS = @GOBJ_CFLAGS@
|
||||
GOBJ_LIBS = @GOBJ_LIBS@
|
||||
GREP = @GREP@
|
||||
GTK_CFLAGS = @GTK_CFLAGS@
|
||||
GTK_LIBS = @GTK_LIBS@
|
||||
GTK_MODULE_DIR = @GTK_MODULE_DIR@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIB_XML_CFLAGS = @LIB_XML_CFLAGS@
|
||||
LIB_XML_LIBS = @LIB_XML_LIBS@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
LT_AGE = @LT_AGE@
|
||||
LT_CURRENT = @LT_CURRENT@
|
||||
LT_RELEASE = @LT_RELEASE@
|
||||
LT_REVISION = @LT_REVISION@
|
||||
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
|
||||
LT_VERSION_INFO = @LT_VERSION_INFO@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PKG_CONFIG = @PKG_CONFIG@
|
||||
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
|
||||
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
|
||||
PYGOBJ_CFLAGS = @PYGOBJ_CFLAGS@
|
||||
PYGOBJ_LIBS = @PYGOBJ_LIBS@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
|
||||
PYTHON_PLATFORM = @PYTHON_PLATFORM@
|
||||
PYTHON_PREFIX = @PYTHON_PREFIX@
|
||||
PYTHON_VERSION = @PYTHON_VERSION@
|
||||
RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
XMKMF = @XMKMF@
|
||||
X_CFLAGS = @X_CFLAGS@
|
||||
X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||
X_LIBS = @X_LIBS@
|
||||
X_PRE_LIBS = @X_PRE_LIBS@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
pkgpyexecdir = @pkgpyexecdir@
|
||||
pkgpythondir = @pkgpythondir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
pyexecdir = @pyexecdir@
|
||||
pythondir = @pythondir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
SUBDIRS = dummyatk apps data pyatspi
|
||||
|
||||
#TESTS=testrunner.py
|
||||
TESTS_ENVIRONMENT = PYTHONPATH=$(abs_top_srcdir)/python \
|
||||
ATSPI_INTROSPECTION_PATH=$(top_srcdir)/xml/introspection \
|
||||
TEST_DATA_DIRECTORY=$(abs_top_srcdir)/tests/data \
|
||||
TEST_ATSPI_LIBRARY=$(abs_top_srcdir)/atk-adaptor/.libs/libspiatk.so \
|
||||
TEST_MODULES_DIRECTORY=$(abs_top_srcdir)/tests/apps/.libs \
|
||||
TEST_APPLICATION=$(abs_top_srcdir)/tests/apps/test-application
|
||||
|
||||
CLEANFILES = *.pyc
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
$(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 ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign tests/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__maybe_remake_depfiles)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
|
||||
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
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run 'make' without going through this Makefile.
|
||||
# To change the values of 'make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in 'config.status', edit 'config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run 'make');
|
||||
# (2) otherwise, pass the desired values on the 'make' command line.
|
||||
$(am__recursive_targets):
|
||||
@fail=; \
|
||||
if $(am__make_keepgoing); then \
|
||||
failcom='fail=yes'; \
|
||||
else \
|
||||
failcom='exit 1'; \
|
||||
fi; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
ID: $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||
tags: tags-recursive
|
||||
TAGS: tags
|
||||
|
||||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
$(am__define_uniq_tagged_files); \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: ctags-recursive
|
||||
|
||||
CTAGS: ctags
|
||||
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
cscopelist: cscopelist-recursive
|
||||
|
||||
cscopelist-am: $(am__tagged_files)
|
||||
list='$(am__tagged_files)'; \
|
||||
case "$(srcdir)" in \
|
||||
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
|
||||
*) sdir=$(subdir)/$(srcdir) ;; \
|
||||
esac; \
|
||||
for i in $$list; do \
|
||||
if test -f "$$i"; then \
|
||||
echo "$(subdir)/$$i"; \
|
||||
else \
|
||||
echo "$$sdir/$$i"; \
|
||||
fi; \
|
||||
done >> $(top_builddir)/cscope.files
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||
|
||||
distdir-am: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
$(am__make_dryrun) \
|
||||
|| test -d "$(distdir)/$$subdir" \
|
||||
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
|
||||
$(am__relativize); \
|
||||
new_distdir=$$reldir; \
|
||||
dir1=$$subdir; dir2="$(top_distdir)"; \
|
||||
$(am__relativize); \
|
||||
new_top_distdir=$$reldir; \
|
||||
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
|
||||
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
|
||||
($(am__cd) $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$new_top_distdir" \
|
||||
distdir="$$new_distdir" \
|
||||
am__remove_distdir=: \
|
||||
am__skip_length_check=: \
|
||||
am__skip_mode_fix=: \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-recursive
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-recursive
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-recursive
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-recursive
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am:
|
||||
|
||||
.MAKE: $(am__recursive_targets) install-am install-strip
|
||||
|
||||
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
|
||||
check-am clean clean-generic clean-libtool cscopelist-am ctags \
|
||||
ctags-am distclean distclean-generic distclean-libtool \
|
||||
distclean-tags distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-pdf install-pdf-am install-ps install-ps-am \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
installdirs-am maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
|
||||
ps ps-am tags tags-am uninstall uninstall-am
|
||||
|
||||
.PRECIOUS: Makefile
|
||||
|
||||
|
||||
# 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,47 @@
|
|||
check_PROGRAMS = test-application
|
||||
check_LTLIBRARIES = libnoopapp.la \
|
||||
libaccessibleapp.la \
|
||||
libcomponentapp.la \
|
||||
libactionapp.la \
|
||||
librelationapp.la
|
||||
|
||||
test_application_CFLAGS = $(DBUS_GLIB_CFLAGS) \
|
||||
$(ATK_CFLAGS) \
|
||||
$(GMODULE_CFLAGS) \
|
||||
-I$(top_srcdir)
|
||||
|
||||
test_application_LDADD = $(DBUS_GLIB_LIBS) \
|
||||
$(GMODULE_LIBS) \
|
||||
$(ATK_LIBS)
|
||||
|
||||
test_application_SOURCES = test-application.c
|
||||
|
||||
|
||||
TEST_APP_CFLAGS = $(ATK_CFLAGS) $(GMODULE_CFLAGS) -I$(top_srcdir) -I$(top_srcdir)/tests/dummyatk/
|
||||
TEST_APP_LDFLAGS = -no-undefined -module -avoid-version -rpath /a/fake/path
|
||||
TEST_APP_LIBADD = $(ATK_LIBS) $(GMODULE_LIBS) $(top_builddir)/tests/dummyatk/libdummyatk.la
|
||||
|
||||
libnoopapp_la_CFLAGS = $(TEST_APP_CFLAGS)
|
||||
libnoopapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
|
||||
libnoopapp_la_LIBADD = $(TEST_APP_LIBADD)
|
||||
libnoopapp_la_SOURCES = noop-app.c
|
||||
|
||||
libaccessibleapp_la_CFLAGS = $(TEST_APP_CFLAGS) $(LIB_XML_CFLAGS)
|
||||
libaccessibleapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
|
||||
libaccessibleapp_la_LIBADD = $(TEST_APP_LIBADD) $(LIB_XML_LIBS)
|
||||
libaccessibleapp_la_SOURCES = accessible-app.c atk-object-xml-loader.c atk-object-xml-loader.h
|
||||
|
||||
libcomponentapp_la_CFLAGS = $(TEST_APP_CFLAGS)
|
||||
libcomponentapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
|
||||
libcomponentapp_la_LIBADD = $(TEST_APP_LIBADD)
|
||||
libcomponentapp_la_SOURCES = component-app.c
|
||||
|
||||
libactionapp_la_CFLAGS = $(TEST_APP_CFLAGS)
|
||||
libactionapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
|
||||
libactionapp_la_LIBADD = $(TEST_APP_LIBADD)
|
||||
libactionapp_la_SOURCES = action-app.c
|
||||
|
||||
librelationapp_la_CFLAGS = $(TEST_APP_CFLAGS)
|
||||
librelationapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
|
||||
librelationapp_la_LIBADD = $(TEST_APP_LIBADD)
|
||||
librelationapp_la_SOURCES = relation-app.c
|
|
@ -0,0 +1,825 @@
|
|||
# Makefile.in generated by automake 1.16.1 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
am__is_gnu_make = { \
|
||||
if test -z '$(MAKELEVEL)'; then \
|
||||
false; \
|
||||
elif test -n '$(MAKE_HOST)'; then \
|
||||
true; \
|
||||
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
||||
true; \
|
||||
else \
|
||||
false; \
|
||||
fi; \
|
||||
}
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
check_PROGRAMS = test-application$(EXEEXT)
|
||||
subdir = tests/apps
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__DEPENDENCIES_1 =
|
||||
am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
|
||||
$(top_builddir)/tests/dummyatk/libdummyatk.la
|
||||
libaccessibleapp_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \
|
||||
$(am__DEPENDENCIES_1)
|
||||
am_libaccessibleapp_la_OBJECTS = \
|
||||
libaccessibleapp_la-accessible-app.lo \
|
||||
libaccessibleapp_la-atk-object-xml-loader.lo
|
||||
libaccessibleapp_la_OBJECTS = $(am_libaccessibleapp_la_OBJECTS)
|
||||
AM_V_lt = $(am__v_lt_@AM_V@)
|
||||
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
||||
am__v_lt_0 = --silent
|
||||
am__v_lt_1 =
|
||||
libaccessibleapp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
|
||||
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
|
||||
$(libaccessibleapp_la_CFLAGS) $(CFLAGS) \
|
||||
$(libaccessibleapp_la_LDFLAGS) $(LDFLAGS) -o $@
|
||||
libactionapp_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
|
||||
am_libactionapp_la_OBJECTS = libactionapp_la-action-app.lo
|
||||
libactionapp_la_OBJECTS = $(am_libactionapp_la_OBJECTS)
|
||||
libactionapp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
|
||||
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
|
||||
$(libactionapp_la_CFLAGS) $(CFLAGS) $(libactionapp_la_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
libcomponentapp_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
|
||||
am_libcomponentapp_la_OBJECTS = libcomponentapp_la-component-app.lo
|
||||
libcomponentapp_la_OBJECTS = $(am_libcomponentapp_la_OBJECTS)
|
||||
libcomponentapp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
|
||||
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
|
||||
$(libcomponentapp_la_CFLAGS) $(CFLAGS) \
|
||||
$(libcomponentapp_la_LDFLAGS) $(LDFLAGS) -o $@
|
||||
libnoopapp_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
|
||||
am_libnoopapp_la_OBJECTS = libnoopapp_la-noop-app.lo
|
||||
libnoopapp_la_OBJECTS = $(am_libnoopapp_la_OBJECTS)
|
||||
libnoopapp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libnoopapp_la_CFLAGS) \
|
||||
$(CFLAGS) $(libnoopapp_la_LDFLAGS) $(LDFLAGS) -o $@
|
||||
librelationapp_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
|
||||
am_librelationapp_la_OBJECTS = librelationapp_la-relation-app.lo
|
||||
librelationapp_la_OBJECTS = $(am_librelationapp_la_OBJECTS)
|
||||
librelationapp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
|
||||
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
|
||||
$(librelationapp_la_CFLAGS) $(CFLAGS) \
|
||||
$(librelationapp_la_LDFLAGS) $(LDFLAGS) -o $@
|
||||
am_test_application_OBJECTS = \
|
||||
test_application-test-application.$(OBJEXT)
|
||||
test_application_OBJECTS = $(am_test_application_OBJECTS)
|
||||
test_application_DEPENDENCIES = $(am__DEPENDENCIES_1) \
|
||||
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
|
||||
test_application_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
|
||||
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
|
||||
$(test_application_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
|
||||
-o $@
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
||||
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_@AM_V@)
|
||||
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
|
||||
am__maybe_remake_depfiles = depfiles
|
||||
am__depfiles_remade = \
|
||||
./$(DEPDIR)/libaccessibleapp_la-accessible-app.Plo \
|
||||
./$(DEPDIR)/libaccessibleapp_la-atk-object-xml-loader.Plo \
|
||||
./$(DEPDIR)/libactionapp_la-action-app.Plo \
|
||||
./$(DEPDIR)/libcomponentapp_la-component-app.Plo \
|
||||
./$(DEPDIR)/libnoopapp_la-noop-app.Plo \
|
||||
./$(DEPDIR)/librelationapp_la-relation-app.Plo \
|
||||
./$(DEPDIR)/test_application-test-application.Po
|
||||
am__mv = mv -f
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
|
||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||
$(AM_CFLAGS) $(CFLAGS)
|
||||
AM_V_CC = $(am__v_CC_@AM_V@)
|
||||
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
|
||||
am__v_CC_0 = @echo " CC " $@;
|
||||
am__v_CC_1 =
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
|
||||
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
|
||||
am__v_CCLD_0 = @echo " CCLD " $@;
|
||||
am__v_CCLD_1 =
|
||||
SOURCES = $(libaccessibleapp_la_SOURCES) $(libactionapp_la_SOURCES) \
|
||||
$(libcomponentapp_la_SOURCES) $(libnoopapp_la_SOURCES) \
|
||||
$(librelationapp_la_SOURCES) $(test_application_SOURCES)
|
||||
DIST_SOURCES = $(libaccessibleapp_la_SOURCES) \
|
||||
$(libactionapp_la_SOURCES) $(libcomponentapp_la_SOURCES) \
|
||||
$(libnoopapp_la_SOURCES) $(librelationapp_la_SOURCES) \
|
||||
$(test_application_SOURCES)
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||
# Read a list of newline-separated strings from the standard input,
|
||||
# and print each of them once, without duplicates. Input order is
|
||||
# *not* preserved.
|
||||
am__uniquify_input = $(AWK) '\
|
||||
BEGIN { nonempty = 0; } \
|
||||
{ items[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in items) print i; }; } \
|
||||
'
|
||||
# Make sure the list of sources is unique. This is necessary because,
|
||||
# e.g., the same source file might be shared among _SOURCES variables
|
||||
# for different programs/libraries.
|
||||
am__define_uniq_tagged_files = \
|
||||
list='$(am__tagged_files)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | $(am__uniquify_input)`
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
AR = @AR@
|
||||
ATK_CFLAGS = @ATK_CFLAGS@
|
||||
ATK_LIBS = @ATK_LIBS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DBUS_CFLAGS = @DBUS_CFLAGS@
|
||||
DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
|
||||
DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
|
||||
DBUS_LIBS = @DBUS_LIBS@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||
GLIB_LIBS = @GLIB_LIBS@
|
||||
GMODULE_CFLAGS = @GMODULE_CFLAGS@
|
||||
GMODULE_LIBS = @GMODULE_LIBS@
|
||||
GOBJ_CFLAGS = @GOBJ_CFLAGS@
|
||||
GOBJ_LIBS = @GOBJ_LIBS@
|
||||
GREP = @GREP@
|
||||
GTK_CFLAGS = @GTK_CFLAGS@
|
||||
GTK_LIBS = @GTK_LIBS@
|
||||
GTK_MODULE_DIR = @GTK_MODULE_DIR@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIB_XML_CFLAGS = @LIB_XML_CFLAGS@
|
||||
LIB_XML_LIBS = @LIB_XML_LIBS@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
LT_AGE = @LT_AGE@
|
||||
LT_CURRENT = @LT_CURRENT@
|
||||
LT_RELEASE = @LT_RELEASE@
|
||||
LT_REVISION = @LT_REVISION@
|
||||
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
|
||||
LT_VERSION_INFO = @LT_VERSION_INFO@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PKG_CONFIG = @PKG_CONFIG@
|
||||
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
|
||||
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
|
||||
PYGOBJ_CFLAGS = @PYGOBJ_CFLAGS@
|
||||
PYGOBJ_LIBS = @PYGOBJ_LIBS@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
|
||||
PYTHON_PLATFORM = @PYTHON_PLATFORM@
|
||||
PYTHON_PREFIX = @PYTHON_PREFIX@
|
||||
PYTHON_VERSION = @PYTHON_VERSION@
|
||||
RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
XMKMF = @XMKMF@
|
||||
X_CFLAGS = @X_CFLAGS@
|
||||
X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||
X_LIBS = @X_LIBS@
|
||||
X_PRE_LIBS = @X_PRE_LIBS@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
pkgpyexecdir = @pkgpyexecdir@
|
||||
pkgpythondir = @pkgpythondir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
pyexecdir = @pyexecdir@
|
||||
pythondir = @pythondir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
check_LTLIBRARIES = libnoopapp.la \
|
||||
libaccessibleapp.la \
|
||||
libcomponentapp.la \
|
||||
libactionapp.la \
|
||||
librelationapp.la
|
||||
|
||||
test_application_CFLAGS = $(DBUS_GLIB_CFLAGS) \
|
||||
$(ATK_CFLAGS) \
|
||||
$(GMODULE_CFLAGS) \
|
||||
-I$(top_srcdir)
|
||||
|
||||
test_application_LDADD = $(DBUS_GLIB_LIBS) \
|
||||
$(GMODULE_LIBS) \
|
||||
$(ATK_LIBS)
|
||||
|
||||
test_application_SOURCES = test-application.c
|
||||
TEST_APP_CFLAGS = $(ATK_CFLAGS) $(GMODULE_CFLAGS) -I$(top_srcdir) -I$(top_srcdir)/tests/dummyatk/
|
||||
TEST_APP_LDFLAGS = -no-undefined -module -avoid-version -rpath /a/fake/path
|
||||
TEST_APP_LIBADD = $(ATK_LIBS) $(GMODULE_LIBS) $(top_builddir)/tests/dummyatk/libdummyatk.la
|
||||
libnoopapp_la_CFLAGS = $(TEST_APP_CFLAGS)
|
||||
libnoopapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
|
||||
libnoopapp_la_LIBADD = $(TEST_APP_LIBADD)
|
||||
libnoopapp_la_SOURCES = noop-app.c
|
||||
libaccessibleapp_la_CFLAGS = $(TEST_APP_CFLAGS) $(LIB_XML_CFLAGS)
|
||||
libaccessibleapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
|
||||
libaccessibleapp_la_LIBADD = $(TEST_APP_LIBADD) $(LIB_XML_LIBS)
|
||||
libaccessibleapp_la_SOURCES = accessible-app.c atk-object-xml-loader.c atk-object-xml-loader.h
|
||||
libcomponentapp_la_CFLAGS = $(TEST_APP_CFLAGS)
|
||||
libcomponentapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
|
||||
libcomponentapp_la_LIBADD = $(TEST_APP_LIBADD)
|
||||
libcomponentapp_la_SOURCES = component-app.c
|
||||
libactionapp_la_CFLAGS = $(TEST_APP_CFLAGS)
|
||||
libactionapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
|
||||
libactionapp_la_LIBADD = $(TEST_APP_LIBADD)
|
||||
libactionapp_la_SOURCES = action-app.c
|
||||
librelationapp_la_CFLAGS = $(TEST_APP_CFLAGS)
|
||||
librelationapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
|
||||
librelationapp_la_LIBADD = $(TEST_APP_LIBADD)
|
||||
librelationapp_la_SOURCES = relation-app.c
|
||||
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 ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/apps/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign tests/apps/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__maybe_remake_depfiles)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
|
||||
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
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
clean-checkPROGRAMS:
|
||||
@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list || exit $$?; \
|
||||
test -n "$(EXEEXT)" || exit 0; \
|
||||
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list
|
||||
|
||||
clean-checkLTLIBRARIES:
|
||||
-test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES)
|
||||
@list='$(check_LTLIBRARIES)'; \
|
||||
locs=`for p in $$list; do echo $$p; done | \
|
||||
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
|
||||
sort -u`; \
|
||||
test -z "$$locs" || { \
|
||||
echo rm -f $${locs}; \
|
||||
rm -f $${locs}; \
|
||||
}
|
||||
|
||||
libaccessibleapp.la: $(libaccessibleapp_la_OBJECTS) $(libaccessibleapp_la_DEPENDENCIES) $(EXTRA_libaccessibleapp_la_DEPENDENCIES)
|
||||
$(AM_V_CCLD)$(libaccessibleapp_la_LINK) $(libaccessibleapp_la_OBJECTS) $(libaccessibleapp_la_LIBADD) $(LIBS)
|
||||
|
||||
libactionapp.la: $(libactionapp_la_OBJECTS) $(libactionapp_la_DEPENDENCIES) $(EXTRA_libactionapp_la_DEPENDENCIES)
|
||||
$(AM_V_CCLD)$(libactionapp_la_LINK) $(libactionapp_la_OBJECTS) $(libactionapp_la_LIBADD) $(LIBS)
|
||||
|
||||
libcomponentapp.la: $(libcomponentapp_la_OBJECTS) $(libcomponentapp_la_DEPENDENCIES) $(EXTRA_libcomponentapp_la_DEPENDENCIES)
|
||||
$(AM_V_CCLD)$(libcomponentapp_la_LINK) $(libcomponentapp_la_OBJECTS) $(libcomponentapp_la_LIBADD) $(LIBS)
|
||||
|
||||
libnoopapp.la: $(libnoopapp_la_OBJECTS) $(libnoopapp_la_DEPENDENCIES) $(EXTRA_libnoopapp_la_DEPENDENCIES)
|
||||
$(AM_V_CCLD)$(libnoopapp_la_LINK) $(libnoopapp_la_OBJECTS) $(libnoopapp_la_LIBADD) $(LIBS)
|
||||
|
||||
librelationapp.la: $(librelationapp_la_OBJECTS) $(librelationapp_la_DEPENDENCIES) $(EXTRA_librelationapp_la_DEPENDENCIES)
|
||||
$(AM_V_CCLD)$(librelationapp_la_LINK) $(librelationapp_la_OBJECTS) $(librelationapp_la_LIBADD) $(LIBS)
|
||||
|
||||
test-application$(EXEEXT): $(test_application_OBJECTS) $(test_application_DEPENDENCIES) $(EXTRA_test_application_DEPENDENCIES)
|
||||
@rm -f test-application$(EXEEXT)
|
||||
$(AM_V_CCLD)$(test_application_LINK) $(test_application_OBJECTS) $(test_application_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libaccessibleapp_la-accessible-app.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libaccessibleapp_la-atk-object-xml-loader.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libactionapp_la-action-app.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomponentapp_la-component-app.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnoopapp_la-noop-app.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librelationapp_la-relation-app.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_application-test-application.Po@am__quote@ # am--include-marker
|
||||
|
||||
$(am__depfiles_remade):
|
||||
@$(MKDIR_P) $(@D)
|
||||
@echo '# dummy' >$@-t && $(am__mv) $@-t $@
|
||||
|
||||
am--depfiles: $(am__depfiles_remade)
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
libaccessibleapp_la-accessible-app.lo: accessible-app.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libaccessibleapp_la_CFLAGS) $(CFLAGS) -MT libaccessibleapp_la-accessible-app.lo -MD -MP -MF $(DEPDIR)/libaccessibleapp_la-accessible-app.Tpo -c -o libaccessibleapp_la-accessible-app.lo `test -f 'accessible-app.c' || echo '$(srcdir)/'`accessible-app.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libaccessibleapp_la-accessible-app.Tpo $(DEPDIR)/libaccessibleapp_la-accessible-app.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='accessible-app.c' object='libaccessibleapp_la-accessible-app.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libaccessibleapp_la_CFLAGS) $(CFLAGS) -c -o libaccessibleapp_la-accessible-app.lo `test -f 'accessible-app.c' || echo '$(srcdir)/'`accessible-app.c
|
||||
|
||||
libaccessibleapp_la-atk-object-xml-loader.lo: atk-object-xml-loader.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libaccessibleapp_la_CFLAGS) $(CFLAGS) -MT libaccessibleapp_la-atk-object-xml-loader.lo -MD -MP -MF $(DEPDIR)/libaccessibleapp_la-atk-object-xml-loader.Tpo -c -o libaccessibleapp_la-atk-object-xml-loader.lo `test -f 'atk-object-xml-loader.c' || echo '$(srcdir)/'`atk-object-xml-loader.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libaccessibleapp_la-atk-object-xml-loader.Tpo $(DEPDIR)/libaccessibleapp_la-atk-object-xml-loader.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atk-object-xml-loader.c' object='libaccessibleapp_la-atk-object-xml-loader.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libaccessibleapp_la_CFLAGS) $(CFLAGS) -c -o libaccessibleapp_la-atk-object-xml-loader.lo `test -f 'atk-object-xml-loader.c' || echo '$(srcdir)/'`atk-object-xml-loader.c
|
||||
|
||||
libactionapp_la-action-app.lo: action-app.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libactionapp_la_CFLAGS) $(CFLAGS) -MT libactionapp_la-action-app.lo -MD -MP -MF $(DEPDIR)/libactionapp_la-action-app.Tpo -c -o libactionapp_la-action-app.lo `test -f 'action-app.c' || echo '$(srcdir)/'`action-app.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libactionapp_la-action-app.Tpo $(DEPDIR)/libactionapp_la-action-app.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='action-app.c' object='libactionapp_la-action-app.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libactionapp_la_CFLAGS) $(CFLAGS) -c -o libactionapp_la-action-app.lo `test -f 'action-app.c' || echo '$(srcdir)/'`action-app.c
|
||||
|
||||
libcomponentapp_la-component-app.lo: component-app.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomponentapp_la_CFLAGS) $(CFLAGS) -MT libcomponentapp_la-component-app.lo -MD -MP -MF $(DEPDIR)/libcomponentapp_la-component-app.Tpo -c -o libcomponentapp_la-component-app.lo `test -f 'component-app.c' || echo '$(srcdir)/'`component-app.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomponentapp_la-component-app.Tpo $(DEPDIR)/libcomponentapp_la-component-app.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='component-app.c' object='libcomponentapp_la-component-app.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomponentapp_la_CFLAGS) $(CFLAGS) -c -o libcomponentapp_la-component-app.lo `test -f 'component-app.c' || echo '$(srcdir)/'`component-app.c
|
||||
|
||||
libnoopapp_la-noop-app.lo: noop-app.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnoopapp_la_CFLAGS) $(CFLAGS) -MT libnoopapp_la-noop-app.lo -MD -MP -MF $(DEPDIR)/libnoopapp_la-noop-app.Tpo -c -o libnoopapp_la-noop-app.lo `test -f 'noop-app.c' || echo '$(srcdir)/'`noop-app.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnoopapp_la-noop-app.Tpo $(DEPDIR)/libnoopapp_la-noop-app.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='noop-app.c' object='libnoopapp_la-noop-app.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnoopapp_la_CFLAGS) $(CFLAGS) -c -o libnoopapp_la-noop-app.lo `test -f 'noop-app.c' || echo '$(srcdir)/'`noop-app.c
|
||||
|
||||
librelationapp_la-relation-app.lo: relation-app.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librelationapp_la_CFLAGS) $(CFLAGS) -MT librelationapp_la-relation-app.lo -MD -MP -MF $(DEPDIR)/librelationapp_la-relation-app.Tpo -c -o librelationapp_la-relation-app.lo `test -f 'relation-app.c' || echo '$(srcdir)/'`relation-app.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librelationapp_la-relation-app.Tpo $(DEPDIR)/librelationapp_la-relation-app.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='relation-app.c' object='librelationapp_la-relation-app.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librelationapp_la_CFLAGS) $(CFLAGS) -c -o librelationapp_la-relation-app.lo `test -f 'relation-app.c' || echo '$(srcdir)/'`relation-app.c
|
||||
|
||||
test_application-test-application.o: test-application.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_application_CFLAGS) $(CFLAGS) -MT test_application-test-application.o -MD -MP -MF $(DEPDIR)/test_application-test-application.Tpo -c -o test_application-test-application.o `test -f 'test-application.c' || echo '$(srcdir)/'`test-application.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_application-test-application.Tpo $(DEPDIR)/test_application-test-application.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-application.c' object='test_application-test-application.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_application_CFLAGS) $(CFLAGS) -c -o test_application-test-application.o `test -f 'test-application.c' || echo '$(srcdir)/'`test-application.c
|
||||
|
||||
test_application-test-application.obj: test-application.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_application_CFLAGS) $(CFLAGS) -MT test_application-test-application.obj -MD -MP -MF $(DEPDIR)/test_application-test-application.Tpo -c -o test_application-test-application.obj `if test -f 'test-application.c'; then $(CYGPATH_W) 'test-application.c'; else $(CYGPATH_W) '$(srcdir)/test-application.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_application-test-application.Tpo $(DEPDIR)/test_application-test-application.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-application.c' object='test_application-test-application.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_application_CFLAGS) $(CFLAGS) -c -o test_application-test-application.obj `if test -f 'test-application.c'; then $(CYGPATH_W) 'test-application.c'; else $(CYGPATH_W) '$(srcdir)/test-application.c'; fi`
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
ID: $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||
tags: tags-am
|
||||
TAGS: tags
|
||||
|
||||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
$(am__define_uniq_tagged_files); \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: ctags-am
|
||||
|
||||
CTAGS: ctags
|
||||
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
cscopelist: cscopelist-am
|
||||
|
||||
cscopelist-am: $(am__tagged_files)
|
||||
list='$(am__tagged_files)'; \
|
||||
case "$(srcdir)" in \
|
||||
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
|
||||
*) sdir=$(subdir)/$(srcdir) ;; \
|
||||
esac; \
|
||||
for i in $$list; do \
|
||||
if test -f "$$i"; then \
|
||||
echo "$(subdir)/$$i"; \
|
||||
else \
|
||||
echo "$$sdir/$$i"; \
|
||||
fi; \
|
||||
done >> $(top_builddir)/cscope.files
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||
|
||||
distdir-am: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_LTLIBRARIES)
|
||||
check: check-am
|
||||
all-am: Makefile
|
||||
installdirs:
|
||||
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:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
|
||||
clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f ./$(DEPDIR)/libaccessibleapp_la-accessible-app.Plo
|
||||
-rm -f ./$(DEPDIR)/libaccessibleapp_la-atk-object-xml-loader.Plo
|
||||
-rm -f ./$(DEPDIR)/libactionapp_la-action-app.Plo
|
||||
-rm -f ./$(DEPDIR)/libcomponentapp_la-component-app.Plo
|
||||
-rm -f ./$(DEPDIR)/libnoopapp_la-noop-app.Plo
|
||||
-rm -f ./$(DEPDIR)/librelationapp_la-relation-app.Plo
|
||||
-rm -f ./$(DEPDIR)/test_application-test-application.Po
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f ./$(DEPDIR)/libaccessibleapp_la-accessible-app.Plo
|
||||
-rm -f ./$(DEPDIR)/libaccessibleapp_la-atk-object-xml-loader.Plo
|
||||
-rm -f ./$(DEPDIR)/libactionapp_la-action-app.Plo
|
||||
-rm -f ./$(DEPDIR)/libcomponentapp_la-component-app.Plo
|
||||
-rm -f ./$(DEPDIR)/libnoopapp_la-noop-app.Plo
|
||||
-rm -f ./$(DEPDIR)/librelationapp_la-relation-app.Plo
|
||||
-rm -f ./$(DEPDIR)/test_application-test-application.Po
|
||||
-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:
|
||||
|
||||
.MAKE: check-am install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
|
||||
clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
|
||||
clean-libtool cscopelist-am ctags ctags-am 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-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-pdf install-pdf-am install-ps install-ps-am \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
|
||||
pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am
|
||||
|
||||
.PRECIOUS: Makefile
|
||||
|
||||
|
||||
# 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,76 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <atk/atk.h>
|
||||
#include <my-atk.h>
|
||||
|
||||
#include "atk-object-xml-loader.h"
|
||||
|
||||
static gchar *tdata_path = NULL;
|
||||
|
||||
static AtkObject *root_accessible;
|
||||
|
||||
static AtkStateType states[] =
|
||||
{
|
||||
ATK_STATE_MULTI_LINE,
|
||||
ATK_STATE_MODAL,
|
||||
ATK_STATE_INDETERMINATE,
|
||||
ATK_STATE_SUPPORTS_AUTOCOMPLETION,
|
||||
ATK_STATE_VERTICAL
|
||||
};
|
||||
|
||||
#define OBJECT_TEST_1 "accessible-test.xml"
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_init (gchar *path)
|
||||
{
|
||||
AtkStateSet *ss;
|
||||
gchar *td;
|
||||
|
||||
if (path == NULL)
|
||||
g_error("No test data path provided");
|
||||
tdata_path = path;
|
||||
|
||||
td = g_build_path(G_DIR_SEPARATOR_S, tdata_path, OBJECT_TEST_1, NULL);
|
||||
root_accessible = ATK_OBJECT(atk_object_xml_parse(td));
|
||||
g_free(td);
|
||||
|
||||
ss = atk_object_ref_state_set(ATK_OBJECT(root_accessible));
|
||||
atk_state_set_add_states(ss, states, 5);
|
||||
g_object_unref(G_OBJECT(ss));
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_next (int argc, char *argv[])
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_finished (int argc, char *argv[])
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT AtkObject *
|
||||
test_get_root (void)
|
||||
{
|
||||
return root_accessible;
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <atk/atk.h>
|
||||
#include <my-atk.h>
|
||||
|
||||
static AtkObject *root_accessible;
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_init (gchar *path)
|
||||
{
|
||||
root_accessible = g_object_new(MY_TYPE_ATK_ACTION, NULL);
|
||||
root_accessible->name = g_strdup ("atspi-test-main");
|
||||
root_accessible->role = ATK_ROLE_APPLICATION;
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_next (int argc, char *argv[])
|
||||
{
|
||||
g_print("Moving to next stage\n");
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_finished (int argc, char *argv[])
|
||||
{
|
||||
g_print("Test has completed\n");
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT AtkObject *
|
||||
test_get_root (void)
|
||||
{
|
||||
return root_accessible;
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <glib.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/tree.h>
|
||||
|
||||
#include <my-atk.h>
|
||||
|
||||
#define ACCESSIBLE_NODE ((const xmlChar *) "accessible")
|
||||
#define INTERFACE_NODE ((const xmlChar *) "interface")
|
||||
|
||||
#define NAME_ATTR ((const xmlChar *) "name")
|
||||
#define DESC_ATTR ((const xmlChar *) "description")
|
||||
#define ROLE_ATTR ((const xmlChar *) "role")
|
||||
#define TYPE_ATTR ((const xmlChar *) "type")
|
||||
|
||||
static MyAtkObject *
|
||||
create_atk_object_from_element(xmlNode *element)
|
||||
{
|
||||
xmlNode *child_node;
|
||||
|
||||
MyAtkObject *obj = NULL;
|
||||
MyAtkObject *child_obj;
|
||||
|
||||
xmlChar *name;
|
||||
xmlChar *description;
|
||||
xmlChar *role_text;
|
||||
xmlChar *type_text;
|
||||
gint role;
|
||||
GType type = MY_TYPE_ATK_OBJECT;
|
||||
|
||||
name = xmlGetProp(element, NAME_ATTR);
|
||||
description = xmlGetProp(element, DESC_ATTR);
|
||||
role_text = xmlGetProp(element, ROLE_ATTR);
|
||||
role = atoi(role_text);
|
||||
type_text = xmlGetProp(element, TYPE_ATTR);
|
||||
|
||||
if (type_text && !strcmp (type_text, "document"))
|
||||
type = MY_TYPE_ATK_DOCUMENT;
|
||||
|
||||
obj = MY_ATK_OBJECT(g_object_new(type,
|
||||
"accessible-name", name,
|
||||
"accessible-description", description,
|
||||
"accessible-role", role,
|
||||
NULL));
|
||||
|
||||
child_node = element->xmlChildrenNode;
|
||||
while (child_node != NULL)
|
||||
{
|
||||
if (!xmlStrcmp(child_node->name, ACCESSIBLE_NODE))
|
||||
{
|
||||
child_obj = create_atk_object_from_element(child_node);
|
||||
my_atk_object_add_child(obj, child_obj);
|
||||
}
|
||||
child_node = child_node->next;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reads the XML from filename and uses it
|
||||
* to create a tree of MyAtkObjects.
|
||||
*
|
||||
* returns: The root object of the tree.
|
||||
*/
|
||||
MyAtkObject *
|
||||
atk_object_xml_parse(gchar *filename)
|
||||
{
|
||||
xmlDoc *doc;
|
||||
xmlNode *root_element;
|
||||
MyAtkObject *new_atk_object = NULL;
|
||||
|
||||
doc = xmlReadFile(filename, NULL, 0);
|
||||
g_assert(doc != NULL);
|
||||
|
||||
root_element = xmlDocGetRootElement(doc);
|
||||
|
||||
if (!xmlStrcmp(root_element->name, ACCESSIBLE_NODE))
|
||||
new_atk_object = create_atk_object_from_element(root_element);
|
||||
|
||||
xmlFreeDoc(doc);
|
||||
return new_atk_object;
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef ATK_OBJECT_XML_LOADER_H
|
||||
#define ATK_OBJECT_XML_LOADER_H
|
||||
|
||||
#include <glib.h>
|
||||
#include <my-atk.h>
|
||||
|
||||
MyAtkObject *
|
||||
atk_object_xml_parse(gchar *filename);
|
||||
|
||||
#endif /*ATK_OBJECT_XML_LOADER_H*/
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <atk/atk.h>
|
||||
#include <my-atk.h>
|
||||
|
||||
static gchar *tdata_path = NULL;
|
||||
|
||||
static AtkComponent *comps[] = {NULL, NULL, NULL};
|
||||
static const AtkRectangle extents[] = {{0,0,30,20}, {40,30,30,40}, {0,0,70,70}};
|
||||
static const AtkLayer layers[] = {ATK_LAYER_WINDOW, ATK_LAYER_WIDGET, ATK_LAYER_MDI};
|
||||
static const guint zorders[] = {0, -100, 100};
|
||||
static const gboolean extent_may_changed[] = {TRUE, FALSE, TRUE};
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_init (gchar *path)
|
||||
{
|
||||
int i;
|
||||
AtkObject *atk;
|
||||
|
||||
if (path == NULL)
|
||||
g_error("No test data path provided");
|
||||
tdata_path = path;
|
||||
|
||||
g_type_init();
|
||||
for(i = 0; i < sizeof(comps) / sizeof(comps[0]); i++)
|
||||
{
|
||||
MyAtkComponent *mycomp = MY_ATK_COMPONENT(g_object_new(MY_TYPE_ATK_COMPONENT, NULL));
|
||||
|
||||
mycomp->extent = extents[i];
|
||||
mycomp->is_extent_may_changed = extent_may_changed[i];
|
||||
mycomp->layer = layers[i];
|
||||
mycomp->zorder = zorders[i];
|
||||
|
||||
comps[i] = ATK_COMPONENT(mycomp);
|
||||
}
|
||||
|
||||
my_atk_object_add_child(MY_ATK_OBJECT(comps[2]), MY_ATK_OBJECT(comps[0]));
|
||||
my_atk_object_add_child(MY_ATK_OBJECT(comps[2]), MY_ATK_OBJECT(comps[1]));
|
||||
|
||||
atk = ATK_OBJECT (comps [2]);
|
||||
atk->name = g_strdup ("atspi-test-main");
|
||||
atk->role = ATK_ROLE_APPLICATION;
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_next (int argc, char *argv[])
|
||||
{
|
||||
g_print("Moving to next stage\n");
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_finished (int argc, char *argv[])
|
||||
{
|
||||
g_print("Test has completed\n");
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT AtkObject *
|
||||
test_get_root (void)
|
||||
{
|
||||
return ATK_OBJECT(comps[2]);
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <atk/atk.h>
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_init (int argc, char *argv[])
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_next (int argc, char *argv[])
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_finished (int argc, char *argv[])
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT AtkObject *
|
||||
test_get_root (void)
|
||||
{
|
||||
return NULL;
|
||||
}
|
|
@ -0,0 +1,111 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <atk/atk.h>
|
||||
#include <my-atk.h>
|
||||
|
||||
static AtkObject *root_accessible;
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_init (gchar *path)
|
||||
{
|
||||
AtkObject *r1, *r2, *r3;
|
||||
AtkObject *m1, *m2, *m3;
|
||||
AtkRelationSet *rset;
|
||||
AtkRelation *rel;
|
||||
AtkObject *rls[3];
|
||||
|
||||
root_accessible = g_object_new(MY_TYPE_ATK_OBJECT, NULL);
|
||||
root_accessible->name = g_strdup ("atspi-test-main");
|
||||
root_accessible->role = ATK_ROLE_APPLICATION;
|
||||
|
||||
r1 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT,
|
||||
"accessible-name", "r1",
|
||||
"accessible-description", "",
|
||||
"accessible-role", ATK_ROLE_INVALID,
|
||||
NULL));
|
||||
my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(r1));
|
||||
|
||||
r2 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT,
|
||||
"accessible-name", "r2",
|
||||
"accessible-description", "",
|
||||
"accessible-role", ATK_ROLE_INVALID,
|
||||
NULL));
|
||||
my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(r2));
|
||||
|
||||
r3 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT,
|
||||
"accessible-name", "r3",
|
||||
"accessible-description", "",
|
||||
"accessible-role", ATK_ROLE_INVALID,
|
||||
NULL));
|
||||
my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(r3));
|
||||
|
||||
m1 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT,
|
||||
"accessible-name", "m1",
|
||||
"accessible-description", "",
|
||||
"accessible-role", ATK_ROLE_INVALID,
|
||||
NULL));
|
||||
my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(m1));
|
||||
|
||||
m2 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT,
|
||||
"accessible-name", "m2",
|
||||
"accessible-description", "",
|
||||
"accessible-role", ATK_ROLE_INVALID,
|
||||
NULL));
|
||||
my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(m2));
|
||||
|
||||
m3 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT,
|
||||
"accessible-name", "m3",
|
||||
"accessible-description", "",
|
||||
"accessible-role", ATK_ROLE_INVALID,
|
||||
NULL));
|
||||
my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(m3));
|
||||
|
||||
atk_object_add_relationship(root_accessible, ATK_RELATION_EMBEDS, r1);
|
||||
atk_object_add_relationship(root_accessible, ATK_RELATION_PARENT_WINDOW_OF, r2);
|
||||
atk_object_add_relationship(root_accessible, ATK_RELATION_DESCRIBED_BY, r3);
|
||||
|
||||
rls[0] = m1;
|
||||
rls[1] = m2;
|
||||
rls[2] = m3;
|
||||
|
||||
rset = atk_object_ref_relation_set(root_accessible);
|
||||
rel = atk_relation_new(rls, 3, ATK_RELATION_POPUP_FOR);
|
||||
atk_relation_set_add(rset, rel);
|
||||
g_object_unref(G_OBJECT(rset));
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_next (int argc, char *argv[])
|
||||
{
|
||||
g_print("Moving to next stage\n");
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
test_finished (int argc, char *argv[])
|
||||
{
|
||||
g_print("Test has completed\n");
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT AtkObject *
|
||||
test_get_root (void)
|
||||
{
|
||||
return root_accessible;
|
||||
}
|
|
@ -0,0 +1,291 @@
|
|||
/*
|
||||
* AT-SPI - Assistive Technology Service Provider Interface
|
||||
* (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
|
||||
*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Testing AT-SPI requires both a test application and AT client.
|
||||
* Test applications are built using the Dummy ATK implementation: MyAtk.
|
||||
* This file contains the entry point for all test applications.
|
||||
* Each test is built as a GModule, and this program loads the
|
||||
* test module, as well as the AT-SPI module. The test module will
|
||||
* provide its own implementation of atk_get_root, and as such provide
|
||||
* all the application state for the test.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <glib.h>
|
||||
#include <gmodule.h>
|
||||
#include <atk/atk.h>
|
||||
#include <dbus/dbus.h>
|
||||
|
||||
/* The test module, GModule containing interface for an atk-test */
|
||||
static GModule *test_module;
|
||||
static gpointer test_module_get_root;
|
||||
static gpointer test_module_next;
|
||||
static gpointer test_module_finished;
|
||||
|
||||
static DBusConnection *dbus_bus;
|
||||
static GMainLoop *mainloop;
|
||||
|
||||
/* Test module interface */
|
||||
/*************************/
|
||||
|
||||
typedef AtkObject *(*TestModuleGetRoot) (void);
|
||||
|
||||
/* Calls into the test module to get the root atk object */
|
||||
static AtkObject *
|
||||
get_root(void)
|
||||
{
|
||||
return ((TestModuleGetRoot) test_module_get_root)();
|
||||
}
|
||||
|
||||
typedef void (*VoidVoid) (void);
|
||||
|
||||
/* Called to move to next stage of test.*/
|
||||
static void
|
||||
next(void)
|
||||
{
|
||||
((VoidVoid) test_module_next)();
|
||||
}
|
||||
|
||||
|
||||
/*************************/
|
||||
|
||||
/* The AtkUtil class is called to find the root accessible and to deal
|
||||
* with events. Its an incomplete class, its v-table needs to be filled in.
|
||||
*/
|
||||
static void
|
||||
setup_atk_util(void)
|
||||
{
|
||||
AtkUtilClass *klass;
|
||||
|
||||
klass = g_type_class_ref(ATK_TYPE_UTIL);
|
||||
klass->get_root = get_root;
|
||||
g_type_class_unref(klass);
|
||||
}
|
||||
|
||||
typedef void (*GtkModuleInit) (int *argc, char **argv[]);
|
||||
|
||||
/* AT-SPI is a gtk module that must be loaded and initialized */
|
||||
static void
|
||||
load_atspi_module(const char *path, int *argc, char **argv[])
|
||||
{
|
||||
GModule *bridge;
|
||||
gpointer init;
|
||||
|
||||
bridge = g_module_open(path, G_MODULE_BIND_LOCAL|G_MODULE_BIND_LAZY);
|
||||
if (!bridge)
|
||||
g_error("Couldn't load atk-bridge module : %s\n", g_module_error());
|
||||
|
||||
if (!g_module_symbol(bridge, "gtk_module_init", &init))
|
||||
g_error("Couldn't load symbol \"gtk_module_init\"\n");
|
||||
|
||||
((GtkModuleInit) init)(argc, argv);
|
||||
}
|
||||
|
||||
typedef void (*TestModuleInit) (gchar *path);
|
||||
|
||||
static void
|
||||
load_test_module(const char *path, const char *tdpath)
|
||||
{
|
||||
gpointer init;
|
||||
|
||||
test_module = g_module_open(path, G_MODULE_BIND_LOCAL|G_MODULE_BIND_LAZY);
|
||||
if (!test_module)
|
||||
g_error("Couldn't load test module : %s\n", path);
|
||||
|
||||
if (!g_module_symbol(test_module, "test_init", &init))
|
||||
g_error("Couldn't load symbol \"test_init\"\n");
|
||||
|
||||
if (!g_module_symbol(test_module, "test_get_root", &test_module_get_root))
|
||||
g_error("Couldn't load symbol \"test_get_root\"\n");
|
||||
|
||||
if (!g_module_symbol(test_module, "test_next", &test_module_next))
|
||||
g_error("Couldn't load symbol \"test_next\"\n");
|
||||
|
||||
if (!g_module_symbol(test_module, "test_finished", &test_module_finished))
|
||||
g_error("Couldn't load symbol \"test_finished\"\n");
|
||||
|
||||
((TestModuleInit) init)((gchar *)tdpath);
|
||||
}
|
||||
|
||||
static const char* introspection_string =
|
||||
"<node name=\"/org/codethink/atspi/test\">"
|
||||
" <interface name=\"org.codethink.atspi.test\">"
|
||||
" <method name=\"next\"/>"
|
||||
" <method name=\"finish\"/>"
|
||||
" <signal name=\"started\"/>"
|
||||
" </interface>"
|
||||
"</node>";
|
||||
|
||||
static DBusHandlerResult
|
||||
message_handler (DBusConnection *bus, DBusMessage *message, void *user_data)
|
||||
{
|
||||
const char *iface = dbus_message_get_interface (message);
|
||||
const char *member = dbus_message_get_member (message);
|
||||
DBusHandlerResult result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
|
||||
gboolean exit = FALSE;
|
||||
|
||||
DBusMessage *reply = NULL;
|
||||
|
||||
g_return_val_if_fail(iface != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
|
||||
|
||||
if (!strcmp(iface, "org.codethink.atspi.test"))
|
||||
{
|
||||
if (!strcmp(member, "next"))
|
||||
{
|
||||
next();
|
||||
reply = dbus_message_new_method_return (message);
|
||||
g_assert(reply != NULL);
|
||||
result = DBUS_HANDLER_RESULT_HANDLED;
|
||||
}
|
||||
|
||||
if (!strcmp(member, "finish"))
|
||||
{
|
||||
((VoidVoid) test_module_finished)();
|
||||
reply = dbus_message_new_method_return (message);
|
||||
g_assert(reply != NULL);
|
||||
result = DBUS_HANDLER_RESULT_HANDLED;
|
||||
exit = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (!strcmp(iface, "org.freedesktop.DBus.Introspectable"))
|
||||
{
|
||||
if (!strcmp(member, "Introspect"))
|
||||
{
|
||||
reply = dbus_message_new_method_return (message);
|
||||
g_assert(reply != NULL);
|
||||
dbus_message_append_args(reply, DBUS_TYPE_STRING, &introspection_string,
|
||||
DBUS_TYPE_INVALID);
|
||||
result = DBUS_HANDLER_RESULT_HANDLED;
|
||||
}
|
||||
}
|
||||
|
||||
if (reply)
|
||||
{
|
||||
dbus_connection_send (bus, reply, NULL);
|
||||
dbus_message_unref (reply);
|
||||
}
|
||||
|
||||
if (exit == TRUE)
|
||||
{
|
||||
dbus_connection_flush(bus);
|
||||
dbus_connection_unref(bus);
|
||||
g_main_loop_quit(mainloop);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static DBusObjectPathVTable test_vtable =
|
||||
{
|
||||
NULL,
|
||||
&message_handler,
|
||||
NULL, NULL, NULL, NULL
|
||||
};
|
||||
|
||||
static void
|
||||
init_dbus_interface(gchar *bus_name)
|
||||
{
|
||||
DBusError error;
|
||||
|
||||
dbus_error_init(&error);
|
||||
dbus_bus = dbus_bus_get(DBUS_BUS_SESSION, &error);
|
||||
g_print("\nUnique D-Bus name is: %s\n", dbus_bus_get_unique_name(dbus_bus));
|
||||
|
||||
if (!dbus_bus)
|
||||
g_error("Couldn't get the session bus - %s\n", error.message);
|
||||
|
||||
if (bus_name)
|
||||
dbus_bus_request_name (dbus_bus, bus_name, DBUS_NAME_FLAG_DO_NOT_QUEUE, &error);
|
||||
|
||||
g_assert(dbus_connection_register_object_path(dbus_bus,
|
||||
"/org/codethink/atspi/test",
|
||||
&test_vtable,
|
||||
NULL));
|
||||
|
||||
dbus_connection_setup_with_g_main(dbus_bus, g_main_context_default());
|
||||
}
|
||||
|
||||
static void
|
||||
send_started_signal(void)
|
||||
{
|
||||
DBusMessage* sig;
|
||||
DBusMessageIter args;
|
||||
|
||||
sig = dbus_message_new_signal("/org/codethink/atspi/test", "org.codethink.atspi.test", "started");
|
||||
g_assert(sig != NULL);
|
||||
if (!dbus_connection_send(dbus_bus, sig, NULL))
|
||||
g_error("Out of memory");
|
||||
dbus_connection_flush(dbus_bus);
|
||||
dbus_message_unref(sig);
|
||||
}
|
||||
|
||||
/*Command line data*/
|
||||
static gchar *tmodule_path = NULL;
|
||||
static gchar *amodule_path = NULL;
|
||||
static gchar *tdata_path = NULL;
|
||||
static gchar *bus_name = NULL;
|
||||
|
||||
static GOptionEntry optentries[] =
|
||||
{
|
||||
{"test-module", 0, 0, G_OPTION_ARG_STRING, &tmodule_path, "Module containing test scenario", NULL},
|
||||
{"test-atspi-library", 0, 0, G_OPTION_ARG_STRING, &amodule_path, "Gtk module with atk-atspi adaptor", NULL},
|
||||
{"test-data-directory", 0, 0, G_OPTION_ARG_STRING, &tdata_path, "Path to directory of test data", NULL},
|
||||
{"test-dbus-name", 0, 0, G_OPTION_ARG_STRING, &bus_name, "Bus name", NULL},
|
||||
{NULL}
|
||||
};
|
||||
|
||||
/* main
|
||||
*
|
||||
* Entry point for all test applications.
|
||||
*/
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
GOptionContext *opt;
|
||||
GError *err = NULL;
|
||||
|
||||
/*Parse command options*/
|
||||
opt = g_option_context_new(NULL);
|
||||
g_option_context_add_main_entries(opt, optentries, NULL);
|
||||
g_option_context_set_ignore_unknown_options(opt, TRUE);
|
||||
|
||||
if (!g_option_context_parse(opt, &argc, &argv, &err))
|
||||
g_error("Option parsing failed: %s\n", err->message);
|
||||
|
||||
if (tmodule_path == NULL)
|
||||
g_error("No test module provided");
|
||||
if (amodule_path == NULL)
|
||||
g_error("No atspi module provided");
|
||||
|
||||
g_type_init();
|
||||
|
||||
setup_atk_util();
|
||||
load_test_module(tmodule_path, tdata_path);
|
||||
load_atspi_module(amodule_path, &argc, &argv);
|
||||
init_dbus_interface(bus_name);
|
||||
send_started_signal();
|
||||
|
||||
mainloop = g_main_loop_new (NULL, FALSE);
|
||||
g_main_loop_run (mainloop);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
EXTRA_DIST = \
|
||||
accessible-test.xml\
|
||||
accessible-test-results.xml\
|
||||
accessible-test-results-stable.xml
|
|
@ -0,0 +1,481 @@
|
|||
# Makefile.in generated by automake 1.16.1 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
am__is_gnu_make = { \
|
||||
if test -z '$(MAKELEVEL)'; then \
|
||||
false; \
|
||||
elif test -n '$(MAKE_HOST)'; then \
|
||||
true; \
|
||||
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
||||
true; \
|
||||
else \
|
||||
false; \
|
||||
fi; \
|
||||
}
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
subdir = tests/data
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
||||
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_@AM_V@)
|
||||
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
AR = @AR@
|
||||
ATK_CFLAGS = @ATK_CFLAGS@
|
||||
ATK_LIBS = @ATK_LIBS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DBUS_CFLAGS = @DBUS_CFLAGS@
|
||||
DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
|
||||
DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
|
||||
DBUS_LIBS = @DBUS_LIBS@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||
GLIB_LIBS = @GLIB_LIBS@
|
||||
GMODULE_CFLAGS = @GMODULE_CFLAGS@
|
||||
GMODULE_LIBS = @GMODULE_LIBS@
|
||||
GOBJ_CFLAGS = @GOBJ_CFLAGS@
|
||||
GOBJ_LIBS = @GOBJ_LIBS@
|
||||
GREP = @GREP@
|
||||
GTK_CFLAGS = @GTK_CFLAGS@
|
||||
GTK_LIBS = @GTK_LIBS@
|
||||
GTK_MODULE_DIR = @GTK_MODULE_DIR@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIB_XML_CFLAGS = @LIB_XML_CFLAGS@
|
||||
LIB_XML_LIBS = @LIB_XML_LIBS@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
LT_AGE = @LT_AGE@
|
||||
LT_CURRENT = @LT_CURRENT@
|
||||
LT_RELEASE = @LT_RELEASE@
|
||||
LT_REVISION = @LT_REVISION@
|
||||
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
|
||||
LT_VERSION_INFO = @LT_VERSION_INFO@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PKG_CONFIG = @PKG_CONFIG@
|
||||
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
|
||||
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
|
||||
PYGOBJ_CFLAGS = @PYGOBJ_CFLAGS@
|
||||
PYGOBJ_LIBS = @PYGOBJ_LIBS@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
|
||||
PYTHON_PLATFORM = @PYTHON_PLATFORM@
|
||||
PYTHON_PREFIX = @PYTHON_PREFIX@
|
||||
PYTHON_VERSION = @PYTHON_VERSION@
|
||||
RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
XMKMF = @XMKMF@
|
||||
X_CFLAGS = @X_CFLAGS@
|
||||
X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||
X_LIBS = @X_LIBS@
|
||||
X_PRE_LIBS = @X_PRE_LIBS@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
pkgpyexecdir = @pkgpyexecdir@
|
||||
pkgpythondir = @pkgpythondir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
pyexecdir = @pyexecdir@
|
||||
pythondir = @pythondir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
EXTRA_DIST = \
|
||||
accessible-test.xml\
|
||||
accessible-test-results.xml\
|
||||
accessible-test-results-stable.xml
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(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 ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/data/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign tests/data/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__maybe_remake_depfiles)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
|
||||
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
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
tags TAGS:
|
||||
|
||||
ctags CTAGS:
|
||||
|
||||
cscope cscopelist:
|
||||
|
||||
|
||||
distdir: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||
|
||||
distdir-am: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile
|
||||
installdirs:
|
||||
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:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am:
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
||||
cscopelist-am ctags-am distclean distclean-generic \
|
||||
distclean-libtool distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-pdf install-pdf-am install-ps install-ps-am \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags-am uninstall uninstall-am
|
||||
|
||||
.PRECIOUS: Makefile
|
||||
|
||||
|
||||
# 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,136 @@
|
|||
<?xml version="1.0" ?>
|
||||
<accessible name="atspi-test-main" role="69" description="The main accessible object, root of the accessible tree">
|
||||
<accessible name="gnome-settings-daemon" role="79" description=""/>
|
||||
<accessible name="gnome-panel" role="79" description="">
|
||||
<accessible name="Bottom Expanded Edge Panel" role="25" description=""/>
|
||||
<accessible name="Top Expanded Edge Panel" role="25" description=""/>
|
||||
</accessible>
|
||||
<accessible name="nautilus" role="79" description="">
|
||||
<accessible name="Desktop" role="25" description=""/>
|
||||
</accessible>
|
||||
<accessible name="metacity" role="79" description=""/>
|
||||
<accessible name="tracker-applet" role="79" description=""/>
|
||||
<accessible name="empathy" role="79" description="">
|
||||
<accessible name="Contact List" role="25" description=""/>
|
||||
</accessible>
|
||||
<accessible name="nm-applet" role="79" description=""/>
|
||||
<accessible name="gnome-power-manager" role="79" description=""/>
|
||||
<accessible name="update-notifier" role="79" description=""/>
|
||||
<accessible name="Firefox" role="79" description="Firefox Application Accessible">
|
||||
<accessible name="Google Reader - Mozilla Firefox 3 Beta 5" role="25" description="Firefox Application Accessible">
|
||||
<accessible name="" role="35" description=""/>
|
||||
<accessible name="Strip originally conceived in conversation with Jeph Jacques. Soon to be a major motion picture." role="66" description=""/>
|
||||
<accessible name="" role="68" description="">
|
||||
<accessible name="" role="33" description="">
|
||||
<accessible name="" role="10" description=""/>
|
||||
<accessible name="" role="10" description=""/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible name="" role="35" description="">
|
||||
<accessible name="" role="69" description=""/>
|
||||
</accessible>
|
||||
<accessible name="" role="35" description=""/>
|
||||
<accessible name="" role="35" description=""/>
|
||||
<accessible name="" role="35" description=""/>
|
||||
<accessible name="" role="35" description=""/>
|
||||
<accessible name="" role="35" description=""/>
|
||||
<accessible name="" role="66" description=""/>
|
||||
<accessible name="" role="66" description=""/>
|
||||
<accessible name="" role="65" description="">
|
||||
<accessible name="Application" role="36" description=""/>
|
||||
<accessible name="" role="53" description=""/>
|
||||
<accessible name="Activity Indicator" role="45" description=""/>
|
||||
</accessible>
|
||||
<accessible name="" role="65" description="">
|
||||
<accessible name="Back" role="45" description="Go back one page"/>
|
||||
<accessible name="Forward" role="45" description="Go forwards one page"/>
|
||||
<accessible name="" role="45" description=""/>
|
||||
<accessible name="Reload" role="45" description="Reload current page"/>
|
||||
<accessible name="Stop" role="45" description="Stop loading this page"/>
|
||||
<accessible name="Home" role="45" description="chrome://ubufox/content/startpage.html"/>
|
||||
<accessible name="Location" role="80" description=""/>
|
||||
<accessible name="Search using Google" role="80" description=""/>
|
||||
</accessible>
|
||||
<accessible name="" role="65" description="">
|
||||
<accessible name="Smart Bookmarks" role="45" description=""/>
|
||||
<accessible name="Getting Started" role="45" description=""/>
|
||||
<accessible name="Latest Headlines" role="45" description=""/>
|
||||
</accessible>
|
||||
<accessible name="" role="41" description="">
|
||||
<accessible name="Google Reader" role="66" description=""/>
|
||||
<accessible name="" role="35" description=""/>
|
||||
<accessible name="" role="40" description=""/>
|
||||
<accessible name="" role="51" description=""/>
|
||||
<accessible name="" role="51" description="">
|
||||
<accessible name="Google Reader" role="30" description="">
|
||||
<accessible name="Google Reader" role="86" description="">
|
||||
<accessible name="Click here for ARIA enhanced Google Reader." role="72" description=""/>
|
||||
<accessible name="" role="89" description=""/>
|
||||
<accessible name="" role="89" description=""/>
|
||||
<accessible name="" role="89" description=""/>
|
||||
<accessible name="Google Reader" role="72" description=""/>
|
||||
<accessible name="" role="63" description=""/>
|
||||
<accessible name="" role="89" description=""/>
|
||||
<accessible name="" role="89" description="">
|
||||
<accessible name="" role="89" description=""/>
|
||||
<accessible name="" role="89" description=""/>
|
||||
<accessible name="" role="89" description="">
|
||||
<accessible name="" role="57" description=""/>
|
||||
<accessible name="" role="89" description="">
|
||||
<accessible name="" role="89" description="">
|
||||
<accessible name="" role="89" description="">
|
||||
<accessible name="" role="57" description=""/>
|
||||
<accessible name="" role="57" description="">
|
||||
<accessible name="" role="58" description="">
|
||||
<accessible name="" role="89" description="">
|
||||
<accessible name="" role="89" description=""/>
|
||||
<accessible name="" role="63" description=""/>
|
||||
<accessible name="Google News" role="72" description=""/>
|
||||
<accessible name="" role="89" description="">
|
||||
<accessible name="" role="89" description=""/>
|
||||
<accessible name="" role="89" description="">
|
||||
<accessible name="Reader and ARIA: A new way to read" role="72" description=""/>
|
||||
</accessible>
|
||||
<accessible name="" role="89" description="">
|
||||
<accessible name="Official Google Reader Blog" role="72" description=""/>
|
||||
</accessible>
|
||||
<accessible name="" role="89" description=""/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible name="" role="58" description=""/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible name="" role="89" description="">
|
||||
<accessible name="Google Reader Blog" role="72" description=""/>
|
||||
<accessible name="Discuss" role="72" description=""/>
|
||||
<accessible name="Privacy Policy" role="72" description=""/>
|
||||
<accessible name="Help" role="72" description=""/>
|
||||
<accessible name="" role="89" description=""/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible name="" role="89" description="">
|
||||
<accessible name="" role="29" description=""/>
|
||||
<accessible name="" role="29" description=""/>
|
||||
<accessible name="" role="29" description=""/>
|
||||
<accessible name="" role="29" description=""/>
|
||||
<accessible name="" role="29" description=""/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible name="" role="35" description=""/>
|
||||
<accessible name="" role="56" description="">
|
||||
<accessible name="Done" role="45" description=""/>
|
||||
<accessible name="" role="45" description=""/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible name="gnome-terminal" role="79" description="">
|
||||
<accessible name="mdoff@silver-wind: ~/Projects/accessibility/dbus-atspi/test" role="25" description=""/>
|
||||
</accessible>
|
||||
</accessible>
|
|
@ -0,0 +1,136 @@
|
|||
<?xml version="1.0" ?>
|
||||
<accessible description="The main accessible object, root of the accessible tree" name="atspi-test-main" role="69">
|
||||
<accessible description="" name="gnome-settings-daemon" role="79"/>
|
||||
<accessible description="" name="gnome-panel" role="79">
|
||||
<accessible description="" name="Bottom Expanded Edge Panel" role="25"/>
|
||||
<accessible description="" name="Top Expanded Edge Panel" role="25"/>
|
||||
</accessible>
|
||||
<accessible description="" name="nautilus" role="79">
|
||||
<accessible description="" name="Desktop" role="25"/>
|
||||
</accessible>
|
||||
<accessible description="" name="metacity" role="79"/>
|
||||
<accessible description="" name="tracker-applet" role="79"/>
|
||||
<accessible description="" name="empathy" role="79">
|
||||
<accessible description="" name="Contact List" role="25"/>
|
||||
</accessible>
|
||||
<accessible description="" name="nm-applet" role="79"/>
|
||||
<accessible description="" name="gnome-power-manager" role="79"/>
|
||||
<accessible description="" name="update-notifier" role="79"/>
|
||||
<accessible description="Firefox Application Accessible" name="Firefox" role="79">
|
||||
<accessible description="Firefox Application Accessible" name="Google Reader - Mozilla Firefox 3 Beta 5" role="25">
|
||||
<accessible description="" name="" role="35"/>
|
||||
<accessible description="" name="Strip originally conceived in conversation with Jeph Jacques. Soon to be a major motion picture." role="66"/>
|
||||
<accessible description="" name="" role="68">
|
||||
<accessible description="" name="" role="33">
|
||||
<accessible description="" name="" role="10"/>
|
||||
<accessible description="" name="" role="10"/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="35">
|
||||
<accessible description="" name="" role="69"/>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="35"/>
|
||||
<accessible description="" name="" role="35"/>
|
||||
<accessible description="" name="" role="35"/>
|
||||
<accessible description="" name="" role="35"/>
|
||||
<accessible description="" name="" role="35"/>
|
||||
<accessible description="" name="" role="66"/>
|
||||
<accessible description="" name="" role="66"/>
|
||||
<accessible description="" name="" role="65">
|
||||
<accessible description="" name="Application" role="36"/>
|
||||
<accessible description="" name="" role="53"/>
|
||||
<accessible description="" name="Activity Indicator" role="45"/>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="65">
|
||||
<accessible description="Go back one page" name="Back" role="45"/>
|
||||
<accessible description="Go forwards one page" name="Forward" role="45"/>
|
||||
<accessible description="" name="" role="45"/>
|
||||
<accessible description="Reload current page" name="Reload" role="45"/>
|
||||
<accessible description="Stop loading this page" name="Stop" role="45"/>
|
||||
<accessible description="chrome://ubufox/content/startpage.html" name="Home" role="45"/>
|
||||
<accessible description="" name="Location" role="80"/>
|
||||
<accessible description="" name="Search using Google" role="80"/>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="65">
|
||||
<accessible description="" name="Smart Bookmarks" role="45"/>
|
||||
<accessible description="" name="Getting Started" role="45"/>
|
||||
<accessible description="" name="Latest Headlines" role="45"/>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="41">
|
||||
<accessible description="" name="Google Reader" role="66"/>
|
||||
<accessible description="" name="" role="35"/>
|
||||
<accessible description="" name="" role="40"/>
|
||||
<accessible description="" name="" role="51"/>
|
||||
<accessible description="" name="" role="51">
|
||||
<accessible description="" name="Google Reader" role="30">
|
||||
<accessible description="" name="Google Reader" role="86">
|
||||
<accessible description="" name="Click here for ARIA enhanced Google Reader." role="72"/>
|
||||
<accessible description="" name="" role="89"/>
|
||||
<accessible description="" name="" role="89"/>
|
||||
<accessible description="" name="" role="89"/>
|
||||
<accessible description="" name="Google Reader" role="72"/>
|
||||
<accessible description="" name="" role="63"/>
|
||||
<accessible description="" name="" role="89"/>
|
||||
<accessible description="" name="" role="89">
|
||||
<accessible description="" name="" role="89"/>
|
||||
<accessible description="" name="" role="89"/>
|
||||
<accessible description="" name="" role="89">
|
||||
<accessible description="" name="" role="57"/>
|
||||
<accessible description="" name="" role="89">
|
||||
<accessible description="" name="" role="89">
|
||||
<accessible description="" name="" role="89">
|
||||
<accessible description="" name="" role="57"/>
|
||||
<accessible description="" name="" role="57">
|
||||
<accessible description="" name="" role="58">
|
||||
<accessible description="" name="" role="89">
|
||||
<accessible description="" name="" role="89"/>
|
||||
<accessible description="" name="" role="63"/>
|
||||
<accessible description="" name="Google News" role="72"/>
|
||||
<accessible description="" name="" role="89">
|
||||
<accessible description="" name="" role="89"/>
|
||||
<accessible description="" name="" role="89">
|
||||
<accessible description="" name="Reader and ARIA: A new way to read" role="72"/>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="89">
|
||||
<accessible description="" name="Official Google Reader Blog" role="72"/>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="89"/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="58"/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="89">
|
||||
<accessible description="" name="Google Reader Blog" role="72"/>
|
||||
<accessible description="" name="Discuss" role="72"/>
|
||||
<accessible description="" name="Privacy Policy" role="72"/>
|
||||
<accessible description="" name="Help" role="72"/>
|
||||
<accessible description="" name="" role="89"/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="89">
|
||||
<accessible description="" name="" role="29"/>
|
||||
<accessible description="" name="" role="29"/>
|
||||
<accessible description="" name="" role="29"/>
|
||||
<accessible description="" name="" role="29"/>
|
||||
<accessible description="" name="" role="29"/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="35"/>
|
||||
<accessible description="" name="" role="56">
|
||||
<accessible description="" name="Done" role="45"/>
|
||||
<accessible description="" name="" role="45"/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible description="" name="gnome-terminal" role="79">
|
||||
<accessible description="" name="mdoff@silver-wind: ~/Projects/accessibility/dbus-atspi/test" role="25"/>
|
||||
</accessible>
|
||||
</accessible>
|
|
@ -0,0 +1,157 @@
|
|||
<?xml version="1.0" ?>
|
||||
<!--
|
||||
|
||||
Copyright 2008 Codethink Ltd.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
Boston, MA 02110-1301, USA.
|
||||
|
||||
-->
|
||||
|
||||
<accessible description="The main accessible object, root of the accessible tree" name="atspi-test-main" role="68" type="document">
|
||||
<accessible description="" name="gnome-settings-daemon" role="77"/>
|
||||
<accessible description="" name="gnome-panel" role="77">
|
||||
<accessible description="" name="Bottom Expanded Edge Panel" role="24"/>
|
||||
<accessible description="" name="Top Expanded Edge Panel" role="24"/>
|
||||
</accessible>
|
||||
<accessible description="" name="nautilus" role="77">
|
||||
<accessible description="" name="Desktop" role="24"/>
|
||||
</accessible>
|
||||
<accessible description="" name="metacity" role="77"/>
|
||||
<accessible description="" name="tracker-applet" role="77"/>
|
||||
<accessible description="" name="empathy" role="77">
|
||||
<accessible description="" name="Contact List" role="24"/>
|
||||
</accessible>
|
||||
<accessible description="" name="nm-applet" role="77"/>
|
||||
<accessible description="" name="gnome-power-manager" role="77"/>
|
||||
<accessible description="" name="update-notifier" role="77"/>
|
||||
<accessible description="Firefox Application Accessible" name="Firefox" role="77">
|
||||
<accessible description="Firefox Application Accessible" name="Google Reader - Mozilla Firefox 3 Beta 5" role="24">
|
||||
<accessible description="" name="" role="34"/>
|
||||
<accessible description="" name="Strip originally conceived in conversation with Jeph Jacques. Soon to be a major motion picture." role="65"/>
|
||||
<accessible description="" name="" role="67">
|
||||
<accessible description="" name="" role="32">
|
||||
<accessible description="" name="" role="10"/>
|
||||
<accessible description="" name="" role="10"/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="34">
|
||||
<accessible description="" name="" role="68"/>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="34"/>
|
||||
<accessible description="" name="" role="34"/>
|
||||
<accessible description="" name="" role="34"/>
|
||||
<accessible description="" name="" role="34"/>
|
||||
<accessible description="" name="" role="34"/>
|
||||
<accessible description="" name="" role="65"/>
|
||||
<accessible description="" name="" role="65"/>
|
||||
<accessible description="" name="" role="64">
|
||||
<accessible description="" name="Application" role="35"/>
|
||||
<accessible description="" name="" role="51"/>
|
||||
<accessible description="" name="Activity Indicator" role="44"/>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="64">
|
||||
<accessible description="Go back one page" name="Back" role="44"/>
|
||||
<accessible description="Go forwards one page" name="Forward" role="44"/>
|
||||
<accessible description="" name="" role="44"/>
|
||||
<accessible description="Reload current page" name="Reload" role="44"/>
|
||||
<accessible description="Stop loading this page" name="Stop" role="44"/>
|
||||
<accessible description="chrome://ubufox/content/startpage.html" name="Home" role="44"/>
|
||||
<accessible description="" name="Location" role="78"/>
|
||||
<accessible description="" name="Search using Google" role="78"/>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="64">
|
||||
<accessible description="" name="Smart Bookmarks" role="44"/>
|
||||
<accessible description="" name="Getting Started" role="44"/>
|
||||
<accessible description="" name="Latest Headlines" role="44"/>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="40">
|
||||
<accessible description="" name="Google Reader" role="65"/>
|
||||
<accessible description="" name="" role="34"/>
|
||||
<accessible description="" name="" role="39"/>
|
||||
<accessible description="" name="" role="50"/>
|
||||
<accessible description="" name="" role="50">
|
||||
<accessible description="" name="Google Reader" role="29">
|
||||
<accessible description="" name="Google Reader" role="84">
|
||||
<accessible description="" name="Click here for ARIA enhanced Google Reader." role="70"/>
|
||||
<accessible description="" name="" role="87"/>
|
||||
<accessible description="" name="" role="87"/>
|
||||
<accessible description="" name="" role="87"/>
|
||||
<accessible description="" name="Google Reader" role="70"/>
|
||||
<accessible description="" name="" role="62"/>
|
||||
<accessible description="" name="" role="87"/>
|
||||
<accessible description="" name="" role="87">
|
||||
<accessible description="" name="" role="87"/>
|
||||
<accessible description="" name="" role="87"/>
|
||||
<accessible description="" name="" role="87">
|
||||
<accessible description="" name="" role="56"/>
|
||||
<accessible description="" name="" role="87">
|
||||
<accessible description="" name="" role="87">
|
||||
<accessible description="" name="" role="87">
|
||||
<accessible description="" name="" role="56"/>
|
||||
<accessible description="" name="" role="56">
|
||||
<accessible description="" name="" role="57">
|
||||
<accessible description="" name="" role="87">
|
||||
<accessible description="" name="" role="87"/>
|
||||
<accessible description="" name="" role="62"/>
|
||||
<accessible description="" name="Google News" role="70"/>
|
||||
<accessible description="" name="" role="87">
|
||||
<accessible description="" name="" role="87"/>
|
||||
<accessible description="" name="" role="87">
|
||||
<accessible description="" name="Reader and ARIA: A new way to read" role="70"/>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="87">
|
||||
<accessible description="" name="Official Google Reader Blog" role="70"/>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="87"/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="57"/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="87">
|
||||
<accessible description="" name="Google Reader Blog" role="70"/>
|
||||
<accessible description="" name="Discuss" role="70"/>
|
||||
<accessible description="" name="Privacy Policy" role="70"/>
|
||||
<accessible description="" name="Help" role="70"/>
|
||||
<accessible description="" name="" role="87"/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="87">
|
||||
<accessible description="" name="" role="28"/>
|
||||
<accessible description="" name="" role="28"/>
|
||||
<accessible description="" name="" role="28"/>
|
||||
<accessible description="" name="" role="28"/>
|
||||
<accessible description="" name="" role="28"/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible description="" name="" role="34"/>
|
||||
<accessible description="" name="" role="55">
|
||||
<accessible description="" name="Done" role="44"/>
|
||||
<accessible description="" name="" role="44"/>
|
||||
</accessible>
|
||||
</accessible>
|
||||
</accessible>
|
||||
<accessible description="" name="gnome-terminal" role="77">
|
||||
<accessible description="" name="mdoff@silver-wind: ~/Projects/accessibility/dbus-atspi/test" role="24"/>
|
||||
</accessible>
|
||||
</accessible>
|
|
@ -0,0 +1,40 @@
|
|||
check_LTLIBRARIES = libdummyatk.la
|
||||
|
||||
libdummyatk_la_CFLAGS = $(ATK_CFLAGS) \
|
||||
-I$(top_srcdir)
|
||||
|
||||
libdummyatk_la_LDFLAGS = -no-undefined \
|
||||
-module \
|
||||
-avoid-version
|
||||
|
||||
libdummyatk_la_LIBADD = $(ATK_LIBS)
|
||||
|
||||
libdummyatk_la_SOURCES = my-atk-action.c \
|
||||
my-atk-action.h \
|
||||
my-atk-component.c \
|
||||
my-atk-component.h \
|
||||
my-atk-document.c \
|
||||
my-atk-document.h \
|
||||
my-atk-hyperlink.c \
|
||||
my-atk-hyperlink.h \
|
||||
my-atk-hypertext.c \
|
||||
my-atk-hypertext.h \
|
||||
my-atk-object.c \
|
||||
my-atk-object.h \
|
||||
my-atk-selection.c \
|
||||
my-atk-selection.h \
|
||||
my-atk-streamable-content.c \
|
||||
my-atk-streamable-content.h \
|
||||
my-atk-table.c \
|
||||
my-atk-table.h \
|
||||
my-atk-text.c \
|
||||
my-atk-text.h \
|
||||
my-atk-value.c \
|
||||
my-atk-value.h \
|
||||
my-atk.h \
|
||||
resources_storage.c \
|
||||
resources_storage.h \
|
||||
useful_functions.c \
|
||||
useful_functions.h \
|
||||
user_marshal.c \
|
||||
user_marshal.h
|
|
@ -0,0 +1,834 @@
|
|||
# Makefile.in generated by automake 1.16.1 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
am__is_gnu_make = { \
|
||||
if test -z '$(MAKELEVEL)'; then \
|
||||
false; \
|
||||
elif test -n '$(MAKE_HOST)'; then \
|
||||
true; \
|
||||
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
||||
true; \
|
||||
else \
|
||||
false; \
|
||||
fi; \
|
||||
}
|
||||
am__make_running_with_option = \
|
||||
case $${target_option-} in \
|
||||
?) ;; \
|
||||
*) echo "am__make_running_with_option: internal error: invalid" \
|
||||
"target option '$${target_option-}' specified" >&2; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
has_opt=no; \
|
||||
sane_makeflags=$$MAKEFLAGS; \
|
||||
if $(am__is_gnu_make); then \
|
||||
sane_makeflags=$$MFLAGS; \
|
||||
else \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
fi; \
|
||||
skip_next=no; \
|
||||
strip_trailopt () \
|
||||
{ \
|
||||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
||||
}; \
|
||||
for flg in $$sane_makeflags; do \
|
||||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
||||
case $$flg in \
|
||||
*=*|--*) continue;; \
|
||||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
||||
-*I?*) strip_trailopt 'I';; \
|
||||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
||||
-*O?*) strip_trailopt 'O';; \
|
||||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
||||
-*l?*) strip_trailopt 'l';; \
|
||||
-[dEDm]) skip_next=yes;; \
|
||||
-[JT]) skip_next=yes;; \
|
||||
esac; \
|
||||
case $$flg in \
|
||||
*$$target_option*) has_opt=yes; break;; \
|
||||
esac; \
|
||||
done; \
|
||||
test $$has_opt = yes
|
||||
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
|
||||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
subdir = tests/dummyatk
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__DEPENDENCIES_1 =
|
||||
libdummyatk_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
|
||||
am_libdummyatk_la_OBJECTS = libdummyatk_la-my-atk-action.lo \
|
||||
libdummyatk_la-my-atk-component.lo \
|
||||
libdummyatk_la-my-atk-document.lo \
|
||||
libdummyatk_la-my-atk-hyperlink.lo \
|
||||
libdummyatk_la-my-atk-hypertext.lo \
|
||||
libdummyatk_la-my-atk-object.lo \
|
||||
libdummyatk_la-my-atk-selection.lo \
|
||||
libdummyatk_la-my-atk-streamable-content.lo \
|
||||
libdummyatk_la-my-atk-table.lo libdummyatk_la-my-atk-text.lo \
|
||||
libdummyatk_la-my-atk-value.lo \
|
||||
libdummyatk_la-resources_storage.lo \
|
||||
libdummyatk_la-useful_functions.lo \
|
||||
libdummyatk_la-user_marshal.lo
|
||||
libdummyatk_la_OBJECTS = $(am_libdummyatk_la_OBJECTS)
|
||||
AM_V_lt = $(am__v_lt_@AM_V@)
|
||||
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
||||
am__v_lt_0 = --silent
|
||||
am__v_lt_1 =
|
||||
libdummyatk_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
|
||||
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
|
||||
$(libdummyatk_la_CFLAGS) $(CFLAGS) $(libdummyatk_la_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
am__v_P_1 = :
|
||||
AM_V_GEN = $(am__v_GEN_@AM_V@)
|
||||
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
am__v_GEN_1 =
|
||||
AM_V_at = $(am__v_at_@AM_V@)
|
||||
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
|
||||
am__v_at_0 = @
|
||||
am__v_at_1 =
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
|
||||
am__maybe_remake_depfiles = depfiles
|
||||
am__depfiles_remade = ./$(DEPDIR)/libdummyatk_la-my-atk-action.Plo \
|
||||
./$(DEPDIR)/libdummyatk_la-my-atk-component.Plo \
|
||||
./$(DEPDIR)/libdummyatk_la-my-atk-document.Plo \
|
||||
./$(DEPDIR)/libdummyatk_la-my-atk-hyperlink.Plo \
|
||||
./$(DEPDIR)/libdummyatk_la-my-atk-hypertext.Plo \
|
||||
./$(DEPDIR)/libdummyatk_la-my-atk-object.Plo \
|
||||
./$(DEPDIR)/libdummyatk_la-my-atk-selection.Plo \
|
||||
./$(DEPDIR)/libdummyatk_la-my-atk-streamable-content.Plo \
|
||||
./$(DEPDIR)/libdummyatk_la-my-atk-table.Plo \
|
||||
./$(DEPDIR)/libdummyatk_la-my-atk-text.Plo \
|
||||
./$(DEPDIR)/libdummyatk_la-my-atk-value.Plo \
|
||||
./$(DEPDIR)/libdummyatk_la-resources_storage.Plo \
|
||||
./$(DEPDIR)/libdummyatk_la-useful_functions.Plo \
|
||||
./$(DEPDIR)/libdummyatk_la-user_marshal.Plo
|
||||
am__mv = mv -f
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
|
||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||
$(AM_CFLAGS) $(CFLAGS)
|
||||
AM_V_CC = $(am__v_CC_@AM_V@)
|
||||
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
|
||||
am__v_CC_0 = @echo " CC " $@;
|
||||
am__v_CC_1 =
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
|
||||
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
|
||||
am__v_CCLD_0 = @echo " CCLD " $@;
|
||||
am__v_CCLD_1 =
|
||||
SOURCES = $(libdummyatk_la_SOURCES)
|
||||
DIST_SOURCES = $(libdummyatk_la_SOURCES)
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||
# Read a list of newline-separated strings from the standard input,
|
||||
# and print each of them once, without duplicates. Input order is
|
||||
# *not* preserved.
|
||||
am__uniquify_input = $(AWK) '\
|
||||
BEGIN { nonempty = 0; } \
|
||||
{ items[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in items) print i; }; } \
|
||||
'
|
||||
# Make sure the list of sources is unique. This is necessary because,
|
||||
# e.g., the same source file might be shared among _SOURCES variables
|
||||
# for different programs/libraries.
|
||||
am__define_uniq_tagged_files = \
|
||||
list='$(am__tagged_files)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | $(am__uniquify_input)`
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
AR = @AR@
|
||||
ATK_CFLAGS = @ATK_CFLAGS@
|
||||
ATK_LIBS = @ATK_LIBS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DBUS_CFLAGS = @DBUS_CFLAGS@
|
||||
DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
|
||||
DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
|
||||
DBUS_LIBS = @DBUS_LIBS@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||
GLIB_LIBS = @GLIB_LIBS@
|
||||
GMODULE_CFLAGS = @GMODULE_CFLAGS@
|
||||
GMODULE_LIBS = @GMODULE_LIBS@
|
||||
GOBJ_CFLAGS = @GOBJ_CFLAGS@
|
||||
GOBJ_LIBS = @GOBJ_LIBS@
|
||||
GREP = @GREP@
|
||||
GTK_CFLAGS = @GTK_CFLAGS@
|
||||
GTK_LIBS = @GTK_LIBS@
|
||||
GTK_MODULE_DIR = @GTK_MODULE_DIR@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIB_XML_CFLAGS = @LIB_XML_CFLAGS@
|
||||
LIB_XML_LIBS = @LIB_XML_LIBS@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
LT_AGE = @LT_AGE@
|
||||
LT_CURRENT = @LT_CURRENT@
|
||||
LT_RELEASE = @LT_RELEASE@
|
||||
LT_REVISION = @LT_REVISION@
|
||||
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
|
||||
LT_VERSION_INFO = @LT_VERSION_INFO@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PKG_CONFIG = @PKG_CONFIG@
|
||||
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
|
||||
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
|
||||
PYGOBJ_CFLAGS = @PYGOBJ_CFLAGS@
|
||||
PYGOBJ_LIBS = @PYGOBJ_LIBS@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
|
||||
PYTHON_PLATFORM = @PYTHON_PLATFORM@
|
||||
PYTHON_PREFIX = @PYTHON_PREFIX@
|
||||
PYTHON_VERSION = @PYTHON_VERSION@
|
||||
RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
XMKMF = @XMKMF@
|
||||
X_CFLAGS = @X_CFLAGS@
|
||||
X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||
X_LIBS = @X_LIBS@
|
||||
X_PRE_LIBS = @X_PRE_LIBS@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
pkgpyexecdir = @pkgpyexecdir@
|
||||
pkgpythondir = @pkgpythondir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
pyexecdir = @pyexecdir@
|
||||
pythondir = @pythondir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
check_LTLIBRARIES = libdummyatk.la
|
||||
libdummyatk_la_CFLAGS = $(ATK_CFLAGS) \
|
||||
-I$(top_srcdir)
|
||||
|
||||
libdummyatk_la_LDFLAGS = -no-undefined \
|
||||
-module \
|
||||
-avoid-version
|
||||
|
||||
libdummyatk_la_LIBADD = $(ATK_LIBS)
|
||||
libdummyatk_la_SOURCES = my-atk-action.c \
|
||||
my-atk-action.h \
|
||||
my-atk-component.c \
|
||||
my-atk-component.h \
|
||||
my-atk-document.c \
|
||||
my-atk-document.h \
|
||||
my-atk-hyperlink.c \
|
||||
my-atk-hyperlink.h \
|
||||
my-atk-hypertext.c \
|
||||
my-atk-hypertext.h \
|
||||
my-atk-object.c \
|
||||
my-atk-object.h \
|
||||
my-atk-selection.c \
|
||||
my-atk-selection.h \
|
||||
my-atk-streamable-content.c \
|
||||
my-atk-streamable-content.h \
|
||||
my-atk-table.c \
|
||||
my-atk-table.h \
|
||||
my-atk-text.c \
|
||||
my-atk-text.h \
|
||||
my-atk-value.c \
|
||||
my-atk-value.h \
|
||||
my-atk.h \
|
||||
resources_storage.c \
|
||||
resources_storage.h \
|
||||
useful_functions.c \
|
||||
useful_functions.h \
|
||||
user_marshal.c \
|
||||
user_marshal.h
|
||||
|
||||
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 ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/dummyatk/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign tests/dummyatk/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__maybe_remake_depfiles)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
|
||||
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
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
clean-checkLTLIBRARIES:
|
||||
-test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES)
|
||||
@list='$(check_LTLIBRARIES)'; \
|
||||
locs=`for p in $$list; do echo $$p; done | \
|
||||
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
|
||||
sort -u`; \
|
||||
test -z "$$locs" || { \
|
||||
echo rm -f $${locs}; \
|
||||
rm -f $${locs}; \
|
||||
}
|
||||
|
||||
libdummyatk.la: $(libdummyatk_la_OBJECTS) $(libdummyatk_la_DEPENDENCIES) $(EXTRA_libdummyatk_la_DEPENDENCIES)
|
||||
$(AM_V_CCLD)$(libdummyatk_la_LINK) $(libdummyatk_la_OBJECTS) $(libdummyatk_la_LIBADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdummyatk_la-my-atk-action.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdummyatk_la-my-atk-component.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdummyatk_la-my-atk-document.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdummyatk_la-my-atk-hyperlink.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdummyatk_la-my-atk-hypertext.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdummyatk_la-my-atk-object.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdummyatk_la-my-atk-selection.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdummyatk_la-my-atk-streamable-content.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdummyatk_la-my-atk-table.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdummyatk_la-my-atk-text.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdummyatk_la-my-atk-value.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdummyatk_la-resources_storage.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdummyatk_la-useful_functions.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdummyatk_la-user_marshal.Plo@am__quote@ # am--include-marker
|
||||
|
||||
$(am__depfiles_remade):
|
||||
@$(MKDIR_P) $(@D)
|
||||
@echo '# dummy' >$@-t && $(am__mv) $@-t $@
|
||||
|
||||
am--depfiles: $(am__depfiles_remade)
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
libdummyatk_la-my-atk-action.lo: my-atk-action.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -MT libdummyatk_la-my-atk-action.lo -MD -MP -MF $(DEPDIR)/libdummyatk_la-my-atk-action.Tpo -c -o libdummyatk_la-my-atk-action.lo `test -f 'my-atk-action.c' || echo '$(srcdir)/'`my-atk-action.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdummyatk_la-my-atk-action.Tpo $(DEPDIR)/libdummyatk_la-my-atk-action.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='my-atk-action.c' object='libdummyatk_la-my-atk-action.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -c -o libdummyatk_la-my-atk-action.lo `test -f 'my-atk-action.c' || echo '$(srcdir)/'`my-atk-action.c
|
||||
|
||||
libdummyatk_la-my-atk-component.lo: my-atk-component.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -MT libdummyatk_la-my-atk-component.lo -MD -MP -MF $(DEPDIR)/libdummyatk_la-my-atk-component.Tpo -c -o libdummyatk_la-my-atk-component.lo `test -f 'my-atk-component.c' || echo '$(srcdir)/'`my-atk-component.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdummyatk_la-my-atk-component.Tpo $(DEPDIR)/libdummyatk_la-my-atk-component.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='my-atk-component.c' object='libdummyatk_la-my-atk-component.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -c -o libdummyatk_la-my-atk-component.lo `test -f 'my-atk-component.c' || echo '$(srcdir)/'`my-atk-component.c
|
||||
|
||||
libdummyatk_la-my-atk-document.lo: my-atk-document.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -MT libdummyatk_la-my-atk-document.lo -MD -MP -MF $(DEPDIR)/libdummyatk_la-my-atk-document.Tpo -c -o libdummyatk_la-my-atk-document.lo `test -f 'my-atk-document.c' || echo '$(srcdir)/'`my-atk-document.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdummyatk_la-my-atk-document.Tpo $(DEPDIR)/libdummyatk_la-my-atk-document.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='my-atk-document.c' object='libdummyatk_la-my-atk-document.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -c -o libdummyatk_la-my-atk-document.lo `test -f 'my-atk-document.c' || echo '$(srcdir)/'`my-atk-document.c
|
||||
|
||||
libdummyatk_la-my-atk-hyperlink.lo: my-atk-hyperlink.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -MT libdummyatk_la-my-atk-hyperlink.lo -MD -MP -MF $(DEPDIR)/libdummyatk_la-my-atk-hyperlink.Tpo -c -o libdummyatk_la-my-atk-hyperlink.lo `test -f 'my-atk-hyperlink.c' || echo '$(srcdir)/'`my-atk-hyperlink.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdummyatk_la-my-atk-hyperlink.Tpo $(DEPDIR)/libdummyatk_la-my-atk-hyperlink.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='my-atk-hyperlink.c' object='libdummyatk_la-my-atk-hyperlink.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -c -o libdummyatk_la-my-atk-hyperlink.lo `test -f 'my-atk-hyperlink.c' || echo '$(srcdir)/'`my-atk-hyperlink.c
|
||||
|
||||
libdummyatk_la-my-atk-hypertext.lo: my-atk-hypertext.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -MT libdummyatk_la-my-atk-hypertext.lo -MD -MP -MF $(DEPDIR)/libdummyatk_la-my-atk-hypertext.Tpo -c -o libdummyatk_la-my-atk-hypertext.lo `test -f 'my-atk-hypertext.c' || echo '$(srcdir)/'`my-atk-hypertext.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdummyatk_la-my-atk-hypertext.Tpo $(DEPDIR)/libdummyatk_la-my-atk-hypertext.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='my-atk-hypertext.c' object='libdummyatk_la-my-atk-hypertext.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -c -o libdummyatk_la-my-atk-hypertext.lo `test -f 'my-atk-hypertext.c' || echo '$(srcdir)/'`my-atk-hypertext.c
|
||||
|
||||
libdummyatk_la-my-atk-object.lo: my-atk-object.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -MT libdummyatk_la-my-atk-object.lo -MD -MP -MF $(DEPDIR)/libdummyatk_la-my-atk-object.Tpo -c -o libdummyatk_la-my-atk-object.lo `test -f 'my-atk-object.c' || echo '$(srcdir)/'`my-atk-object.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdummyatk_la-my-atk-object.Tpo $(DEPDIR)/libdummyatk_la-my-atk-object.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='my-atk-object.c' object='libdummyatk_la-my-atk-object.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -c -o libdummyatk_la-my-atk-object.lo `test -f 'my-atk-object.c' || echo '$(srcdir)/'`my-atk-object.c
|
||||
|
||||
libdummyatk_la-my-atk-selection.lo: my-atk-selection.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -MT libdummyatk_la-my-atk-selection.lo -MD -MP -MF $(DEPDIR)/libdummyatk_la-my-atk-selection.Tpo -c -o libdummyatk_la-my-atk-selection.lo `test -f 'my-atk-selection.c' || echo '$(srcdir)/'`my-atk-selection.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdummyatk_la-my-atk-selection.Tpo $(DEPDIR)/libdummyatk_la-my-atk-selection.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='my-atk-selection.c' object='libdummyatk_la-my-atk-selection.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -c -o libdummyatk_la-my-atk-selection.lo `test -f 'my-atk-selection.c' || echo '$(srcdir)/'`my-atk-selection.c
|
||||
|
||||
libdummyatk_la-my-atk-streamable-content.lo: my-atk-streamable-content.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -MT libdummyatk_la-my-atk-streamable-content.lo -MD -MP -MF $(DEPDIR)/libdummyatk_la-my-atk-streamable-content.Tpo -c -o libdummyatk_la-my-atk-streamable-content.lo `test -f 'my-atk-streamable-content.c' || echo '$(srcdir)/'`my-atk-streamable-content.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdummyatk_la-my-atk-streamable-content.Tpo $(DEPDIR)/libdummyatk_la-my-atk-streamable-content.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='my-atk-streamable-content.c' object='libdummyatk_la-my-atk-streamable-content.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -c -o libdummyatk_la-my-atk-streamable-content.lo `test -f 'my-atk-streamable-content.c' || echo '$(srcdir)/'`my-atk-streamable-content.c
|
||||
|
||||
libdummyatk_la-my-atk-table.lo: my-atk-table.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -MT libdummyatk_la-my-atk-table.lo -MD -MP -MF $(DEPDIR)/libdummyatk_la-my-atk-table.Tpo -c -o libdummyatk_la-my-atk-table.lo `test -f 'my-atk-table.c' || echo '$(srcdir)/'`my-atk-table.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdummyatk_la-my-atk-table.Tpo $(DEPDIR)/libdummyatk_la-my-atk-table.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='my-atk-table.c' object='libdummyatk_la-my-atk-table.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -c -o libdummyatk_la-my-atk-table.lo `test -f 'my-atk-table.c' || echo '$(srcdir)/'`my-atk-table.c
|
||||
|
||||
libdummyatk_la-my-atk-text.lo: my-atk-text.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -MT libdummyatk_la-my-atk-text.lo -MD -MP -MF $(DEPDIR)/libdummyatk_la-my-atk-text.Tpo -c -o libdummyatk_la-my-atk-text.lo `test -f 'my-atk-text.c' || echo '$(srcdir)/'`my-atk-text.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdummyatk_la-my-atk-text.Tpo $(DEPDIR)/libdummyatk_la-my-atk-text.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='my-atk-text.c' object='libdummyatk_la-my-atk-text.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -c -o libdummyatk_la-my-atk-text.lo `test -f 'my-atk-text.c' || echo '$(srcdir)/'`my-atk-text.c
|
||||
|
||||
libdummyatk_la-my-atk-value.lo: my-atk-value.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -MT libdummyatk_la-my-atk-value.lo -MD -MP -MF $(DEPDIR)/libdummyatk_la-my-atk-value.Tpo -c -o libdummyatk_la-my-atk-value.lo `test -f 'my-atk-value.c' || echo '$(srcdir)/'`my-atk-value.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdummyatk_la-my-atk-value.Tpo $(DEPDIR)/libdummyatk_la-my-atk-value.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='my-atk-value.c' object='libdummyatk_la-my-atk-value.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -c -o libdummyatk_la-my-atk-value.lo `test -f 'my-atk-value.c' || echo '$(srcdir)/'`my-atk-value.c
|
||||
|
||||
libdummyatk_la-resources_storage.lo: resources_storage.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -MT libdummyatk_la-resources_storage.lo -MD -MP -MF $(DEPDIR)/libdummyatk_la-resources_storage.Tpo -c -o libdummyatk_la-resources_storage.lo `test -f 'resources_storage.c' || echo '$(srcdir)/'`resources_storage.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdummyatk_la-resources_storage.Tpo $(DEPDIR)/libdummyatk_la-resources_storage.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='resources_storage.c' object='libdummyatk_la-resources_storage.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -c -o libdummyatk_la-resources_storage.lo `test -f 'resources_storage.c' || echo '$(srcdir)/'`resources_storage.c
|
||||
|
||||
libdummyatk_la-useful_functions.lo: useful_functions.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -MT libdummyatk_la-useful_functions.lo -MD -MP -MF $(DEPDIR)/libdummyatk_la-useful_functions.Tpo -c -o libdummyatk_la-useful_functions.lo `test -f 'useful_functions.c' || echo '$(srcdir)/'`useful_functions.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdummyatk_la-useful_functions.Tpo $(DEPDIR)/libdummyatk_la-useful_functions.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='useful_functions.c' object='libdummyatk_la-useful_functions.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -c -o libdummyatk_la-useful_functions.lo `test -f 'useful_functions.c' || echo '$(srcdir)/'`useful_functions.c
|
||||
|
||||
libdummyatk_la-user_marshal.lo: user_marshal.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -MT libdummyatk_la-user_marshal.lo -MD -MP -MF $(DEPDIR)/libdummyatk_la-user_marshal.Tpo -c -o libdummyatk_la-user_marshal.lo `test -f 'user_marshal.c' || echo '$(srcdir)/'`user_marshal.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libdummyatk_la-user_marshal.Tpo $(DEPDIR)/libdummyatk_la-user_marshal.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='user_marshal.c' object='libdummyatk_la-user_marshal.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdummyatk_la_CFLAGS) $(CFLAGS) -c -o libdummyatk_la-user_marshal.lo `test -f 'user_marshal.c' || echo '$(srcdir)/'`user_marshal.c
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
ID: $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||
tags: tags-am
|
||||
TAGS: tags
|
||||
|
||||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
$(am__define_uniq_tagged_files); \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: ctags-am
|
||||
|
||||
CTAGS: ctags
|
||||
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
cscopelist: cscopelist-am
|
||||
|
||||
cscopelist-am: $(am__tagged_files)
|
||||
list='$(am__tagged_files)'; \
|
||||
case "$(srcdir)" in \
|
||||
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
|
||||
*) sdir=$(subdir)/$(srcdir) ;; \
|
||||
esac; \
|
||||
for i in $$list; do \
|
||||
if test -f "$$i"; then \
|
||||
echo "$(subdir)/$$i"; \
|
||||
else \
|
||||
echo "$$sdir/$$i"; \
|
||||
fi; \
|
||||
done >> $(top_builddir)/cscope.files
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||
|
||||
distdir-am: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
$(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES)
|
||||
check: check-am
|
||||
all-am: Makefile
|
||||
installdirs:
|
||||
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:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-checkLTLIBRARIES clean-generic clean-libtool \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-action.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-component.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-document.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-hyperlink.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-hypertext.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-object.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-selection.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-streamable-content.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-table.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-text.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-value.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-resources_storage.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-useful_functions.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-user_marshal.Plo
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-action.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-component.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-document.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-hyperlink.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-hypertext.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-object.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-selection.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-streamable-content.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-table.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-text.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-my-atk-value.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-resources_storage.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-useful_functions.Plo
|
||||
-rm -f ./$(DEPDIR)/libdummyatk_la-user_marshal.Plo
|
||||
-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:
|
||||
|
||||
.MAKE: check-am install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
|
||||
clean-checkLTLIBRARIES clean-generic clean-libtool \
|
||||
cscopelist-am ctags ctags-am 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-dvi install-dvi-am \
|
||||
install-exec install-exec-am install-html install-html-am \
|
||||
install-info install-info-am install-man install-pdf \
|
||||
install-pdf-am install-ps install-ps-am install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags tags-am uninstall uninstall-am
|
||||
|
||||
.PRECIOUS: Makefile
|
||||
|
||||
|
||||
# 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,241 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <atk/atk.h>
|
||||
|
||||
#include "my-atk-object.h"
|
||||
#include "my-atk-action.h"
|
||||
|
||||
static GObjectClass *parent_class = NULL;
|
||||
//implementation of the interface
|
||||
static gboolean my_atk_action_do_action(AtkAction *action, gint i)
|
||||
{
|
||||
MyAtkAction *self = (MyAtkAction*)action;
|
||||
gboolean result = (i>=0) && (i < self->n);
|
||||
self->last_performed_action = result? i : -1;
|
||||
return result;
|
||||
}
|
||||
static gint my_atk_action_get_n_actions(AtkAction *action)
|
||||
{
|
||||
MyAtkAction *self = (MyAtkAction*)action;
|
||||
return self->n;
|
||||
}
|
||||
static const gchar* my_atk_action_get_description(AtkAction *action, gint i)
|
||||
{
|
||||
MyAtkAction *self = (MyAtkAction*)action;
|
||||
if((i>=0) && (i<self->n))
|
||||
{
|
||||
return self->actions[i].description;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("get_description: Wrong index.\n");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
static const gchar* my_atk_action_get_name(AtkAction *action, gint i)
|
||||
{
|
||||
MyAtkAction *self = (MyAtkAction*)action;
|
||||
if((i >= 0) && (i < self->n))
|
||||
{
|
||||
return self->actions[i].name;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("get_name: Wrong index.\n");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
static const gchar* my_atk_action_get_localized_name(AtkAction *action, gint i)
|
||||
{
|
||||
return my_atk_action_get_name(action,i);
|
||||
}
|
||||
|
||||
static const gchar* my_atk_action_get_keybinding(AtkAction *action, gint i)
|
||||
{
|
||||
MyAtkAction *self = (MyAtkAction*)action;
|
||||
if((i >= 0) && (i < self->n))
|
||||
{
|
||||
gchar* keyb = self->actions[i].keybinding;
|
||||
if(keyb == NULL || keybinding_note_define == NULL)
|
||||
{
|
||||
//anywhere(if action has keybinding or not) NULL will return
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
//verify, if string mean "no keybinding"
|
||||
return strcmp(keyb, keybinding_note_define) != 0 ? keyb : NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("get_keybinding: Wrong index.\n");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
static gboolean my_atk_action_set_description(AtkAction *action, gint i, const gchar *desc)
|
||||
{
|
||||
MyAtkAction *self = (MyAtkAction*)action;
|
||||
|
||||
if(!((i >= 0) && (i < self->n)) )
|
||||
{
|
||||
//index out of range, but this is not application error according documentation
|
||||
return FALSE;
|
||||
}
|
||||
//index in correct range
|
||||
if(self->actions[i].description == desc)
|
||||
{
|
||||
//self assignment - return immediately
|
||||
return TRUE;
|
||||
}
|
||||
if(self->actions[i].description != NULL)
|
||||
{
|
||||
//free old value of description if it is not NULL
|
||||
free(self->actions[i].description);
|
||||
}
|
||||
if(desc != NULL)
|
||||
{
|
||||
//dump new value of description if it is not NULL
|
||||
self->actions[i].description = (gchar*)strdup((const char*)desc);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
//////////
|
||||
static void my_atk_action_instance_init(GTypeInstance *instance, gpointer g_class)
|
||||
{
|
||||
int i;
|
||||
MyAtkAction *self = (MyAtkAction*)instance;
|
||||
self->n = DEFAULT_NUMBER_ACTIONS;
|
||||
self->actions = g_new(struct OneAction, self->n);
|
||||
if(self->actions == NULL)
|
||||
{
|
||||
self->n = 0;
|
||||
return;
|
||||
}
|
||||
//init fields of action 0 with values which differ from others actions
|
||||
self->actions[0].name = (gchar*)strdup(FIRST_ACTION_NAME);
|
||||
self->actions[0].description = (gchar*)strdup(FIRST_ACTION_DESCRIPTION);
|
||||
self->actions[0].keybinding = (gchar*)strdup(FIRST_ACTION_KEYBINDING);
|
||||
|
||||
for(i = 1; i < self->n; i++)
|
||||
{
|
||||
self->actions[i].name = (gchar*)strdup(DEFAULT_ACTION_NAME);
|
||||
self->actions[i].description = (gchar*)strdup(DEFAULT_ACTION_DESCRIPTION);
|
||||
self->actions[i].keybinding = g_strdup_printf("%d", i);
|
||||
}
|
||||
self->disposed = FALSE;
|
||||
self->last_performed_action = -1;
|
||||
}
|
||||
|
||||
static void
|
||||
my_atk_action_interface_init(gpointer g_iface, gpointer iface_data)
|
||||
{
|
||||
AtkActionIface *klass = (AtkActionIface *)g_iface;
|
||||
|
||||
klass->do_action = my_atk_action_do_action;
|
||||
klass->get_n_actions = my_atk_action_get_n_actions;
|
||||
klass->get_description = my_atk_action_get_description;
|
||||
klass->get_name = my_atk_action_get_name;
|
||||
klass->get_localized_name = my_atk_action_get_localized_name;
|
||||
klass->get_keybinding = my_atk_action_get_keybinding;
|
||||
klass->set_description = my_atk_action_set_description;
|
||||
}
|
||||
|
||||
static void
|
||||
my_atk_action_dispose(GObject *obj)
|
||||
{
|
||||
MyAtkAction *self = (MyAtkAction*)obj;
|
||||
|
||||
if(self->disposed)
|
||||
{
|
||||
return;
|
||||
}
|
||||
self->disposed = TRUE;
|
||||
|
||||
G_OBJECT_CLASS(parent_class)->dispose(obj);
|
||||
}
|
||||
|
||||
static void
|
||||
my_atk_action_finalize(GObject *obj)
|
||||
{
|
||||
MyAtkAction *self = (MyAtkAction*)obj;
|
||||
int i;
|
||||
|
||||
for(i = 0; i < self->n; i++)
|
||||
{
|
||||
struct OneAction oneAction = self->actions[i];
|
||||
if(oneAction.name != NULL)
|
||||
free(oneAction.name);
|
||||
if(oneAction.description != NULL)
|
||||
free(oneAction.description);
|
||||
if(oneAction.keybinding != NULL)
|
||||
free(oneAction.keybinding);
|
||||
}
|
||||
if(self->actions != NULL)
|
||||
g_free(self->actions);
|
||||
|
||||
G_OBJECT_CLASS(parent_class)->finalize(obj);
|
||||
}
|
||||
static void
|
||||
my_atk_action_class_init (gpointer g_class, gpointer g_class_data)
|
||||
{
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS(g_class);
|
||||
MyAtkActionClass *klass = MY_ATK_ACTION_CLASS (g_class);
|
||||
|
||||
gobject_class->dispose = my_atk_action_dispose;
|
||||
gobject_class->finalize = my_atk_action_finalize;
|
||||
|
||||
parent_class = g_type_class_peek_parent(klass);
|
||||
}
|
||||
GType my_atk_action_get_type(void)
|
||||
{
|
||||
static GType type = 0;
|
||||
if(type == 0)
|
||||
{
|
||||
static const GTypeInfo info =
|
||||
{
|
||||
sizeof (MyAtkActionClass),
|
||||
NULL, /* base_init */
|
||||
NULL, /* base_finalize */
|
||||
my_atk_action_class_init, /* class_init */
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (MyAtkAction),
|
||||
0, /* n_preallocs */
|
||||
my_atk_action_instance_init /* instance_init */
|
||||
};
|
||||
|
||||
static const GInterfaceInfo iface_info =
|
||||
{
|
||||
(GInterfaceInitFunc) my_atk_action_interface_init, /* interface_init */
|
||||
NULL, /* interface_finalize */
|
||||
NULL /* interface_data */
|
||||
};
|
||||
type = g_type_register_static (MY_TYPE_ATK_OBJECT,
|
||||
"MyAtkAction",
|
||||
&info, 0);
|
||||
g_type_add_interface_static (type,
|
||||
ATK_TYPE_ACTION,
|
||||
&iface_info);
|
||||
}
|
||||
return type;
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef MY_ATK_ACTION_H
|
||||
#define MY_ATK_ACTION_H
|
||||
//Object, which implement interface AtkAction(all functions)
|
||||
#include <glib.h>
|
||||
#include <glib-object.h>
|
||||
#include <atk/atk.h>
|
||||
|
||||
#include "my-atk-object.h"
|
||||
|
||||
//declarations
|
||||
#define MY_TYPE_ATK_ACTION (my_atk_action_get_type ())
|
||||
#define MY_ATK_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_ACTION, MyAtkAction))
|
||||
#define MY_ATK_ACTION_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_ACTION, MyAtkActionClass))
|
||||
#define MY_IS_ATK_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_ACTION))
|
||||
#define MY_IS_ATK_ACTION_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_ACTION))
|
||||
#define MY_ATK_ACTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_ACTION, MyAtkActionClass))
|
||||
|
||||
static const gchar* keybinding_note_define = "none";
|
||||
|
||||
#define FIRST_ACTION_NAME "First action"
|
||||
#define FIRST_ACTION_DESCRIPTION "First action performed"
|
||||
#define FIRST_ACTION_KEYBINDING "0"
|
||||
|
||||
#define DEFAULT_NUMBER_ACTIONS 10
|
||||
#define DEFAULT_ACTION_NAME "Action"
|
||||
#define DEFAULT_ACTION_DESCRIPTION "Description of action"
|
||||
#define DEFAULT_ACTION_KEYBINDING keybinding_note_define
|
||||
|
||||
|
||||
//for external using
|
||||
#define LAST_PERFORMED_ACTION(myAtkAction) (MY_ATK_ACTION(myAtkAction)->last_performed_action)
|
||||
#define CLEAR_LAST_PERFOMED_ACTION(myAtkAction) (MY_ATK_ACTION(myAtkAction)->last_performed_action = -1
|
||||
|
||||
typedef struct _MyAtkAction MyAtkAction;
|
||||
typedef struct _MyAtkActionClass MyAtkActionClass;
|
||||
|
||||
struct _MyAtkAction
|
||||
{
|
||||
MyAtkObject parent;
|
||||
|
||||
gboolean disposed;
|
||||
struct OneAction
|
||||
{
|
||||
gchar *name;
|
||||
gchar *description;
|
||||
gchar *keybinding;
|
||||
}*actions;
|
||||
gint n;
|
||||
gint last_performed_action;//this field is changed when perfoms action
|
||||
};
|
||||
|
||||
struct _MyAtkActionClass
|
||||
{
|
||||
MyAtkObjectClass parent;
|
||||
};
|
||||
GType my_atk_action_get_type(void);
|
||||
|
||||
#endif /*MY_ATK_ACTION_H*/
|
|
@ -0,0 +1,422 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <atk/atk.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include "my-atk-object.h"
|
||||
#include "my-atk-component.h"
|
||||
|
||||
//*************************implementation***********************
|
||||
static MyAtkObjectClass *component_parent_class = NULL;
|
||||
//current focus object
|
||||
static AtkComponent* focus_object = NULL;
|
||||
|
||||
static guint focus_signal_id = 0;
|
||||
/*
|
||||
* Because of implementation of AtkUtils, we need to ensure that list of focus_trackers
|
||||
* is not empty. Otherwise function atk_focus_tracker_notify will not change focus.
|
||||
*/
|
||||
static guint focus_tracker_id = 0;
|
||||
static void my_event_listener(AtkObject* obj)
|
||||
{
|
||||
//simply exist for register as focus_tracker
|
||||
}
|
||||
/*
|
||||
* If this flag is TRUE, then focus cannot be changed until someone clears the flag
|
||||
* via my_atk_component_set_modal(FALSE).
|
||||
*/
|
||||
static gboolean is_modal = FALSE;
|
||||
//for debug
|
||||
void print_extent(AtkRectangle *extent)
|
||||
{
|
||||
printf("{%d,%d,%d,%d}", extent->x, extent->y, extent->width, extent->height);
|
||||
}
|
||||
//for internal use
|
||||
static void emit_bounds_changed(MyAtkComponent *component)
|
||||
{
|
||||
static guint bounds_changed_id = 0;
|
||||
if(bounds_changed_id == 0)
|
||||
{
|
||||
bounds_changed_id = g_signal_lookup("bounds-changed", ATK_TYPE_COMPONENT);
|
||||
}
|
||||
AtkRectangle *param = g_boxed_copy(ATK_TYPE_RECTANGLE, &(component->extent));
|
||||
g_signal_emit(component, bounds_changed_id, 0, param);
|
||||
}
|
||||
static void change_focus(AtkComponent* component, gboolean is_gain)
|
||||
{
|
||||
const gchar* state_name = atk_state_type_get_name(ATK_STATE_FOCUSED);
|
||||
|
||||
g_signal_emit_by_name(component, "focus-event", is_gain);
|
||||
g_signal_emit_by_name(component, "state-change::focused",
|
||||
state_name, is_gain);
|
||||
|
||||
AtkObject* parent = atk_object_get_parent((AtkObject*)component);
|
||||
if(parent != NULL)
|
||||
{
|
||||
AtkStateSet* stateSet = atk_object_ref_state_set(parent);
|
||||
if(atk_state_set_contains_state(stateSet, ATK_STATE_MANAGES_DESCENDANTS))
|
||||
g_signal_emit_by_name(parent, "active-descendant-changed",
|
||||
atk_get_focus_object());
|
||||
g_object_unref(stateSet);
|
||||
}
|
||||
}
|
||||
//implementation of virtual functions
|
||||
//******************ref_state_set(AtkObject)*****************************
|
||||
static AtkStateSet* my_atk_component_ref_state_set(AtkObject *object)
|
||||
{
|
||||
MyAtkComponent *self = (MyAtkComponent*)object;
|
||||
|
||||
AtkStateSet* result = ((AtkObjectClass*)component_parent_class)->
|
||||
ref_state_set(object);
|
||||
if(self->is_manage_descendants)
|
||||
atk_state_set_add_state(result, ATK_STATE_MANAGES_DESCENDANTS);
|
||||
return result;
|
||||
}
|
||||
//******************get_size*******************
|
||||
static void my_atk_component_get_size(AtkComponent *component, gint *width, gint *height)
|
||||
{
|
||||
g_return_if_fail(MY_IS_ATK_COMPONENT(component));
|
||||
|
||||
MyAtkComponent *self = MY_ATK_COMPONENT(component);
|
||||
*width = self->extent.width;
|
||||
*height = self->extent.height;
|
||||
}
|
||||
//*********************get_position*******************
|
||||
static void my_atk_component_get_position(AtkComponent *component, gint *x, gint *y, AtkCoordType coord_type)
|
||||
{
|
||||
g_return_if_fail(MY_IS_ATK_COMPONENT(component));
|
||||
|
||||
MyAtkComponent *self = MY_ATK_COMPONENT(component);
|
||||
*x = self->extent.x;
|
||||
*y = self->extent.y;
|
||||
|
||||
//**********************get_extents*******************
|
||||
}
|
||||
static void my_atk_component_get_extents(AtkComponent *component, gint *x, gint *y,
|
||||
gint *width, gint *height, AtkCoordType coord_type)
|
||||
{
|
||||
g_return_if_fail(MY_IS_ATK_COMPONENT(component));
|
||||
|
||||
MyAtkComponent *self = MY_ATK_COMPONENT(component);
|
||||
*x = self->extent.x;
|
||||
*y = self->extent.y;
|
||||
*width = self->extent.width;
|
||||
*height = self->extent.height;
|
||||
}
|
||||
|
||||
//**************************set_size*******************
|
||||
static gboolean my_atk_component_set_size(AtkComponent *component, gint width, gint height)
|
||||
{
|
||||
g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), FALSE);
|
||||
|
||||
MyAtkComponent *self = MY_ATK_COMPONENT(component);
|
||||
if(self->is_extent_may_changed)
|
||||
{
|
||||
self->extent.width = width;
|
||||
self->extent.height = height;
|
||||
|
||||
emit_bounds_changed(self);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
//**************************set_position********************
|
||||
static gboolean my_atk_component_set_position(AtkComponent *component,
|
||||
gint x, gint y, AtkCoordType coord_type)
|
||||
{
|
||||
g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), FALSE);
|
||||
|
||||
MyAtkComponent *self = MY_ATK_COMPONENT(component);
|
||||
if(self->is_extent_may_changed)
|
||||
{
|
||||
self->extent.x = x;
|
||||
self->extent.y = y;
|
||||
|
||||
emit_bounds_changed(self);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
//*************************************set_extents***************
|
||||
static gboolean my_atk_component_set_extents(AtkComponent *component,
|
||||
gint x, gint y, gint width, gint height, AtkCoordType coord_type)
|
||||
{
|
||||
g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), FALSE);
|
||||
|
||||
MyAtkComponent *self = MY_ATK_COMPONENT(component);
|
||||
|
||||
if(self->is_extent_may_changed)
|
||||
{
|
||||
self->extent.x = x;
|
||||
self->extent.y = y;
|
||||
self->extent.width = width;
|
||||
self->extent.height = height;
|
||||
|
||||
emit_bounds_changed(self);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
//**************************get_layer****************
|
||||
static AtkLayer my_atk_component_get_layer(AtkComponent *component)
|
||||
{
|
||||
g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), ATK_LAYER_INVALID);
|
||||
|
||||
MyAtkComponent *self = MY_ATK_COMPONENT(component);
|
||||
return self->layer;
|
||||
}
|
||||
//**************************get_mdi_zorder****************
|
||||
static gint my_atk_component_get_mdi_zorder(AtkComponent *component)
|
||||
{
|
||||
g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), G_MININT);
|
||||
|
||||
MyAtkComponent *self = MY_ATK_COMPONENT(component);
|
||||
return self->zorder;
|
||||
}
|
||||
//***********************contains**********************
|
||||
static gboolean my_atk_component_contains(AtkComponent *component,
|
||||
gint x, gint y, AtkCoordType coord_type)
|
||||
{
|
||||
g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), FALSE);
|
||||
//for extract extent
|
||||
gint x_tmp, y_tmp, width_tmp, height_tmp;
|
||||
my_atk_component_get_extents(component, &x_tmp, &y_tmp, &width_tmp, &height_tmp, coord_type);
|
||||
|
||||
if( (x >= x_tmp) &&(y >= y_tmp) &&(x < x_tmp + width_tmp) && (y < y_tmp + height_tmp) )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
//**********************ref_accessible_at_point***********************
|
||||
/*
|
||||
* Retuns accessible child that implements AtkCOmponent and contains the given point.
|
||||
*/
|
||||
static AtkObject* my_atk_component_ref_accessible_at_point(AtkComponent* component,
|
||||
gint x, gint y, AtkCoordType coord_type)
|
||||
{
|
||||
g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), NULL);
|
||||
gint i;
|
||||
|
||||
gint n_children = atk_object_get_n_accessible_children((AtkObject*)component);
|
||||
for(i = 0; i < n_children; i++)
|
||||
{
|
||||
AtkObject *child = atk_object_ref_accessible_child((AtkObject*)component, i);
|
||||
if(ATK_IS_COMPONENT(child)
|
||||
&& atk_component_contains((AtkComponent*)child, x, y, coord_type))
|
||||
{
|
||||
return child;
|
||||
}
|
||||
g_object_unref(child);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
//*************************************grab_focus*********************************
|
||||
static gboolean my_atk_component_grab_focus(AtkComponent* component)
|
||||
{
|
||||
if(component == focus_object)
|
||||
{
|
||||
//Already has focus
|
||||
return TRUE;
|
||||
}
|
||||
if(is_modal)
|
||||
{
|
||||
//cannot grab focus
|
||||
return FALSE;
|
||||
}
|
||||
AtkComponent *focus_object_old = focus_object;
|
||||
focus_object = component;
|
||||
|
||||
atk_focus_tracker_notify((AtkObject*)component);
|
||||
|
||||
if(focus_object_old != NULL)
|
||||
{
|
||||
//signals for object which lost focus
|
||||
change_focus(focus_object_old, FALSE);
|
||||
}
|
||||
if(component != NULL)
|
||||
{
|
||||
//signals for object which grab focus
|
||||
change_focus(component, TRUE);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
//***********************my_atk_component_add_focus_handler*********************
|
||||
static guint my_atk_component_add_focus_handler(AtkComponent *component, AtkFocusHandler handler)
|
||||
{
|
||||
g_return_val_if_fail(MY_IS_ATK_COMPONENT(component),0);
|
||||
//verify whether handler already connect to object
|
||||
gulong found_handler_id = g_signal_handler_find(component,
|
||||
G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC,
|
||||
focus_signal_id,
|
||||
0,
|
||||
NULL,
|
||||
(gpointer)handler,
|
||||
NULL);
|
||||
if(found_handler_id == 0)
|
||||
{
|
||||
//handler hasn't been connected yet
|
||||
return g_signal_connect_closure_by_id(component,
|
||||
focus_signal_id,
|
||||
0,
|
||||
g_cclosure_new( (GCallback)handler,
|
||||
NULL,
|
||||
NULL),
|
||||
FALSE);
|
||||
}
|
||||
else/* found_handler_id != 0*/
|
||||
{
|
||||
//handler has already been connected
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
//***********************my_atk_component_remove_focus_handler*********************
|
||||
static void my_atk_component_remove_focus_handler(AtkComponent *component, guint handler_id)
|
||||
{
|
||||
g_signal_handler_disconnect(component, handler_id);
|
||||
}
|
||||
//***********************my_atk_component_set_modal(my function)***************
|
||||
void my_atk_component_set_modal(gboolean value)
|
||||
{
|
||||
is_modal = value;
|
||||
}
|
||||
//******************my_atk_component_set_manage_descendants(my_function)*******
|
||||
void my_atk_component_set_manage_descendants(MyAtkComponent* component, gboolean value)
|
||||
{
|
||||
if(component->is_manage_descendants == value)return;
|
||||
component->is_manage_descendants = value;
|
||||
g_signal_emit_by_name(component, "state-change::manages-descendants",
|
||||
"manages-descendants", value);
|
||||
}
|
||||
//Others funtions
|
||||
static void my_atk_component_instance_init(GTypeInstance *obj, gpointer g_class)
|
||||
{
|
||||
MyAtkComponent *self = (MyAtkComponent*)obj;
|
||||
//set defaults values
|
||||
self->extent.x = 0;
|
||||
self->extent.y = 0;
|
||||
self->extent.width = 10;
|
||||
self->extent.height = 10;
|
||||
self->is_extent_may_changed = TRUE;
|
||||
self->layer = ATK_LAYER_INVALID;
|
||||
self->zorder = -2147;
|
||||
}
|
||||
static void my_atk_component_instance_finalize(GObject* obj)
|
||||
{
|
||||
MyAtkComponent* component = (MyAtkComponent*)obj;
|
||||
|
||||
if(((AtkObject*)component) == atk_get_focus_object())
|
||||
{
|
||||
atk_focus_tracker_notify(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void my_atk_component_class_init(gpointer g_class, gpointer class_data)
|
||||
{
|
||||
GObjectClass* g_object_class = (GObjectClass*)g_class;
|
||||
AtkObjectClass* atkObject_class = (AtkObjectClass*)g_class;
|
||||
//GObject virtual table
|
||||
g_object_class->finalize = my_atk_component_instance_finalize;
|
||||
//AtkObject virtual table
|
||||
atkObject_class->ref_state_set = my_atk_component_ref_state_set;
|
||||
//parent_class
|
||||
component_parent_class = g_type_class_peek_parent(g_class);
|
||||
//make focus_tracker's table not empty.
|
||||
focus_tracker_id = atk_add_focus_tracker(my_event_listener);
|
||||
//store "focus-event"-signal id
|
||||
focus_signal_id = g_signal_lookup("focus-event",MY_TYPE_ATK_COMPONENT);
|
||||
}
|
||||
/*
|
||||
* Though, according to the documentation, this function will never called for
|
||||
* static-registred types.
|
||||
* Base_init function doesn't suite for this work,
|
||||
* because it will called in every derived classes.
|
||||
*/
|
||||
/*static void my_atk_component_class_finalize(gpointer g_class, gpointer class_data)
|
||||
{
|
||||
|
||||
if(focus_tracker_id != 0)
|
||||
{
|
||||
atk_remove_focus_tracker(focus_tracker_id);
|
||||
focus_tracker_id = 0;
|
||||
}
|
||||
}*/
|
||||
static void my_atk_component_interface_init(gpointer g_iface, gpointer iface_data)
|
||||
{
|
||||
AtkComponentIface *klass = (AtkComponentIface*)g_iface;
|
||||
|
||||
klass->get_extents = my_atk_component_get_extents;
|
||||
klass->get_position = my_atk_component_get_position;
|
||||
klass->get_size = my_atk_component_get_size;
|
||||
|
||||
klass->set_extents = my_atk_component_set_extents;
|
||||
klass->set_position = my_atk_component_set_position;
|
||||
klass->set_size = my_atk_component_set_size;
|
||||
|
||||
klass->contains = my_atk_component_contains;
|
||||
klass->ref_accessible_at_point = my_atk_component_ref_accessible_at_point;
|
||||
|
||||
klass->get_layer = my_atk_component_get_layer;
|
||||
klass->get_mdi_zorder = my_atk_component_get_mdi_zorder;
|
||||
|
||||
klass->grab_focus = my_atk_component_grab_focus;
|
||||
klass->add_focus_handler = my_atk_component_add_focus_handler;
|
||||
klass->remove_focus_handler = my_atk_component_remove_focus_handler;
|
||||
}
|
||||
|
||||
GType my_atk_component_get_type()
|
||||
{
|
||||
static GType type = 0;
|
||||
if(type == 0)
|
||||
{
|
||||
static const GTypeInfo typeInfo =
|
||||
{
|
||||
sizeof(MyAtkComponentClass),
|
||||
NULL, //base_init
|
||||
NULL, //base_finalize
|
||||
my_atk_component_class_init, //class_init
|
||||
NULL, //class_finalize
|
||||
NULL, //class_data
|
||||
sizeof(MyAtkComponent),
|
||||
0, //n_preallocs
|
||||
my_atk_component_instance_init //instance_init
|
||||
};
|
||||
|
||||
static const GInterfaceInfo iface_info =
|
||||
{
|
||||
my_atk_component_interface_init, /* interface_init*/
|
||||
NULL, /* interface_finalize*/
|
||||
NULL /* interface_data */
|
||||
};
|
||||
type = g_type_register_static(MY_TYPE_ATK_OBJECT, "MyAtkComponent", &typeInfo, 0);
|
||||
g_type_add_interface_static(type,
|
||||
ATK_TYPE_COMPONENT,
|
||||
&iface_info);
|
||||
}
|
||||
return type;
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef MY_ATK_COMPONENT_H
|
||||
#define MY_ATK_COMPONENT_H
|
||||
/*
|
||||
* MyAtkComponent: derives AtkObject(with parent-child accessibilities)
|
||||
* and implements AtkComponent.
|
||||
*/
|
||||
#include <atk/atk.h>
|
||||
|
||||
#include "my-atk-object.h"
|
||||
|
||||
#define MY_TYPE_ATK_COMPONENT (my_atk_component_get_type ())
|
||||
#define MY_ATK_COMPONENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_COMPONENT, MyAtkComponent))
|
||||
#define MY_ATK_COMPONENT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_COMPONENT, MyAtkComponentClass))
|
||||
#define MY_IS_ATK_COMPONENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_COMPONENT))
|
||||
#define MY_IS_ATK_COMPONENT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_COMPONENT))
|
||||
#define MY_ATK_COMPONENT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_COMPONENT, MyAtkComponentClass))
|
||||
|
||||
typedef struct _MyAtkComponent MyAtkComponent;
|
||||
typedef struct _MyAtkComponentClass MyAtkComponentClass;
|
||||
|
||||
struct _MyAtkComponent
|
||||
{
|
||||
MyAtkObject parent;
|
||||
//relative coordinates, which coincides with absolute ones
|
||||
AtkRectangle extent;
|
||||
//whether component may be relocated
|
||||
gboolean is_extent_may_changed;
|
||||
//for emit "active-descendant-changed" signal
|
||||
gboolean is_manage_descendants;
|
||||
//
|
||||
AtkLayer layer;
|
||||
gint zorder;
|
||||
};
|
||||
|
||||
struct _MyAtkComponentClass
|
||||
{
|
||||
MyAtkObjectClass parent;
|
||||
};
|
||||
|
||||
GType my_atk_component_get_type();
|
||||
#endif /*MY_ATK_COMPONENT_H*/
|
|
@ -0,0 +1,156 @@
|
|||
/*
|
||||
* Copyright 2010 Novell, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
/* This file contains both declaration and definition of the MyAtkDocument,
|
||||
* a GObject that pretends to implement the AtkDocumentIface interface (it
|
||||
* registers appropriate interface), but provides no implementation for any of the
|
||||
* methods of this interface (NULL-filled vftbl).
|
||||
*/
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <atk/atk.h>
|
||||
|
||||
#include "my-atk-object.h"
|
||||
#include "my-atk-document.h"
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Helper functions and data
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
const gchar *
|
||||
my_atk_document_get_document_locale (AtkDocument *document)
|
||||
{
|
||||
return DEF_LOCALE_TEXT;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
my_atk_document_get_document_type (AtkDocument *document)
|
||||
{
|
||||
return DEF_TYPE_TEXT;
|
||||
}
|
||||
|
||||
AtkAttributeSet *
|
||||
my_atk_document_get_document_attributes (AtkDocument *document)
|
||||
{
|
||||
/* TODO: Implement */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
my_atk_document_get_document_attribute_value (AtkDocument *document, const gchar *value)
|
||||
{
|
||||
/*( TODO: Implement */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Implementation
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
static GObjectClass *parent_class_document = NULL;
|
||||
|
||||
/******************************************************************/
|
||||
static void
|
||||
document_interface_init (gpointer g_iface, gpointer iface_data)
|
||||
{
|
||||
AtkDocumentIface *klass = (AtkDocumentIface *)g_iface;
|
||||
|
||||
/* set up overrides here */
|
||||
klass-> get_document_type = my_atk_document_get_document_type;
|
||||
klass-> get_document_locale = my_atk_document_get_document_locale;
|
||||
klass-> get_document_attributes = my_atk_document_get_document_attributes;
|
||||
klass-> get_document_attribute_value = my_atk_document_get_document_attribute_value;
|
||||
}
|
||||
|
||||
static void
|
||||
document_instance_init (GTypeInstance *instance, gpointer g_class)
|
||||
{
|
||||
MyAtkDocument *self = (MyAtkDocument *)instance;
|
||||
|
||||
self->disposed = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
my_atk_document_dispose (GObject *obj)
|
||||
{
|
||||
MyAtkDocument *self = (MyAtkDocument *)obj;
|
||||
|
||||
if (self->disposed)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Make sure dispose does not run twice. */
|
||||
self->disposed = TRUE;
|
||||
|
||||
/* Chain up to the parent class */
|
||||
G_OBJECT_CLASS (parent_class_document)->dispose (obj);
|
||||
}
|
||||
|
||||
static void
|
||||
my_atk_document_finalize (GObject *obj)
|
||||
{
|
||||
/* Chain up to the parent class */
|
||||
G_OBJECT_CLASS (parent_class_document)->finalize (obj);
|
||||
}
|
||||
|
||||
static void
|
||||
my_atk_document_class_init (gpointer g_class, gpointer g_class_data)
|
||||
{
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (g_class);
|
||||
MyAtkDocumentClass *klass = MY_ATK_DOCUMENT_CLASS (g_class);
|
||||
|
||||
gobject_class->dispose = my_atk_document_dispose;
|
||||
gobject_class->finalize = my_atk_document_finalize;
|
||||
|
||||
parent_class_document = g_type_class_peek_parent (klass);
|
||||
}
|
||||
|
||||
GType
|
||||
my_atk_document_get_type (void)
|
||||
{
|
||||
static GType type = 0;
|
||||
if (type == 0)
|
||||
{
|
||||
static const GTypeInfo info =
|
||||
{
|
||||
sizeof (MyAtkDocumentClass),
|
||||
NULL, /* base_init */
|
||||
NULL, /* base_finalize */
|
||||
my_atk_document_class_init, /* class_init */
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (MyAtkDocument),
|
||||
0, /* n_preallocs */
|
||||
document_instance_init /* instance_init */
|
||||
};
|
||||
|
||||
static const GInterfaceInfo iface_info =
|
||||
{
|
||||
(GInterfaceInitFunc) document_interface_init, /* interface_init */
|
||||
NULL, /* interface_finalize */
|
||||
NULL /* interface_data */
|
||||
};
|
||||
type = g_type_register_static (MY_TYPE_ATK_OBJECT,
|
||||
"MyAtkDocumentType",
|
||||
&info, 0);
|
||||
g_type_add_interface_static (type,
|
||||
ATK_TYPE_DOCUMENT,
|
||||
&iface_info);
|
||||
}
|
||||
return type;
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* Copyright 2010 Novell, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef MY_ATK_DOCUMENT_H
|
||||
#define MY_ATK_DOCUMENT_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <atk/atk.h>
|
||||
#include <my-atk-object.h>
|
||||
|
||||
#define MY_TYPE_ATK_DOCUMENT (my_atk_document_get_type ())
|
||||
#define MY_ATK_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_DOCUMENT, MyAtkDocument))
|
||||
#define MY_ATK_DOCUMENT_CLASS(vdocument) (G_TYPE_CHECK_CLASS_CAST ((vdocument), MY_TYPE_ATK_DOCUMENT, MyAtkDocumentClass))
|
||||
#define MY_IS_ATK_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_DOCUMENT))
|
||||
#define MY_IS_ATK_DOCUMENT_CLASS(vdocument) (G_TYPE_CHECK_CLASS_TYPE ((vdocument), MY_TYPE_ATK_DOCUMENT))
|
||||
#define MY_ATK_DOCUMENT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_DOCUMENT, MyAtkDocumentClass))
|
||||
|
||||
// default string values
|
||||
#define DEF_LOCALE_TEXT "en-US"
|
||||
#define DEF_TYPE_TEXT "default type"
|
||||
|
||||
typedef struct _MyAtkDocument MyAtkDocument;
|
||||
typedef struct _MyAtkDocumentClass MyAtkDocumentClass;
|
||||
|
||||
struct _MyAtkDocument
|
||||
{
|
||||
MyAtkObject parent;
|
||||
|
||||
gboolean disposed;
|
||||
|
||||
gchar *locale;
|
||||
gchar *document_type;
|
||||
};
|
||||
|
||||
struct _MyAtkDocumentClass
|
||||
{
|
||||
MyAtkObjectClass parent;
|
||||
};
|
||||
|
||||
GType
|
||||
my_atk_document_get_type (void);
|
||||
|
||||
#endif /*MY_ATK_DOCUMENT_H*/
|
|
@ -0,0 +1,156 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <atk/atk.h>
|
||||
|
||||
#include "my-atk-text.h"
|
||||
#include "my-atk-hyperlink.h"
|
||||
#include "resources_storage.h"
|
||||
|
||||
//***************************implementation****************************************
|
||||
static MyAtkTextClass *parent_class_atk_hyperlink = NULL;
|
||||
|
||||
// Implementation of virtual functions
|
||||
//***************************my_atk_hyperlink_get_uri**************
|
||||
gchar* my_atk_hyperlink_get_uri(AtkHyperlink* link_, gint index)
|
||||
{
|
||||
MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
|
||||
|
||||
if(index < 0 || index >= self->number_of_anchors) return NULL;
|
||||
return g_strdup(self->uri);
|
||||
}
|
||||
//**************************my_atk_hyperlink_is_valid**************************
|
||||
gboolean my_atk_hyperlink_is_valid(AtkHyperlink* link_)
|
||||
{
|
||||
MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
|
||||
|
||||
return (resource_storage_get(self->uri) != NULL);
|
||||
}
|
||||
//*************************my_atk_hyperlink_get_object************************
|
||||
AtkObject* my_atk_hyperlink_get_object(AtkHyperlink* link_, gint index)
|
||||
{
|
||||
MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
|
||||
|
||||
if(index < 0 || index >= self->number_of_anchors) return NULL;
|
||||
return resource_storage_get(self->uri);
|
||||
}
|
||||
//***************************my_atk_hyperlink_get_start_index**************
|
||||
gint my_atk_hyperlink_get_start_index(AtkHyperlink* link_)
|
||||
{
|
||||
MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
|
||||
|
||||
return self->start_index;
|
||||
}
|
||||
//***************************my_atk_hyperlink_get_end_index**************
|
||||
gint my_atk_hyperlink_get_end_index(AtkHyperlink* link_)
|
||||
{
|
||||
MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
|
||||
|
||||
return self->end_index;
|
||||
}
|
||||
//***************************my_atk_hyperlink_link_state*******************
|
||||
guint my_atk_hyperlink_link_state(AtkHyperlink* link_)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
//***************************my_atk_hyperlink_get_n_anchors*******************
|
||||
gboolean my_atk_hyperlink_get_n_anchors(AtkHyperlink* link_)
|
||||
{
|
||||
return ((MyAtkHyperlink*)link_)->number_of_anchors;
|
||||
}
|
||||
//***************************my_atk_hypertlink_is_selected_link***********
|
||||
gboolean my_atk_hyperlink_is_selected_link(AtkHyperlink* link_)
|
||||
{
|
||||
MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
|
||||
|
||||
return self->is_selected;
|
||||
}
|
||||
//others functions
|
||||
MyAtkHyperlink* my_atk_hyperlink_new(gint start_index, gint end_index,const gchar* uri)
|
||||
{
|
||||
MyAtkHyperlink* result = g_object_new(MY_TYPE_ATK_HYPERLINK, NULL);
|
||||
if(result == NULL) return NULL;
|
||||
result->start_index = start_index;
|
||||
result->end_index = end_index;
|
||||
result->uri = g_strdup(uri);
|
||||
result->number_of_anchors = 1;
|
||||
return result;
|
||||
}
|
||||
void my_atk_hyperlink_activate(MyAtkHyperlink* hyperlink)
|
||||
{
|
||||
g_signal_emit_by_name(hyperlink, "link-activated");
|
||||
}
|
||||
//initialize/finalize functions
|
||||
static void my_atk_hyperlink_instance_init(GTypeInstance *obj, gpointer g_class)
|
||||
{
|
||||
MyAtkHyperlink *self = (MyAtkHyperlink*)obj;
|
||||
|
||||
self->start_index = self->end_index = 0;
|
||||
self->uri = NULL;
|
||||
self->is_selected = FALSE;
|
||||
self->number_of_anchors = 0;
|
||||
}
|
||||
static void my_atk_hyperlink_instance_finalize(GObject* obj)
|
||||
{
|
||||
MyAtkHyperlink *self = (MyAtkHyperlink*)obj;
|
||||
|
||||
g_free(self->uri);
|
||||
}
|
||||
|
||||
static void my_atk_hyperlink_class_init(gpointer g_class, gpointer class_data)
|
||||
{
|
||||
GObjectClass* g_object_class = (GObjectClass*)g_class;
|
||||
//GObject virtual table
|
||||
g_object_class->finalize = my_atk_hyperlink_instance_finalize;
|
||||
//parent_class
|
||||
parent_class_atk_hyperlink = g_type_class_peek_parent(g_class);
|
||||
//
|
||||
AtkHyperlinkClass* atkHyperlinkClass = (AtkHyperlinkClass*)g_class;
|
||||
|
||||
atkHyperlinkClass->get_uri = my_atk_hyperlink_get_uri;
|
||||
atkHyperlinkClass->get_object = my_atk_hyperlink_get_object;
|
||||
atkHyperlinkClass->get_start_index = my_atk_hyperlink_get_start_index;
|
||||
atkHyperlinkClass->get_end_index = my_atk_hyperlink_get_end_index;
|
||||
atkHyperlinkClass->is_valid = my_atk_hyperlink_is_valid;
|
||||
atkHyperlinkClass->link_state = my_atk_hyperlink_link_state;
|
||||
atkHyperlinkClass->get_n_anchors = my_atk_hyperlink_get_n_anchors;
|
||||
atkHyperlinkClass->is_selected_link = my_atk_hyperlink_is_selected_link;
|
||||
}
|
||||
|
||||
GType my_atk_hyperlink_get_type()
|
||||
{
|
||||
static GType type = 0;
|
||||
if(type == 0)
|
||||
{
|
||||
static const GTypeInfo typeInfo =
|
||||
{
|
||||
sizeof(MyAtkHyperlinkClass),
|
||||
NULL, //base_init
|
||||
NULL, //base_finalize
|
||||
my_atk_hyperlink_class_init, //class_init
|
||||
NULL, //class_finalize
|
||||
NULL, //class_data
|
||||
sizeof(MyAtkHyperlink),
|
||||
0, //n_preallocs
|
||||
my_atk_hyperlink_instance_init //instance_init
|
||||
};
|
||||
type = g_type_register_static(ATK_TYPE_HYPERLINK, "MyAtkHyperlink", &typeInfo, 0);
|
||||
}
|
||||
return type;
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef MY_ATK_HYPERLINK_H
|
||||
#define MY_ATK_HYPERLINK_H
|
||||
/*
|
||||
* MyAtkHyperlink: implements AtkHyperlink
|
||||
*/
|
||||
#include <atk/atk.h>
|
||||
|
||||
#define MY_TYPE_ATK_HYPERLINK (my_atk_hyperlink_get_type ())
|
||||
#define MY_ATK_HYPERLINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_HYPERLINK, MyAtkHyperlink))
|
||||
#define MY_ATK_HYPERLINK_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_HYPERLINK, MyAtkHyperlinkClass))
|
||||
#define MY_IS_ATK_HYPERLINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_HYPERLINK))
|
||||
#define MY_IS_ATK_HYPERLINK_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_HYPERLINK))
|
||||
#define MY_ATK_HYPERLINK_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_HYPERLINK, MyAtkHyperlinkClass))
|
||||
|
||||
typedef struct _MyAtkHyperlink MyAtkHyperlink;
|
||||
typedef struct _MyAtkHyperlinkClass MyAtkHyperlinkClass;
|
||||
|
||||
struct _MyAtkHyperlink
|
||||
{
|
||||
AtkHyperlink parent;
|
||||
|
||||
gint start_index, end_index;
|
||||
|
||||
gchar* uri;
|
||||
gint number_of_anchors;//0 on "clear" hyperlink and 1 after set it
|
||||
gboolean is_selected;
|
||||
};
|
||||
|
||||
struct _MyAtkHyperlinkClass
|
||||
{
|
||||
AtkHyperlinkClass parent;
|
||||
};
|
||||
|
||||
GType my_atk_hyperlink_get_type();
|
||||
#endif /*MY_ATK_HYPERLINK_H*/
|
|
@ -0,0 +1,191 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <atk/atk.h>
|
||||
|
||||
#include "my-atk-text.h"
|
||||
#include "my-atk-hyperlink.h"
|
||||
#include "my-atk-hypertext.h"
|
||||
|
||||
//***************************implementation****************************************
|
||||
static MyAtkTextClass *parent_class_atk_text = NULL;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
gint start_offset, end_offset;
|
||||
gint index;
|
||||
}HyperlinkRange;
|
||||
// Implementation of virtual functions
|
||||
|
||||
//***************************my_atk_hypertext_get_n_links*************************
|
||||
gint my_atk_hypertext_get_n_links(AtkHypertext* hypertext)
|
||||
{
|
||||
MyAtkHypertext* self = (MyAtkHypertext*)hypertext;
|
||||
|
||||
return self->hyperlinks->len;
|
||||
}
|
||||
//***************************my_atk_hypertext_get_link***********************
|
||||
AtkHyperlink* my_atk_hypertext_get_link(AtkHypertext* hypertext, gint link_index)
|
||||
{
|
||||
MyAtkHypertext* self = (MyAtkHypertext*)hypertext;
|
||||
|
||||
if(link_index < 0 || link_index >= self->hyperlinks->len)
|
||||
return NULL;
|
||||
return g_ptr_array_index(self->hyperlinks, link_index);
|
||||
}
|
||||
//*************************my_atk_hypertext_get_link_index*******************
|
||||
gint my_atk_hypertext_get_link_index(AtkHypertext* hypertext, gint char_index)
|
||||
{
|
||||
gint i;
|
||||
MyAtkHypertext* self = (MyAtkHypertext*)hypertext;
|
||||
GArray* ranges = self->hyperlink_ranges;
|
||||
for(i = ranges->len - 1; i >= 0; i--)
|
||||
{
|
||||
HyperlinkRange *range = &g_array_index(ranges, HyperlinkRange, i);
|
||||
if(range->start_offset <= char_index)
|
||||
{
|
||||
if(range->end_offset > char_index)return range->index;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
//others functions
|
||||
gboolean my_atk_hypertext_add_hyperlink(MyAtkHypertext* hypertext,
|
||||
gint start_index, gint end_index, const gchar* uri)
|
||||
{
|
||||
MyAtkHyperlink* new_hyperlink;
|
||||
GArray* ranges = hypertext->hyperlink_ranges;
|
||||
gint i;
|
||||
for(i = 0; i < ranges->len; i++)
|
||||
{
|
||||
HyperlinkRange *range = &g_array_index(ranges, HyperlinkRange, i);
|
||||
if(range->end_offset <= start_index) continue;
|
||||
if(range->start_offset < end_index) return FALSE;
|
||||
break;
|
||||
}
|
||||
new_hyperlink = my_atk_hyperlink_new(start_index, end_index, uri);
|
||||
g_ptr_array_add(hypertext->hyperlinks, new_hyperlink);
|
||||
HyperlinkRange new_range;
|
||||
new_range.start_offset = start_index;
|
||||
new_range.end_offset = end_index;
|
||||
new_range.index = hypertext->hyperlinks->len - 1;
|
||||
g_array_insert_val(ranges, i, new_range);
|
||||
return TRUE;
|
||||
}
|
||||
//
|
||||
void my_atk_hypertext_select_link(MyAtkHypertext* hypertext, gint index)
|
||||
{
|
||||
if(index < 0 || index >= my_atk_hypertext_get_n_links((AtkHypertext*)hypertext))
|
||||
return;
|
||||
|
||||
if(hypertext->current_selected_link != -1)
|
||||
{
|
||||
MyAtkHyperlink *selected_link_old =
|
||||
(MyAtkHyperlink*)my_atk_hypertext_get_link(
|
||||
(AtkHypertext*)hypertext, hypertext->current_selected_link);
|
||||
selected_link_old->is_selected = FALSE;
|
||||
}
|
||||
|
||||
hypertext->current_selected_link = index;
|
||||
MyAtkHyperlink *selected_link_new = (MyAtkHyperlink*)my_atk_hypertext_get_link(
|
||||
(AtkHypertext*)hypertext, hypertext->current_selected_link);
|
||||
selected_link_new->is_selected = TRUE;
|
||||
|
||||
g_signal_emit_by_name(hypertext,
|
||||
"link-selected", hypertext->current_selected_link);
|
||||
}
|
||||
//initialize/finalize functions
|
||||
static void my_atk_hypertext_instance_init(GTypeInstance *obj, gpointer g_class)
|
||||
{
|
||||
MyAtkHypertext *self = (MyAtkHypertext*)obj;
|
||||
|
||||
self->hyperlink_ranges = g_array_new(FALSE, FALSE, sizeof(HyperlinkRange));
|
||||
self->hyperlinks = g_ptr_array_new();
|
||||
|
||||
self->current_selected_link = -1;
|
||||
}
|
||||
static void my_atk_hypertext_instance_finalize(GObject* obj)
|
||||
{
|
||||
MyAtkHypertext *self = (MyAtkHypertext*)obj;
|
||||
|
||||
g_array_free(self->hyperlink_ranges, FALSE);
|
||||
|
||||
g_ptr_array_foreach(self->hyperlinks,(GFunc)g_object_unref, NULL);
|
||||
g_ptr_array_free(self->hyperlinks, FALSE);
|
||||
}
|
||||
|
||||
static void my_atk_hypertext_class_init(gpointer g_class, gpointer class_data)
|
||||
{
|
||||
GObjectClass* g_object_class = (GObjectClass*)g_class;
|
||||
//GObject virtual table
|
||||
g_object_class->finalize = my_atk_hypertext_instance_finalize;
|
||||
//parent_class
|
||||
parent_class_atk_text = g_type_class_peek_parent(g_class);
|
||||
}
|
||||
static void my_atk_hypertext_interface_init(gpointer g_iface, gpointer iface_data)
|
||||
{
|
||||
AtkHypertextIface *klass = (AtkHypertextIface*)g_iface;
|
||||
|
||||
klass->get_link = my_atk_hypertext_get_link;
|
||||
klass->get_n_links = my_atk_hypertext_get_n_links;
|
||||
klass->get_link_index = my_atk_hypertext_get_link_index;
|
||||
}
|
||||
|
||||
GType my_atk_hypertext_get_type()
|
||||
{
|
||||
static GType type = 0;
|
||||
if(type == 0)
|
||||
{
|
||||
static const GTypeInfo typeInfo =
|
||||
{
|
||||
sizeof(MyAtkHypertextClass),
|
||||
NULL, //base_init
|
||||
NULL, //base_finalize
|
||||
my_atk_hypertext_class_init, //class_init
|
||||
NULL, //class_finalize
|
||||
NULL, //class_data
|
||||
sizeof(MyAtkHypertext),
|
||||
0, //n_preallocs
|
||||
my_atk_hypertext_instance_init //instance_init
|
||||
};
|
||||
|
||||
static const GInterfaceInfo AtkTextIface_info =
|
||||
{
|
||||
my_atk_text_interface_init, /* interface_init*/
|
||||
NULL, /* interface_finalize*/
|
||||
NULL /* interface_data */
|
||||
};
|
||||
static const GInterfaceInfo AtkHypertextIface_info =
|
||||
{
|
||||
my_atk_hypertext_interface_init,/* interface_init*/
|
||||
NULL, /* interface_finalize*/
|
||||
NULL /* interface_data */
|
||||
};
|
||||
type = g_type_register_static(MY_TYPE_ATK_TEXT, "MyAtkHypertext", &typeInfo, 0);
|
||||
g_type_add_interface_static(type,
|
||||
ATK_TYPE_TEXT,
|
||||
&AtkTextIface_info);
|
||||
|
||||
g_type_add_interface_static(type,
|
||||
ATK_TYPE_HYPERTEXT,
|
||||
&AtkHypertextIface_info);
|
||||
}
|
||||
return type;
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef MY_ATK_HYPERTEXT_H
|
||||
#define MY_ATK_HYPERTEXT_H
|
||||
/*
|
||||
* MyAtkHypertext: implements AtkHypertext
|
||||
*/
|
||||
#include <atk/atk.h>
|
||||
#include <my-atk-text.h>
|
||||
|
||||
#define MY_TYPE_ATK_HYPERTEXT (my_atk_hypertext_get_type ())
|
||||
#define MY_ATK_HYPERTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_HYPERTEXT, MyAtkHypertext))
|
||||
#define MY_ATK_HYPERTEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_HYPERTEXT, MyAtkHypertextClass))
|
||||
#define MY_IS_ATK_HYPERTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_HYPERTEXT))
|
||||
#define MY_IS_ATK_HYPERTEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_HYPERTEXT))
|
||||
#define MY_ATK_HYPERTEXT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_HYPERTEXT, MyAtkHypertextClass))
|
||||
|
||||
typedef struct _MyAtkHypertext MyAtkHypertext;
|
||||
typedef struct _MyAtkHypertextClass MyAtkHypertextClass;
|
||||
|
||||
struct _MyAtkHypertext
|
||||
{
|
||||
MyAtkText parent;
|
||||
|
||||
GArray* hyperlink_ranges;
|
||||
GPtrArray* hyperlinks;
|
||||
|
||||
gint current_selected_link;
|
||||
};
|
||||
|
||||
struct _MyAtkHypertextClass
|
||||
{
|
||||
MyAtkTextClass parent;
|
||||
};
|
||||
#endif /*MY_ATK_HYPERTEXT_H*/
|
|
@ -0,0 +1,205 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <atk/atk.h>
|
||||
|
||||
#include "my-atk-object.h"
|
||||
|
||||
static AtkObjectClass *atk_object_parent_class = NULL;
|
||||
|
||||
void my_atk_object_add_child(MyAtkObject* parent, MyAtkObject* child)
|
||||
{
|
||||
g_ptr_array_add(parent->children, child);
|
||||
g_object_ref_sink(child);
|
||||
|
||||
atk_object_set_parent(ATK_OBJECT(child), ATK_OBJECT(parent));
|
||||
|
||||
g_signal_emit_by_name(parent, "children-changed::add",
|
||||
parent->children->len - 1, child);
|
||||
}
|
||||
|
||||
void my_atk_object_remove_child(MyAtkObject* parent, MyAtkObject* child)
|
||||
{
|
||||
gint i;
|
||||
for(i = parent->children->len - 1; i >= 0; i--)
|
||||
{
|
||||
if(g_ptr_array_index(parent->children, i) == child) break;
|
||||
}
|
||||
if(i < 0)return;
|
||||
|
||||
g_ptr_array_remove_index(parent->children, i);
|
||||
g_object_unref(child);
|
||||
g_signal_emit_by_name(parent, "children-changed::remove",
|
||||
i, child);
|
||||
}
|
||||
|
||||
static void my_atk_object_set_parent(AtkObject *accessible, AtkObject *parent)
|
||||
{
|
||||
g_return_if_fail(parent != NULL);
|
||||
|
||||
MyAtkObject *self = MY_ATK_OBJECT(accessible);
|
||||
AtkObject *parent_old = (atk_object_get_parent(accessible));
|
||||
|
||||
if(parent_old == parent)
|
||||
{
|
||||
//nothing to do because parent does not change
|
||||
return;
|
||||
}
|
||||
|
||||
//set field 'parent' in child using 'base-method'
|
||||
atk_object_parent_class->set_parent(accessible, parent);
|
||||
|
||||
if(parent_old != NULL)
|
||||
{
|
||||
my_atk_object_remove_child((MyAtkObject*)parent_old, self);
|
||||
}
|
||||
}
|
||||
|
||||
static gint my_atk_object_get_n_children(AtkObject *accessible)
|
||||
{
|
||||
return MY_ATK_OBJECT(accessible)->children->len;
|
||||
}
|
||||
|
||||
static AtkObject* my_atk_object_ref_child(AtkObject *accessible, gint i)
|
||||
{
|
||||
MyAtkObject *self = MY_ATK_OBJECT(accessible);
|
||||
if(i < 0 || i >= self->children->len)
|
||||
{
|
||||
printf("ref_child: Incorrect index of child.\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
AtkObject* child = (AtkObject*)
|
||||
g_ptr_array_index(self->children, i);
|
||||
|
||||
return (child == NULL) ? NULL : g_object_ref(child);
|
||||
}
|
||||
|
||||
static gint my_atk_object_get_index_in_parent(AtkObject *accessible)
|
||||
{
|
||||
AtkObject *parent = atk_object_get_parent(accessible);
|
||||
if(parent == NULL) return -1;//no parent
|
||||
|
||||
MyAtkObject *parent_my = MY_ATK_OBJECT(parent);
|
||||
|
||||
int i = parent_my->children->len;
|
||||
for(; i>=0; i--)
|
||||
{
|
||||
if(g_ptr_array_index(parent_my->children,i) == accessible)
|
||||
break;
|
||||
}
|
||||
if(i < 0)printf("Something wrong in parent-child strucutre.\n");
|
||||
return i;//if error, i will be equal to -1
|
||||
}
|
||||
|
||||
static AtkStateSet *my_atk_object_ref_state_set(AtkObject *accessible)
|
||||
{
|
||||
MyAtkObject *obj = MY_ATK_OBJECT(accessible);
|
||||
|
||||
if (obj->state_set == NULL)
|
||||
obj->state_set = atk_state_set_new();
|
||||
return g_object_ref(G_OBJECT(obj->state_set));
|
||||
}
|
||||
|
||||
static AtkAttributeSet *my_atk_object_get_attributes (AtkObject *accessible)
|
||||
{
|
||||
MyAtkObject *obj = MY_ATK_OBJECT(accessible);
|
||||
AtkAttributeSet *rs = obj->attributes = NULL;
|
||||
AtkAttribute *a, *b, *c;
|
||||
|
||||
a = g_new(AtkAttribute, 1);
|
||||
b = g_new(AtkAttribute, 1);
|
||||
c = g_new(AtkAttribute, 1);
|
||||
|
||||
a->name = g_strdup("foo");
|
||||
a->value = g_strdup("bar");
|
||||
b->name = g_strdup("baz");
|
||||
b->value = g_strdup("qux");
|
||||
c->name = g_strdup("quux");
|
||||
c->value = g_strdup("corge");
|
||||
|
||||
rs = g_slist_append(rs, (gpointer) a);
|
||||
rs = g_slist_append(rs, (gpointer) b);
|
||||
rs = g_slist_append(rs, (gpointer) c);
|
||||
}
|
||||
|
||||
//function, needed in instance_finalize()
|
||||
static void my_unref1(gpointer data, gpointer user_data)
|
||||
{
|
||||
g_object_unref(data);
|
||||
}
|
||||
|
||||
static void my_atk_object_instance_finalize(GObject *obj)
|
||||
{
|
||||
MyAtkObject *self = (MyAtkObject*) obj;
|
||||
//unrefs all children
|
||||
g_ptr_array_foreach(self->children, my_unref1, NULL);
|
||||
//then free array (without frees pointers)
|
||||
g_ptr_array_free(self->children, FALSE);
|
||||
//chain to parent class
|
||||
G_OBJECT_CLASS(atk_object_parent_class)->finalize(obj);
|
||||
}
|
||||
|
||||
void my_atk_object_class_init(gpointer g_class, gpointer g_class_data)
|
||||
{
|
||||
AtkObjectClass *atkObjectClass = (AtkObjectClass*)g_class;
|
||||
|
||||
((GObjectClass*)g_class)->finalize = my_atk_object_instance_finalize;
|
||||
//set pointers to new functions in table of virtuals functions
|
||||
atkObjectClass->set_parent = my_atk_object_set_parent;
|
||||
atkObjectClass->get_n_children = my_atk_object_get_n_children;
|
||||
atkObjectClass->ref_child = my_atk_object_ref_child;
|
||||
atkObjectClass->get_index_in_parent = my_atk_object_get_index_in_parent;
|
||||
atkObjectClass->ref_state_set = my_atk_object_ref_state_set;
|
||||
atkObjectClass->get_attributes = my_atk_object_get_attributes;
|
||||
|
||||
atk_object_parent_class = g_type_class_peek_parent(g_class);
|
||||
}
|
||||
|
||||
static void my_atk_object_instance_init(GTypeInstance *obj, gpointer g_class)
|
||||
{
|
||||
MyAtkObject *self = (MyAtkObject*)obj;
|
||||
|
||||
self->children = g_ptr_array_sized_new(10);
|
||||
self->attributes = g_slist_alloc();
|
||||
}
|
||||
|
||||
GType my_atk_object_get_type()
|
||||
{
|
||||
static GType type = 0;
|
||||
if(type == 0)
|
||||
{
|
||||
static const GTypeInfo typeInfo =
|
||||
{
|
||||
sizeof(MyAtkObjectClass),
|
||||
NULL, //base_init
|
||||
NULL, //base_finalize
|
||||
my_atk_object_class_init, //class_init
|
||||
NULL, //class_finalize
|
||||
NULL, //class_data
|
||||
sizeof(MyAtkObject),
|
||||
0, //n_preallocs
|
||||
my_atk_object_instance_init //instance_init
|
||||
};
|
||||
type = g_type_register_static(ATK_TYPE_OBJECT,"MyAtkObject",&typeInfo,0);
|
||||
}
|
||||
return type;
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef MY_ATK_OBJECT_H
|
||||
#define MY_ATK_OBJECT_H
|
||||
|
||||
#include <atk/atk.h>
|
||||
|
||||
#define MY_TYPE_ATK_OBJECT (my_atk_object_get_type ())
|
||||
#define MY_ATK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_OBJECT, MyAtkObject))
|
||||
#define MY_ATK_OBJECT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_OBJECT, MyAtkObjectClass))
|
||||
#define MY_IS_ATK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_OBJECT))
|
||||
#define MY_IS_ATK_OBJECT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_OBJECT))
|
||||
#define MY_ATK_OBJECT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_OBJECT, MyAtkObjectClass))
|
||||
|
||||
typedef struct _MyAtkObject MyAtkObject;
|
||||
typedef struct _MyAtkObjectClass MyAtkObjectClass;
|
||||
|
||||
struct _MyAtkObject
|
||||
{
|
||||
AtkObject parent;
|
||||
//array of children
|
||||
AtkStateSet *state_set;
|
||||
AtkAttributeSet *attributes;
|
||||
GPtrArray* children;
|
||||
gint id;
|
||||
};
|
||||
|
||||
struct _MyAtkObjectClass
|
||||
{
|
||||
AtkObjectClass parent;
|
||||
};
|
||||
|
||||
GType my_atk_object_get_type();
|
||||
|
||||
void my_atk_object_add_child(MyAtkObject* parent, MyAtkObject* child);
|
||||
|
||||
void my_atk_object_remove_child(MyAtkObject* parent, MyAtkObject* child);
|
||||
|
||||
#endif /*MY_ATK_OBJECT_H*/
|
|
@ -0,0 +1,351 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
/* This file contains both declaration and definition of the MyAtkSelection,
|
||||
* a GObject that implements the AtkSelectionIface interface.
|
||||
*/
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <atk/atk.h>
|
||||
|
||||
#include "my-atk-object.h"
|
||||
#include "my-atk-selection.h"
|
||||
|
||||
/******************************************************************/
|
||||
/* Implementation */
|
||||
/******************************************************************/
|
||||
static GObjectClass *parent_class_simple_selection = NULL;
|
||||
|
||||
/* Implementation of the AtkSelectionIface interface. */
|
||||
static gboolean
|
||||
simple_selection_add_selection (AtkSelection *selection, gint i)
|
||||
{
|
||||
MyAtkSelection* self = (MyAtkSelection*)selection;
|
||||
if ((!self) || self->disposed)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ((i >= 0) && (i < TEST_SELECTION_NCHILDREN))
|
||||
{
|
||||
/* If the child is not selected, select it and send the signal */
|
||||
if (!self->is_selected[i])
|
||||
{
|
||||
self->is_selected[i] = TRUE;
|
||||
g_signal_emit_by_name ((gpointer)self, "selection-changed");
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static gboolean
|
||||
simple_selection_clear_selection (AtkSelection *selection)
|
||||
{
|
||||
MyAtkSelection* self = (MyAtkSelection*)selection;
|
||||
if ((!self) || self->disposed)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* clear selection */
|
||||
{
|
||||
gboolean changed = FALSE;
|
||||
int i;
|
||||
for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i)
|
||||
{
|
||||
changed |= self->is_selected[i];
|
||||
self->is_selected[i] = FALSE;
|
||||
}
|
||||
|
||||
if (changed)
|
||||
{
|
||||
g_signal_emit_by_name ((gpointer)self, "selection-changed");
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static AtkObject*
|
||||
simple_selection_ref_selection (AtkSelection *selection, gint i)
|
||||
{
|
||||
int pos;
|
||||
int nsel;
|
||||
MyAtkSelection* self = (MyAtkSelection*)selection;
|
||||
if ((!self) || self->disposed)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsel = 0;
|
||||
for (pos = 0; pos < TEST_SELECTION_NCHILDREN; ++pos)
|
||||
{
|
||||
if (self->is_selected[pos])
|
||||
{
|
||||
if (i == nsel)
|
||||
{
|
||||
g_object_ref (G_OBJECT (self->child[pos]));
|
||||
return ATK_OBJECT(self->child[pos]);
|
||||
}
|
||||
++nsel;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
simple_selection_get_selection_count (AtkSelection *selection)
|
||||
{
|
||||
MyAtkSelection* self = (MyAtkSelection*)selection;
|
||||
|
||||
int cnt = 0;
|
||||
int i;
|
||||
|
||||
if ((!self) || self->disposed)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i)
|
||||
{
|
||||
if (self->is_selected[i])
|
||||
{
|
||||
++cnt;
|
||||
}
|
||||
}
|
||||
|
||||
return cnt;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
simple_selection_is_child_selected (AtkSelection *selection, gint i)
|
||||
{
|
||||
MyAtkSelection* self = (MyAtkSelection*)selection;
|
||||
if ((!self) || self->disposed)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ((i >= 0) && (i < TEST_SELECTION_NCHILDREN))
|
||||
{
|
||||
return (self->is_selected[i]);
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
simple_selection_remove_selection (AtkSelection *selection, gint i)
|
||||
{
|
||||
int pos;
|
||||
int nsel;
|
||||
|
||||
MyAtkSelection* self = (MyAtkSelection*)selection;
|
||||
if ((!self) || self->disposed)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
nsel = 0;
|
||||
for (pos = 0; pos < TEST_SELECTION_NCHILDREN; ++pos)
|
||||
{
|
||||
if (self->is_selected[pos])
|
||||
{
|
||||
if (i == nsel)
|
||||
{
|
||||
self->is_selected[pos] = FALSE;
|
||||
g_signal_emit_by_name ((gpointer)self, "selection-changed");
|
||||
return TRUE;
|
||||
}
|
||||
++nsel;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
simple_selection_select_all_selection (AtkSelection *selection)
|
||||
{
|
||||
MyAtkSelection* self = (MyAtkSelection*)selection;
|
||||
if ((!self) || self->disposed)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!self->multisel_supported)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* select all */
|
||||
{
|
||||
gboolean changed = FALSE;
|
||||
int i;
|
||||
for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i)
|
||||
{
|
||||
changed |= !self->is_selected[i];
|
||||
self->is_selected[i] = TRUE;
|
||||
}
|
||||
|
||||
if (changed)
|
||||
{
|
||||
g_signal_emit_by_name ((gpointer)self, "selection-changed");
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/******************************************************************/
|
||||
static void
|
||||
simple_selection_interface_init (gpointer g_iface, gpointer iface_data)
|
||||
{
|
||||
AtkSelectionIface *klass = (AtkSelectionIface *)g_iface;
|
||||
|
||||
/* set up overrides here */
|
||||
klass->add_selection =
|
||||
(gboolean (*) (AtkSelection *selection, gint i)) simple_selection_add_selection;
|
||||
|
||||
klass->clear_selection =
|
||||
(gboolean (*) (AtkSelection *selection)) simple_selection_clear_selection;
|
||||
|
||||
klass->ref_selection =
|
||||
(AtkObject* (*) (AtkSelection *selection, gint i)) simple_selection_ref_selection;
|
||||
|
||||
klass->get_selection_count =
|
||||
(gint (*) (AtkSelection *selection)) simple_selection_get_selection_count;
|
||||
|
||||
klass->is_child_selected =
|
||||
(gboolean (*) (AtkSelection *selection, gint i)) simple_selection_is_child_selected;
|
||||
|
||||
klass->remove_selection =
|
||||
(gboolean (*) (AtkSelection *selection, gint i)) simple_selection_remove_selection;
|
||||
|
||||
klass->select_all_selection =
|
||||
(gboolean (*) (AtkSelection *selection)) simple_selection_select_all_selection;
|
||||
}
|
||||
|
||||
static void
|
||||
simple_selection_instance_init (GTypeInstance *instance, gpointer g_class)
|
||||
{
|
||||
MyAtkSelection *self = (MyAtkSelection *)instance;
|
||||
int i;
|
||||
|
||||
self->disposed = FALSE;
|
||||
self->multisel_supported = TRUE;
|
||||
for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i)
|
||||
{
|
||||
self->child[i] = MY_ATK_OBJECT (g_object_new (MY_TYPE_ATK_OBJECT, NULL));
|
||||
self->child[i]->id = i;
|
||||
self->is_selected[i] = FALSE; /* not selected by default */
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
my_atk_selection_dispose (GObject *obj)
|
||||
{
|
||||
MyAtkSelection *self = (MyAtkSelection *)obj;
|
||||
int i;
|
||||
|
||||
if (self->disposed)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Make sure dispose does not run twice. */
|
||||
self->disposed = TRUE;
|
||||
|
||||
for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i)
|
||||
{
|
||||
g_object_unref (G_OBJECT (self->child[i]));
|
||||
}
|
||||
|
||||
/* Chain up to the parent class */
|
||||
G_OBJECT_CLASS (parent_class_simple_selection)->dispose (obj);
|
||||
}
|
||||
|
||||
static void
|
||||
my_atk_selection_finalize (GObject *obj)
|
||||
{
|
||||
/*MyAtkSelection *self = (MyAtkSelection *)obj;
|
||||
if (self)
|
||||
{
|
||||
}*/
|
||||
|
||||
/* Chain up to the parent class */
|
||||
G_OBJECT_CLASS (parent_class_simple_selection)->finalize (obj);
|
||||
}
|
||||
|
||||
static void
|
||||
my_atk_selection_class_init (gpointer g_class, gpointer g_class_data)
|
||||
{
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (g_class);
|
||||
MyAtkSelectionClass *klass = MY_ATK_SELECTION_CLASS (g_class);
|
||||
|
||||
gobject_class->dispose = my_atk_selection_dispose;
|
||||
gobject_class->finalize = my_atk_selection_finalize;
|
||||
|
||||
parent_class_simple_selection = g_type_class_peek_parent (klass);
|
||||
}
|
||||
|
||||
GType
|
||||
my_atk_selection_get_type (void)
|
||||
{
|
||||
static GType type = 0;
|
||||
if (type == 0)
|
||||
{
|
||||
static const GTypeInfo info =
|
||||
{
|
||||
sizeof (MyAtkSelectionClass),
|
||||
NULL, /* base_init */
|
||||
NULL, /* base_finalize */
|
||||
my_atk_selection_class_init, /* class_init */
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (MyAtkSelection),
|
||||
0, /* n_preallocs */
|
||||
simple_selection_instance_init /* instance_init */
|
||||
};
|
||||
|
||||
static const GInterfaceInfo iface_info =
|
||||
{
|
||||
(GInterfaceInitFunc) simple_selection_interface_init, /* interface_init */
|
||||
NULL, /* interface_finalize */
|
||||
NULL /* interface_data */
|
||||
};
|
||||
type = g_type_register_static (MY_TYPE_ATK_OBJECT,
|
||||
"MyAtkSelectionType",
|
||||
&info, 0);
|
||||
g_type_add_interface_static (type,
|
||||
ATK_TYPE_SELECTION,
|
||||
&iface_info);
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
/* This file contains both declaration and definition of the MyAtkSelection,
|
||||
* a GObject that implements the AtkSelectionIface interface.
|
||||
*/
|
||||
|
||||
#ifndef MY_ATK_SELECTION_H
|
||||
#define MY_ATK_SELECTION_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <atk/atk.h>
|
||||
|
||||
#include <my-atk-object.h>
|
||||
|
||||
#define MY_TYPE_ATK_SELECTION (my_atk_selection_get_type ())
|
||||
#define MY_ATK_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_SELECTION, MyAtkSelection))
|
||||
#define MY_ATK_SELECTION_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_SELECTION, MyAtkSelectionClass))
|
||||
#define MY_IS_ATK_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_SELECTION))
|
||||
#define MY_IS_ATK_SELECTION_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_SELECTION))
|
||||
#define MY_ATK_SELECTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_SELECTION, MyAtkSelectionClass))
|
||||
|
||||
/* Number of child objects for the MyAtkSelection instance */
|
||||
#define TEST_SELECTION_NCHILDREN 10
|
||||
|
||||
typedef struct _MyAtkSelection MyAtkSelection;
|
||||
typedef struct _MyAtkSelectionClass MyAtkSelectionClass;
|
||||
|
||||
struct _MyAtkSelection
|
||||
{
|
||||
MyAtkObject parent;
|
||||
|
||||
gboolean disposed;
|
||||
|
||||
/* TRUE if multiple selection is supported, FALSE otherwise.
|
||||
* default - TRUE.
|
||||
*/
|
||||
gboolean multisel_supported;
|
||||
|
||||
/* Children of this object */
|
||||
MyAtkObject* child[TEST_SELECTION_NCHILDREN];
|
||||
|
||||
/* is_selected[i] == TRUE means the ith child is selected, == FALSE -
|
||||
* it is not.
|
||||
*/
|
||||
gboolean is_selected[TEST_SELECTION_NCHILDREN];
|
||||
};
|
||||
|
||||
struct _MyAtkSelectionClass
|
||||
{
|
||||
MyAtkObjectClass parent;
|
||||
};
|
||||
|
||||
GType
|
||||
my_atk_selection_get_type (void);
|
||||
|
||||
#endif /*MY_ATK_SELECTION_H*/
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <atk/atk.h>
|
||||
|
||||
#include "my-atk-object.h"
|
||||
#include "my-atk-streamable-content.h"
|
||||
|
||||
//*************************implementation***********************
|
||||
//implementation of virtual functions
|
||||
//*****************get_n_mime_types************
|
||||
static gint my_atk_streamable_content_get_n_mime_types(
|
||||
AtkStreamableContent *streamable)
|
||||
{
|
||||
g_return_val_if_fail(MY_IS_ATK_STREAMABLE_CONTENT(streamable), 0);
|
||||
|
||||
return sizeof(mime_types) / sizeof(mime_types[0]);
|
||||
}
|
||||
//*****************get_mime_type****************
|
||||
static const gchar* my_atk_streamable_content_get_mime_type(
|
||||
AtkStreamableContent *streamable,
|
||||
gint i)
|
||||
{
|
||||
g_return_val_if_fail(MY_IS_ATK_STREAMABLE_CONTENT(streamable), NULL);
|
||||
|
||||
if((i < 0) || (i >= sizeof(mime_types) / sizeof(mime_types[0])))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
return mime_types[i];
|
||||
}
|
||||
//**********************get_stream*******************
|
||||
static GIOChannel* my_atk_streamable_content_get_stream(
|
||||
AtkStreamableContent *streamable,
|
||||
const gchar* mime_type)
|
||||
{
|
||||
gint i;
|
||||
g_return_val_if_fail(MY_IS_ATK_STREAMABLE_CONTENT(streamable), NULL);
|
||||
|
||||
for(i = 0; i < sizeof(mime_types) / sizeof(mime_types[0]); i++)
|
||||
{
|
||||
if(strcmp(mime_type, mime_types[i]) == 0)
|
||||
{
|
||||
GError *error = NULL;
|
||||
gchar* full_filename = T2C_GET_DATA_PATH(file_names[i]);
|
||||
GIOChannel* channel = g_io_channel_new_file(full_filename, "r", &error);
|
||||
if(error != NULL)
|
||||
{
|
||||
TRACE("Cannot open file '%s' for read: %s", full_filename,
|
||||
error->message);
|
||||
g_error_free(error);
|
||||
}
|
||||
g_free(full_filename);
|
||||
return channel;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
//others functions
|
||||
static void my_atk_streamable_content_interface_init(gpointer g_iface, gpointer iface_data)
|
||||
{
|
||||
AtkStreamableContentIface *klass = (AtkStreamableContentIface*)g_iface;
|
||||
|
||||
klass->get_n_mime_types = my_atk_streamable_content_get_n_mime_types;
|
||||
klass->get_mime_type = my_atk_streamable_content_get_mime_type;
|
||||
klass->get_stream = my_atk_streamable_content_get_stream;
|
||||
}
|
||||
|
||||
GType my_atk_streamable_content_get_type()
|
||||
{
|
||||
static GType type = 0;
|
||||
if(type == 0)
|
||||
{
|
||||
static const GTypeInfo typeInfo =
|
||||
{
|
||||
sizeof(MyAtkStreamableContentClass),
|
||||
NULL, //base_init
|
||||
NULL, //base_finalize
|
||||
NULL, //class_init
|
||||
NULL, //class_finalize
|
||||
NULL, //class_data
|
||||
sizeof(MyAtkStreamableContent),
|
||||
0, //n_preallocs
|
||||
NULL //instance_init
|
||||
};
|
||||
|
||||
static const GInterfaceInfo iface_info =
|
||||
{
|
||||
my_atk_streamable_content_interface_init, /* interface_init*/
|
||||
NULL, /* interface_finalize*/
|
||||
NULL /* interface_data */
|
||||
};
|
||||
type = g_type_register_static(MY_TYPE_ATK_OBJECT, "MyAtkStreamableContent", &typeInfo, 0);
|
||||
g_type_add_interface_static(type,
|
||||
ATK_TYPE_STREAMABLE_CONTENT,
|
||||
&iface_info);
|
||||
}
|
||||
return type;
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef MY_ATK_STREAMABLE_CONTENT_H
|
||||
#define MY_ATK_STREAMABLE_CONTENT_H
|
||||
|
||||
/*
|
||||
* MyAtkStreamableContent: derives GObject and implements AtkStreamableContent
|
||||
*/
|
||||
|
||||
#include <atk/atk.h>
|
||||
|
||||
#include "my-atk-object.h"
|
||||
|
||||
#define MY_TYPE_ATK_STREAMABLE_CONTENT (my_atk_streamable_content_get_type ())
|
||||
#define MY_ATK_STREAMABLE_CONTENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_STREAMABLE_CONTENT, MyAtkStreamableContent))
|
||||
#define MY_ATK_STREAMABLE_CONTENT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_STREAMABLE_CONTENT, MyAtkStreamableContentClass))
|
||||
#define MY_IS_ATK_STREAMABLE_CONTENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_STREAMABLE_CONTENT))
|
||||
#define MY_IS_ATK_STREAMABLE_CONTENT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_STREAMABLE_CONTENT))
|
||||
#define MY_ATK_STREAMABLE_CONTENT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_STREAMABLE_CONTENT, MyAtkStreamableContentClass))
|
||||
|
||||
typedef struct _MyAtkStreamableContent MyAtkStreamableContent;
|
||||
typedef struct _MyAtkStreamableContentClass MyAtkStreamableContentClass;
|
||||
|
||||
static const gchar* mime_types[]={"text/plain", "text/richtext"};
|
||||
static const gchar* file_names[]={"file1", "file2"};
|
||||
struct _MyAtkStreamableContent
|
||||
{
|
||||
MyAtkObject parent;
|
||||
};
|
||||
|
||||
struct _MyAtkStreamableContentClass
|
||||
{
|
||||
MyAtkObjectClass parent;
|
||||
};
|
||||
|
||||
GType my_atk_streamable_content_get_type();
|
||||
#endif /*MY_ATK_STREAMABLE_CONTENT_H*/
|
|
@ -0,0 +1,196 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
/* This file contains both declaration and definition of the MyAtkTable,
|
||||
* a GObject that pretends to implement the AtkTableIface interface (it
|
||||
* registers appropriate interface), but provides no implementation for any of the
|
||||
* methods of this interface (NULL-filled vftbl).
|
||||
*/
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <atk/atk.h>
|
||||
|
||||
#include "my-atk-object.h"
|
||||
#include "my-atk-table.h"
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Helper functions and data
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
void
|
||||
my_atk_table_select_rows (MyAtkTable* table, gboolean sel_scheme[])
|
||||
{
|
||||
// the function does nothing
|
||||
}
|
||||
|
||||
void
|
||||
my_atk_table_select_columns (MyAtkTable* table, gboolean sel_scheme[])
|
||||
{
|
||||
// the function does nothing
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Implementation
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
static GObjectClass *parent_class_table = NULL;
|
||||
|
||||
/******************************************************************/
|
||||
static void
|
||||
table_interface_init (gpointer g_iface, gpointer iface_data)
|
||||
{
|
||||
AtkTableIface *klass = (AtkTableIface *)g_iface;
|
||||
|
||||
/* set up overrides here */
|
||||
klass-> ref_at =
|
||||
(AtkObject* (*) (AtkTable *table, gint row, gint column)) NULL;
|
||||
klass-> get_index_at =
|
||||
(gint (*) (AtkTable *table, gint row, gint column)) NULL;
|
||||
klass-> get_column_at_index =
|
||||
(gint (*) (AtkTable *table, gint index_)) NULL;
|
||||
klass-> get_row_at_index =
|
||||
(gint (*) (AtkTable *table, gint index_)) NULL;
|
||||
klass-> get_n_columns =
|
||||
(gint (*) (AtkTable *table)) NULL;
|
||||
klass-> get_n_rows =
|
||||
(gint (*) (AtkTable *table)) NULL;
|
||||
klass-> get_column_extent_at =
|
||||
(gint (*) (AtkTable *table, gint row, gint column)) NULL;
|
||||
klass-> get_row_extent_at =
|
||||
(gint (*) (AtkTable *table, gint row, gint column)) NULL;
|
||||
klass-> get_caption =
|
||||
(AtkObject* (*) (AtkTable *table)) NULL;
|
||||
klass-> get_column_description =
|
||||
(const gchar* (*) (AtkTable *table, gint column)) NULL;
|
||||
klass-> get_column_header =
|
||||
(AtkObject* (*) (AtkTable *table, gint column)) NULL;
|
||||
klass-> get_row_description =
|
||||
(const gchar* (*) (AtkTable *table, gint row)) NULL;
|
||||
klass-> get_row_header =
|
||||
(AtkObject* (*) (AtkTable *table, gint row)) NULL;
|
||||
klass-> get_summary =
|
||||
(AtkObject* (*) (AtkTable *table)) NULL;
|
||||
klass-> set_caption =
|
||||
(void (*) (AtkTable *table, AtkObject *caption)) NULL;
|
||||
klass-> set_column_description =
|
||||
(void (*) (AtkTable *table, gint column, const gchar *description)) NULL;
|
||||
klass-> set_column_header =
|
||||
(void (*) (AtkTable *table, gint column, AtkObject *header)) NULL;
|
||||
klass-> set_row_description =
|
||||
(void (*) (AtkTable *table, gint row, const gchar *description)) NULL;
|
||||
klass-> set_row_header =
|
||||
(void (*) (AtkTable *table, gint row, AtkObject *header)) NULL;
|
||||
klass-> set_summary =
|
||||
(void (*) (AtkTable *table, AtkObject *accessible)) NULL;
|
||||
klass-> get_selected_columns =
|
||||
(gint (*) (AtkTable *table, gint **selected)) NULL;
|
||||
klass-> get_selected_rows =
|
||||
(gint (*) (AtkTable *table, gint **selected)) NULL;
|
||||
klass-> is_column_selected =
|
||||
(gboolean (*) (AtkTable *table, gint column)) NULL;
|
||||
klass-> is_row_selected =
|
||||
(gboolean (*) (AtkTable *table, gint row)) NULL;
|
||||
klass-> is_selected =
|
||||
(gboolean (*) (AtkTable *table, gint row, gint column)) NULL;
|
||||
klass-> add_row_selection =
|
||||
(gboolean (*) (AtkTable *table, gint row)) NULL;
|
||||
klass-> remove_row_selection =
|
||||
(gboolean (*) (AtkTable *table, gint row)) NULL;
|
||||
klass-> add_column_selection =
|
||||
(gboolean (*) (AtkTable *table, gint column)) NULL;
|
||||
klass-> remove_column_selection =
|
||||
(gboolean (*) (AtkTable *table, gint column)) NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
table_instance_init (GTypeInstance *instance, gpointer g_class)
|
||||
{
|
||||
MyAtkTable *self = (MyAtkTable *)instance;
|
||||
|
||||
self->disposed = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
my_atk_table_dispose (GObject *obj)
|
||||
{
|
||||
MyAtkTable *self = (MyAtkTable *)obj;
|
||||
|
||||
if (self->disposed)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Make sure dispose does not run twice. */
|
||||
self->disposed = TRUE;
|
||||
|
||||
/* Chain up to the parent class */
|
||||
G_OBJECT_CLASS (parent_class_table)->dispose (obj);
|
||||
}
|
||||
|
||||
static void
|
||||
my_atk_table_finalize (GObject *obj)
|
||||
{
|
||||
/* Chain up to the parent class */
|
||||
G_OBJECT_CLASS (parent_class_table)->finalize (obj);
|
||||
}
|
||||
|
||||
static void
|
||||
my_atk_table_class_init (gpointer g_class, gpointer g_class_data)
|
||||
{
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (g_class);
|
||||
MyAtkTableClass *klass = MY_ATK_TABLE_CLASS (g_class);
|
||||
|
||||
gobject_class->dispose = my_atk_table_dispose;
|
||||
gobject_class->finalize = my_atk_table_finalize;
|
||||
|
||||
parent_class_table = g_type_class_peek_parent (klass);
|
||||
}
|
||||
|
||||
GType
|
||||
my_atk_table_get_type (void)
|
||||
{
|
||||
static GType type = 0;
|
||||
if (type == 0)
|
||||
{
|
||||
static const GTypeInfo info =
|
||||
{
|
||||
sizeof (MyAtkTableClass),
|
||||
NULL, /* base_init */
|
||||
NULL, /* base_finalize */
|
||||
my_atk_table_class_init, /* class_init */
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (MyAtkTable),
|
||||
0, /* n_preallocs */
|
||||
table_instance_init /* instance_init */
|
||||
};
|
||||
|
||||
static const GInterfaceInfo iface_info =
|
||||
{
|
||||
(GInterfaceInitFunc) table_interface_init, /* interface_init */
|
||||
NULL, /* interface_finalize */
|
||||
NULL /* interface_data */
|
||||
};
|
||||
type = g_type_register_static (MY_TYPE_ATK_OBJECT,
|
||||
"MyAtkTableType",
|
||||
&info, 0);
|
||||
g_type_add_interface_static (type,
|
||||
ATK_TYPE_TABLE,
|
||||
&iface_info);
|
||||
}
|
||||
return type;
|
||||
}
|
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef MY_ATK_TABLE_H
|
||||
#define MY_ATK_TABLE_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <atk/atk.h>
|
||||
#include <my-atk-object.h>
|
||||
|
||||
#define MY_TYPE_ATK_TABLE (my_atk_table_get_type ())
|
||||
#define MY_ATK_TABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_TABLE, MyAtkTable))
|
||||
#define MY_ATK_TABLE_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_TABLE, MyAtkTableClass))
|
||||
#define MY_IS_ATK_TABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_TABLE))
|
||||
#define MY_IS_ATK_TABLE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_TABLE))
|
||||
#define MY_ATK_TABLE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_TABLE, MyAtkTableClass))
|
||||
|
||||
#define NROWS 4 /* row count */
|
||||
#define NCOLS 5 /* column count */
|
||||
|
||||
static gint ids[NROWS][NCOLS] =
|
||||
{ {0, 1, 2, 2, 3},
|
||||
{4, 5, 6, 7, 8},
|
||||
{9, 9, 10, 11, 12},
|
||||
{9, 9, 13, 14, -1} };
|
||||
|
||||
static gint row_ext[NROWS][NCOLS] =
|
||||
{ {1, 1, 1, 1, 1},
|
||||
{1, 1, 1, 1, 1},
|
||||
{2, 2, 1, 1, 1},
|
||||
{2, 2, 1, 1, 1} };
|
||||
|
||||
static gint col_ext[NROWS][NCOLS] =
|
||||
{ {1, 1, 2, 2, 1},
|
||||
{1, 1, 1, 1, 1},
|
||||
{2, 2, 1, 1, 1},
|
||||
{2, 2, 1, 1, 1} };
|
||||
|
||||
#define NCHILDREN 16 /* child object count */
|
||||
|
||||
// default string values
|
||||
#define DEF_CAPTION_TEXT "Default table caption"
|
||||
#define DEF_SUMMARY_TEXT "Default table summary"
|
||||
#define DEF_ROW_DESCR_TPL "Row No%d"
|
||||
#define DEF_COL_DESCR_TPL "Column No%d"
|
||||
|
||||
/* row and column headers */
|
||||
typedef struct
|
||||
{
|
||||
AtkObject* hdr;
|
||||
gboolean selected; /* TRUE if the row/column is selected, FALSE otherwise */
|
||||
} TestSimpleHeaderStruct;
|
||||
|
||||
/* This struct represents a table cell */
|
||||
typedef struct
|
||||
{
|
||||
MyAtkObject* elem; /* the element */
|
||||
guint ext_row; /* its row extent */
|
||||
guint ext_col; /* its column extent */
|
||||
} TestSimpleCell;
|
||||
|
||||
typedef struct _MyAtkTable MyAtkTable;
|
||||
typedef struct _MyAtkTableClass MyAtkTableClass;
|
||||
|
||||
struct _MyAtkTable
|
||||
{
|
||||
MyAtkObject parent;
|
||||
|
||||
gboolean disposed;
|
||||
|
||||
MyAtkObject* child[NCHILDREN];
|
||||
MyAtkObject* not_a_child;
|
||||
TestSimpleHeaderStruct row[NROWS];
|
||||
TestSimpleHeaderStruct col[NCOLS];
|
||||
guint nrows;
|
||||
guint ncols;
|
||||
AtkObject* caption;
|
||||
AtkObject* summary;
|
||||
};
|
||||
|
||||
struct _MyAtkTableClass
|
||||
{
|
||||
MyAtkObjectClass parent;
|
||||
};
|
||||
|
||||
GType
|
||||
my_atk_table_get_type (void);
|
||||
|
||||
#endif /*MY_ATK_TABLE_H*/
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef MY_ATK_TEXT_H
|
||||
#define MY_ATK_TEXT_H
|
||||
/*
|
||||
* MyAtkText: implements AtkText and AtkEditableText
|
||||
*/
|
||||
#include <atk/atk.h>
|
||||
|
||||
#include "my-atk-object.h"
|
||||
|
||||
#define MY_TYPE_ATK_TEXT (my_atk_text_get_type ())
|
||||
#define MY_ATK_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_TEXT, MyAtkText))
|
||||
#define MY_ATK_TEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_TEXT, MyAtkTextClass))
|
||||
#define MY_IS_ATK_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_TEXT))
|
||||
#define MY_IS_ATK_TEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_TEXT))
|
||||
#define MY_ATK_TEXT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_TEXT, MyAtkTextClass))
|
||||
|
||||
typedef struct _MyAtkText MyAtkText;
|
||||
typedef struct _MyAtkTextClass MyAtkTextClass;
|
||||
|
||||
//Struct, describing bounds of one selection.
|
||||
typedef struct
|
||||
{
|
||||
gint start_offset, end_offset;
|
||||
}TextSelection;
|
||||
//Struct, describing values, needed for determine extent of characters
|
||||
typedef struct
|
||||
{
|
||||
gint base_x, base_y;//coordinates of the top-left corner of text
|
||||
gint pixels_above_line;
|
||||
gint pixels_below_line;
|
||||
gint size;//size of the character(height in pixels)
|
||||
gint pixels_between_characters;//monoscaped font
|
||||
gint width;//width of character
|
||||
}TextBounds;
|
||||
|
||||
struct _MyAtkText
|
||||
{
|
||||
MyAtkObject parent;
|
||||
|
||||
gchar* str;//string, containing text
|
||||
GList* attributes;//running atributes
|
||||
AtkAttributeSet *default_attributes;//default attributes
|
||||
|
||||
TextBounds bounds;
|
||||
|
||||
GArray* selections;
|
||||
|
||||
gint caret_offset;
|
||||
};
|
||||
|
||||
struct _MyAtkTextClass
|
||||
{
|
||||
MyAtkObjectClass parent;
|
||||
gchar* clipboard;
|
||||
};
|
||||
|
||||
GType my_atk_text_get_type();
|
||||
|
||||
void my_atk_text_interface_init(gpointer g_iface, gpointer iface_data);
|
||||
#endif /*MY_ATK_TEXT_H*/
|
|
@ -0,0 +1,132 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <atk/atk.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include "my-atk-object.h"
|
||||
#include "my-atk-value.h"
|
||||
|
||||
//*************************implementation***********************
|
||||
//implementation of virtual functions
|
||||
//******************get_current_value*******************
|
||||
static void my_atk_value_get_current_value(AtkValue *obj, GValue *value)
|
||||
{
|
||||
g_return_if_fail(MY_IS_ATK_VALUE(obj));
|
||||
MyAtkValue* self = (MyAtkValue*)obj;
|
||||
|
||||
g_value_init(value, G_TYPE_INT);
|
||||
g_value_set_int(value, self->current);
|
||||
}
|
||||
//******************get_maximum_value*******************
|
||||
static void my_atk_value_get_maximum_value(AtkValue *obj, GValue *value)
|
||||
{
|
||||
g_return_if_fail(MY_IS_ATK_VALUE(obj));
|
||||
MyAtkValue* self = (MyAtkValue*)obj;
|
||||
|
||||
g_value_init(value, G_TYPE_INT);
|
||||
g_value_set_int(value, self->maximum);
|
||||
}
|
||||
//******************get_minimum_value*******************
|
||||
static void my_atk_value_get_minimum_value(AtkValue *obj, GValue *value)
|
||||
{
|
||||
g_return_if_fail(MY_IS_ATK_VALUE(obj));
|
||||
MyAtkValue* self = (MyAtkValue*)obj;
|
||||
|
||||
g_value_init(value, G_TYPE_INT);
|
||||
g_value_set_int(value, self->minimum);
|
||||
}
|
||||
//******************set_current_value*******************
|
||||
static gboolean my_atk_value_set_current_value(AtkValue *obj, const GValue *value)
|
||||
{
|
||||
g_return_val_if_fail(MY_IS_ATK_VALUE(obj), FALSE);
|
||||
MyAtkValue* self = (MyAtkValue*)obj;
|
||||
|
||||
if(self->readonly) return FALSE;
|
||||
|
||||
gint new_value = g_value_get_int(value);
|
||||
if(new_value < self->minimum || new_value > self->maximum) return FALSE;
|
||||
|
||||
self->current = new_value;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
//others
|
||||
MyAtkValue* my_atk_value_new(gint minimum, gint maximum, gint current)
|
||||
{
|
||||
MyAtkValue* result = g_object_new(MY_TYPE_ATK_VALUE, NULL);
|
||||
if(result == NULL) return NULL;
|
||||
result->minimum = minimum;
|
||||
result->maximum = maximum;
|
||||
result->current = current;
|
||||
|
||||
return result;
|
||||
}
|
||||
static void my_atk_value_instance_init(GTypeInstance *obj, gpointer g_class)
|
||||
{
|
||||
MyAtkValue *self = (MyAtkValue*)obj;
|
||||
|
||||
self->minimum = 0;
|
||||
self->maximum = 0;
|
||||
self->current = 0;
|
||||
|
||||
self->readonly = FALSE;
|
||||
}
|
||||
static void my_atk_value_interface_init(gpointer g_iface, gpointer iface_data)
|
||||
{
|
||||
AtkValueIface *klass = (AtkValueIface*)g_iface;
|
||||
|
||||
klass->get_current_value = my_atk_value_get_current_value;
|
||||
klass->get_minimum_value = my_atk_value_get_minimum_value;
|
||||
klass->get_maximum_value = my_atk_value_get_maximum_value;
|
||||
|
||||
klass->set_current_value = my_atk_value_set_current_value;
|
||||
}
|
||||
|
||||
GType my_atk_value_get_type()
|
||||
{
|
||||
static GType type = 0;
|
||||
if(type == 0)
|
||||
{
|
||||
static const GTypeInfo typeInfo =
|
||||
{
|
||||
sizeof(MyAtkValueClass),
|
||||
NULL, //base_init
|
||||
NULL, //base_finalize
|
||||
NULL, //class_init
|
||||
NULL, //class_finalize
|
||||
NULL, //class_data
|
||||
sizeof(MyAtkValue),
|
||||
0, //n_preallocs
|
||||
my_atk_value_instance_init //instance_init
|
||||
};
|
||||
|
||||
static const GInterfaceInfo iface_info =
|
||||
{
|
||||
my_atk_value_interface_init, /* interface_init*/
|
||||
NULL, /* interface_finalize*/
|
||||
NULL /* interface_data */
|
||||
};
|
||||
type = g_type_register_static(MY_TYPE_ATK_OBJECT, "MyAtkValue", &typeInfo, 0);
|
||||
g_type_add_interface_static(type,
|
||||
ATK_TYPE_VALUE,
|
||||
&iface_info);
|
||||
}
|
||||
return type;
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef MY_ATK_VALUE_H
|
||||
#define MY_ATK_VALUE_H
|
||||
/*
|
||||
* MyAtkValue: derives AtkObject
|
||||
* and implements AtkValue
|
||||
*/
|
||||
#include <atk/atk.h>
|
||||
|
||||
#define MY_TYPE_ATK_VALUE (my_atk_value_get_type ())
|
||||
#define MY_ATK_VALUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_VALUE, MyAtkValue))
|
||||
#define MY_ATK_VALUE_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_VALUE, MyAtkValueClass))
|
||||
#define MY_IS_ATK_VALUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_VALUE))
|
||||
#define MY_IS_ATK_VALUE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_VALUE))
|
||||
#define MY_ATK_VALUE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_VALUE, MyAtkValueClass))
|
||||
|
||||
typedef struct _MyAtkValue MyAtkValue;
|
||||
typedef struct _MyAtkValueClass MyAtkValueClass;
|
||||
|
||||
struct _MyAtkValue
|
||||
{
|
||||
MyAtkObject parent;
|
||||
|
||||
gint minimum, maximum, current;
|
||||
gboolean readonly;
|
||||
};
|
||||
|
||||
struct _MyAtkValueClass
|
||||
{
|
||||
MyAtkObjectClass parent;
|
||||
};
|
||||
|
||||
MyAtkValue* my_atk_value_new(gint minimum, gint maximium, gint current);
|
||||
GType my_atk_value_get_type();
|
||||
#endif /*MY_ATK_VALUE_H*/
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef MY_ATK_H
|
||||
#define MY_ATK_H
|
||||
|
||||
#include <my-atk-action.h>
|
||||
#include <my-atk-component.h>
|
||||
#include <my-atk.h>
|
||||
#include <my-atk-document.h>
|
||||
#include <my-atk-hyperlink.h>
|
||||
#include <my-atk-hypertext.h>
|
||||
#include <my-atk-object.h>
|
||||
#include <my-atk-streamable-content.h>
|
||||
#include <my-atk-text.h>
|
||||
#include <my-atk-value.h>
|
||||
|
||||
#endif /*MY_ATK_H*/
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <atk/atk.h>
|
||||
|
||||
GHashTable* resources = NULL;
|
||||
|
||||
void resource_storage_init()
|
||||
{
|
||||
if(resources == NULL)
|
||||
resources = g_hash_table_new_full(g_str_hash, g_str_equal,
|
||||
(GDestroyNotify)g_free, (GDestroyNotify)g_object_unref);
|
||||
}
|
||||
|
||||
void resource_storage_free()
|
||||
{
|
||||
if(resources == NULL) return;
|
||||
g_hash_table_destroy(resources);
|
||||
resources = NULL;
|
||||
}
|
||||
|
||||
void resource_storage_add(const gchar* name, AtkObject* resource)
|
||||
{
|
||||
if(resources == NULL) return;
|
||||
g_hash_table_insert(resources, g_strdup(name), g_object_ref(resource));
|
||||
}
|
||||
|
||||
AtkObject* resource_storage_get(const gchar* name)
|
||||
{
|
||||
if(resources == NULL) return NULL;
|
||||
return g_hash_table_lookup(resources, name);
|
||||
}
|
||||
void resources_storage_remove(const gchar* name)
|
||||
{
|
||||
if(resources == NULL) return;
|
||||
g_hash_table_remove(resources, name);
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef RESOURCES_STORAGE_H
|
||||
#define RESOURCES_STORAGE_H
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
void resource_storage_init();
|
||||
|
||||
void resource_storage_free();
|
||||
|
||||
void resource_storage_add(const gchar* name, AtkObject* resource);
|
||||
|
||||
AtkObject* resource_storage_get(const gchar* name);
|
||||
|
||||
void resources_storage_remove(const gchar* name);
|
||||
|
||||
#endif /*RESOURCES_STORAGE_H*/
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Copyright 2008 Codethink Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <glib.h>
|
||||
/*
|
||||
* Functions and macros widely used in the tests.
|
||||
*/
|
||||
|
||||
//same as strcmp() == 0 but works properly for NULL pointers
|
||||
gboolean my_strcmp(const gchar* str1, const gchar* str2)
|
||||
{
|
||||
if(str1 == str2) return TRUE;
|
||||
if(str1 == NULL || str2 == NULL) return FALSE;
|
||||
|
||||
return strcmp(str1,str2) == 0;
|
||||
}
|
||||
//same as strlen but works properly for NULL pointer and returns gint instead of guint
|
||||
gint my_strlen(const gchar* str)
|
||||
{
|
||||
if(str == NULL)return 0;
|
||||
return (gint)strlen(str);
|
||||
}
|
||||
//same as strncmp() == 0 but works properly for NULL pointers
|
||||
gboolean my_strncmp(const gchar* str1, const gchar* str2, gint n)
|
||||
{
|
||||
if(n <= 0)return TRUE;
|
||||
if(str1 == str2)return TRUE;
|
||||
if(str1 == NULL || str2 == NULL)return FALSE;
|
||||
|
||||
return strncmp(str1, str2, n) == 0;
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue