diff options
366 files changed, 222093 insertions, 0 deletions
@@ -0,0 +1,11 @@ +Lucas Rocha <[email protected]> +Felix Riemann <[email protected]> +Claudio Saavedra <[email protected]> +Tim Gerla <[email protected]> +Philip Van Hoof <[email protected]> +Paolo Borelli <[email protected]> +Jens Finke <[email protected]) +Federico Mena Quintero <[email protected]> +Arik Devens <[email protected]> +Michael Meeks <[email protected]> +Martin Baulig <[email protected]> @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 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 Library 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 geomraphical 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library General +Public License instead of this License. @@ -0,0 +1,30 @@ +Hacking on the Eye of Mate +=========================== + +o spec file: + People from the mate packaging project are welcome to contribute fixes for + the spec file. + +o build fixes: + "build sheriff commits welcome". Please send a mail with your patch to either + the maintainers or [email protected]. If you don't know what "build sheriff" + means please read the mail by Michael Meeks: + http://mail.gnome.org/archives/mate-hackers/2002-March/msg00051.html + +o In all other cases the following rules apply: + +The code for Eye of Mate was written with several goals in mind: + + - maintainable, + - extensible, + - correct, + - documented. + +If you want to work on EOM as well, please read the MATE Programming +Guidelines first, understand their purpose, and keep them in mind when +writing code for EOM. + +If you have a patch you would like to put into EOM, please file a bug +using http://bugzilla.gnome.org for the product EOM and attach the +patch to it. This way your submisson won't get lost. + diff --git a/MAINTAINERS b/MAINTAINERS new file mode 100644 index 0000000..29bf84a --- /dev/null +++ b/MAINTAINERS @@ -0,0 +1,7 @@ +Claudio Saavedra +E-mail: [email protected] +Userid: csaavedra + +Felix Riemann +E-mail: [email protected] +Userid: friemann diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..773303c --- /dev/null +++ b/Makefile.am @@ -0,0 +1,58 @@ +if ENABLE_JPEG +jpeg_DIRS = jpegutils +endif + +SUBDIRS = $(jpeg_DIRS) cut-n-paste bindings src plugins po help data doc + +EXTRA_DIST = \ + HACKING \ + MAINTAINERS \ + ChangeLog-2.6 \ + ChangeLog-2.18 \ + ChangeLog.pre-git \ + mate-doc-utils.make + +DISTCLEANFILES = \ + intltool-extract \ + intltool-merge \ + intltool-update \ + mate-doc-utils.make + +DISTCHECK_CONFIGURE_FLAGS = --disable-schemas-install --disable-scrollkeeper --enable-gtk-doc + +# Ignore scrollkeeper issues for now. @#*$& scrollkeeper +distuninstallcheck_listfiles = find . -type f -print | grep -v scrollkeeper | grep -v /share/mate/help/ | grep -v \.omf + +MAINTAINERCLEANFILES = \ + $(srcdir)/aclocal.m4 \ + $(srcdir)/config.guess \ + $(srcdir)/config.h.in \ + $(srcdir)/config.sub \ + $(srcdir)/depcomp \ + $(srcdir)/gtk-doc.make \ + $(srcdir)/install-sh \ + $(srcdir)/ltmain.sh \ + $(srcdir)/missing \ + $(srcdir)/mkinstalldirs \ + $(srcdir)/omf.make \ + $(srcdir)/xmldocs.make + +-include $(top_srcdir)/git.mk + +# This is the last commit before the ChangeLog was converted +CHANGELOG_START = 6a7944721e667a5c2d87e841917d850aea885019 + +dist-hook: + @if test -d "$(srcdir)/.git"; \ + then \ + echo Creating ChangeLog && \ + ( cd "$(top_srcdir)" && \ + echo '# Generated by Makefile. Do not edit.'; echo; \ + $(top_srcdir)/missing --run git log -M -C --stat \ + $(CHANGELOG_START)..) > ChangeLog.tmp \ + && mv -f ChangeLog.tmp $(top_distdir)/ChangeLog \ + || ( rm -f ChangeLog.tmp ; \ + echo Failed to generate ChangeLog >&2 ); \ + else \ + echo A git clone is required to generate a ChangeLog >&2; \ + fi @@ -0,0 +1,3402 @@ +Version 2.32.0 +-------------- + +New and updated translations: + +- Khaled Hosny [ar] +- Ivaylo Valkov [bg] +- Gil Forcada [ca] +- Adrian Guniš [cs] +- Kenneth Nielsen [da] +- Christian Kirbach [de] +- Jorge González [es] +- Ivar Smolin [et] +- Iñaki Larrañaga Murgoitio [eu] +- Bruno Brouard, Claude Paroz [fr] +- Fran Dieguez [gl] +- Yaron Shahrabani [he] +- Gianvito Cavasoli [it] +- Takayuki KUSANO [ja] +- Baurzhan Muftakhidinov [kk] +- Aurimas Černius, Gintautas Miliauskas [lt] +- Kjartan Maraas [nb] +- Wouter Bolsterlee [nl] +- A S Alam [pa] +- Piotr Drąg [pl] +- Duarte Loreto [pt] +- Daniel S. Koda, Henrique P. Machado [pt_BR] +- Yuri Myasoedov [ru] +- Matej Urbančič [sl] +- Daniel Nylander [sv] +- Dean Lee, Aron Xu [zh_CN] +- Chao-Hsiung Liao [zh_HK, zh_TW] + +Version 2.31.92 +--------------- + + * Copy image to disk when setting as desktop background when it is + located on removable media (Claudio Saavedra) + * Ask user whether to reload an externally modified image (Claudio Saavedra) + * Miscellaneous code fixes (Claudio Saavedra) + +Bug fixes: + + #534348, eom should suggest to reload a modified file (Claudio Saavedra) + #613056, Side pane always shown at startup when plug-in is activated + (Claudio Saavedra) + #625384, Background setting doesn't work as expected (Claudio Saavedra) + +New and updated translations: + +- Khaled Hosny [ar] +- Adrian Guniš [cs] +- Kenneth Nielsen [da] +- Christian Kirbach [de] +- Michael Kotsarinis [el] +- Bruce Cowan [en_GB] +- Claude Paroz [fr] +- Yaron Shahrabani [he] +- Gabor Kelemen [hu] +- Andika Triwidada [id] +- Kjartan Maraas [nb] +- A S Alam [pa] +- Piotr Drąg [pl] +- Duarte Loreto [pt] +- Matej Urbančič [sl] +- Милош Поповић [sr] +- Miloš Popović [sr@latin] +- Daniel Nylander [sv] +- Dean Lee [zh_CN] + +New and updated manual translations + +- 朱涛 [zh_CN] + +Version 2.31.91 +--------------- + +Bug fixes: + + #628148, Miscellaneous string fixes (Philip Withnall) + +New and updated translations: + +- Khaled Hosny [ar] +- Adrian Guniš [cs] +- Philip Withnall [en_GB] +- Jorge González [es] +- Ivar Smolin [et] +- Fran Dieguez [gl] +- Gabor Kelemen [hu] +- Kjartan Maraas [nb] +- Daniel Nylander [sv] +- Chao-Hsiung Liao [zh_HK, zh_TW] + +Version 2.31.90 +--------------- + + * Draw images against black background by default to gain a + better contrast (Felix Riemann) + * Backport UI elements from master to change background color (Felix Riemann) + * Code improvements (Claudio Saavedra, Felix Riemann) + +Bug fixes: + + #616450, Use a nicer background colour (Felix Riemann) + #625325, Useless Yes/No question (Felix Riemann) + #626569, Button bar appears when deleting in fullscreen (Felix Riemann) + +New and updated translations: + +- Jorge González [es] +- Ivar Smolin [et] +- Claude Paroz [fr] +- Fran Dieguez [gl] +- Yaron Shahrabani [he] +- Andika Triwidada [id] +- Kjartan Maraas [nb] +- A S Alam [pa] +- Matej Urbančič [sl] +- Милош Поповић [sr] +- Miloš Popović [sr@latin] +- Daniel Nylander [sv] +- Yinghua Wang [zh_CN] + +Version 2.31.5 +-------------- + + * New toolbar button and 'P' shortcut to pause the slideshow (Felix + Riemann) + * UI improvements (Florian Müllner) + * Code improvements (Felix Riemann) + + Note: this is a special release, which doesn't really follow from + 2.31.4 but from 2.30.2 instead. 2.31.4 was targetting MATE 3.0, + which won't be released until March 2011. The changes included in + this release, other than the immediately listed, are all those + listed below, with the exception of the changes involving GSettings + and GTK+ 3.0. + + New translations might have been lost in the process. + +Version 2.31.4 +-------------- + + * Rename "Image Collection" to "Image Gallery" (Felix Riemann) + * Update totem-scrsaver to use GDBus (Bastien Nocera, Florian Müllner) + * Build fixes (Claudio Saavedra, Felix Riemann) + * Optimize GSettings-usage and fix key names (Felix Riemann) + +Bug fixes: + + #618304, Rename 'Image Collection' to 'Gallery' (Felix Riemann) + #621370, invalid character (_) in gsettings key (Felix Riemann) + #621439, Update totem-scrsaver from upstream (Bastien Nocera, Florian Müllner) + #621616, eom-2.30.1 fails to configure when --without-libjpeg is passed + (Claudio Saavedra) + +New and updated translations: + +- Mario Blättermann [de] +- Kristjan SCHMIDT [eo] +- Jorge González [es] +- Ivar Smolin [et] +- Fran Diéguez [gl] +- Yaron Shahrabani [he] +- Kjartan Maraas [nb] + +New and updated manual translations: + +- Carles Ferrando Garcia [ca] +- Mario Blättermann [de] +- Jorge González [es] +- Jukka Heikkilä [fi] + +Version 2.31.3 +-------------- + + * Begin GSettings migration (Felix Riemann) + * Allow using a custom background color for the image view (Felix Riemann) + +Bug fixes: + + #502992, allow user to specify background color (Felix Riemann) + +New and updated translations: + +- Ivar Smolin [et] +- Yaron Shahrabani [he] +- Sira Nokyoongtong [th] + +Version 2.31.2 +-------------- + + * Make eom fully GSEAL-compilant (Felix Riemann) + +Bug fixes: + + #606883, Make eom GSEAL-compatible (Andre Klapper, Felix Riemann) + +New and updated translations: + +- Ihar Hrachyshka [be] +- Thomas Thurman [en@shaw] +- Wouter Bolsterlee [nl] +- Manoj Kumar Giri [or] +- Matej Urbančič [sl] + +Version 2.31.1 +-------------- + + * Render SVGs natively when zoomed (Hiroyuki Ikezoe) + * Print SVGs as vector image (Felix Riemann) + * Embed page setup in print dialog (Marek Kašík) + * Add high resolution app icon (Hylke Bons) + * Various UI improvements (Hylke Bons, Gabriel Corvalan Cornejo) + * Further GSEAL-compatibility work (Andre Klapper, Felix Riemann) + +Bug fixes: + + #108435, SVG scaling support (Hiroyuki Ikezoe) + #518055, SVG being printed as low res bitmap (Felix Riemann) + #614405, use icons for recent file list (Hylke Bons) + #614451, Embed page setup dialog in the print dialog (Marek Kašík) + #614457, menu tweaks (Hylke Bons, Felix Riemann) + #614497, bad wording in open file dialog (Gabriel Corvalan Cornejo) + #615344, Does not show external linked images that the URI is + relative path in svg (Hiroyuki Ikezoe) + #615356, hires icon for eom (Hylke Bons) + #615387, libjpeg-8 breaks lossless JPEG modification (Felix Riemann) + #615531, Please support --version (Felix Riemann) + +New and updated translations: + +- Amitakhya Phukan [as] +- Runa Bhattacharjee [bn_IN] +- Gil Forcada [ca] +- Gil Forcada [ca@valencia] +- Jorge González [es] +- Ivar Smolin [et] +- Fran Diéguez [gl] +- Shankar Prasad [kn] +- Žygimantas Beručka [lt] +- Anita Reitere [lv] +- Ani Peter [ml] +- Sandeep Shedmake [mr] +- Kjartan Maraas [nb] +- Wouter Bolsterlee [nl] +- Yannig Marchegay (Kokoyaya) [oc] +- Krishna Babu K [te] +- Theppitak Karoonboonyanan [th] +- Gheyret T.Kenji [ug] + +Version 2.30.2 +-------------- + +Bug fixes: + + #621616, eom-2.30.1 fails to configure when --without-libjpeg + is passed (Claudio Saavedra) + +New und updated translations: + +- Manoj Kumar Giri [or] + +New and updated manual translations: + +- Jukka Heikkilä [fi] + +Version 2.30.1 +-------------- + +Bug fixes: + + #615387, libjpeg-8 breaks lossless JPEG modification (Felix Riemann) + +New and updated translations: + +- Runa Bhattacharjee [bn_IN] +- Gil Forcada, Jordi Serratosa [ca] +- Carles Ferrando, Gil Forcada [ca@valencia] +- Mattias Põldaru [et] +- Shankar Prasad [kn] +- Žygimantas Beručka [lt] +- Anita Reitere [lv] +- Ani Peter [ml] +- Sandeep Shedmake [mr] +- Wouter Bolsterlee [nl] +- Yannig Marchegay (Kokoyaya) [oc] +- Krishna Babu K [te] +- Theppitak Karoonboonyanan [th] +- Gheyret T.Kenji [ug] + +Version 2.30.0 +--------------- + +New and updated translations: + +- Krasimir Chonov [bg] +- Sadia Afroz[bn] +- Gil Forcada [ca] +- Kenneth Nielsen [da] +- Thanos Lefteris [el] +- Bruce Cowan [en_GB] +- Mattias Põldaru [et] +- Iñaki Larrañaga Murgoitio [eu] +- Tommi Vainikainen [fi] +- Claude Paroz [fr] +- Sweta Kothari [gu] +- Yaron Shahrabani [he] +- Gabor Kelemen [hu] +- Gianvito Cavasoli [it] +- Hideki Yamane (Debian-JP), SUGITA Toshinori [ja] +- Changwoo Ryu [ko] +- Gintautas Miliauskas [lt] +- A S Alam [pa] +- Piotr Drąg [pl] +- Duarte Loreto [pt] +- Горан Ракић [sr] +- Goran Rakić [sr@latin] +- Daniel Nylander [sv] +- Maxim Dziumanenko [uk] +- Chao-Hsiung Liao [zh_HK, zh_TW] + +Version 2.29.91 +--------------- + + * Build fixes (Maciej Piechotka, Felix Riemann) + +Bug fixes: + + #609184, Build failure: doesn't look for some required libs (Felix Riemann) + #610692, eom 2.29.90 fails to build (Maciej Piechotka) + +New and updated translations: + +- Khaled Hosny [ar] +- Amitakhya Phukan [as] +- Adrian Guniš [cs] +- Jorge González [es] +- Fran Diéguez [gl] +- Kjartan Maraas [nb] +- Vladimir Melo [pt_BR] +- Lucian Adrian Grijincu [ro] +- Alexander Saprykin [ru] +- Matej Urbančič [sl] +- Dr,T,Vasudevan [ta] + +Version 2.29.90 +--------------- + + * Further GSEAL-compatibility improvements (Felix Riemann) + * Allow switching to a random image from the collection (Quinten Lansu) + * Build fixes (Daniel Macks) + * Ask user if he actually needs the Appearance capplet after setting a new + desktop wallpaper through Eye of MATE (Felix Riemann) + +Bug fixes: + + #606935, "Change desktop background" dialog shows up when using + "Set as desktop wallpaper" option in image viewer (Felix Riemann) + #609184, Build failure: doesn't look for some required libs (Daniel Macks) + +New and updated translations: + +- Khaled Hosny [ar] +- Krasimir Chonov [bg] +- Sadia Afroz [bn] +- Christian Kirbach, Felix Riemann [de] +- Jorge González [es] +- Ivar Smolin [et] +- Sweta Kothari [gu] +- Kjartan Maraas [nb] +- Michel Recondo [pt_BR] +- Matej Urbančič [sl] +- Dr,T,Vasudevan [ta] +- Theppitak Karoonboonyanan [th] +- YunQiang Su [zh_CN] +- Chao-Hsiung Liao [zh_HK, zh_TW] + +Version 2.29.5 +-------------- + + * Remember last save location during session (Felix Riemann) + * String fixes / improvements (Philip Withnall) + * Improve GSEAL-compatibility (Felix Riemann) + * Use GtkInfoBar widget for the error message area (Felix Riemann) + +Bug fixes: + + #604230, Don't remaind the last save location (directory) (Felix Riemann) + #605851, Miscellaneous string fixes (Philip Withnall) + #605852, Use Pango markup attributes in GtkBuilder file (Philip Withnall) + +New and updated translations + +- Philip Withnall [en_GB] +- Jorge González [es] +- Laurent Coudeur [fr] +- Yaron Shahrabani [he] +- Kjartan Maraas [nb] +- Nils-Christoph Fiedler [nds] +- Daniel Nylander [sv] +- Clytie Siddall [vi] +- Maxim Dziumanenko [uk] + +New and updated manual translations + +- Maxim V. Dziumanenko [uk] + +Version 2.29.3 +-------------- + + * Code fixes / improvements (Felix Riemann) + +New and updated translations + +- Khaled Hosny [ar] +- Ivar Smolin [et] +- Tao Wei [zh_CN] + +Version 2.29.2 +-------------- + + * Add dialog asking to save changes on exit (Marcus Carlson) + * Build system fixes (Sebastien Bacher) + +Bug fixes: + + #322243, eom doesn't ask whether to save changes (Marcus Carlson) + #600893, don't use LOCALMODLIBS in the configure (Sebastien Bacher) + +New and updated translations + +- Alexander Shopov [bg] +- Thomas Thurman [en@shaw] +- Jorge González [es] +- Antón Méixome [gl] +- Matej Urbančič [sl] + +Version 2.29.1 +-------------- + + * Support for animated GIFs (Raoul Berger) + * Enhance statusbar translatability (Khaled Hosny) + * Code fixes/improvements (Josh Lee, Felix Riemann) + +Bug fixes: + + #335093, Support for animated images (Raoul Berger) + #566104, Reverse Left/Right arrows action in RTL mode (Felix Riemann) + #597059, Make statusbar info string translatable (Khaled Hosny) + #597754, Incorrect behavior when slideshow delay is set to 0 seconds + (Josh Lee) + +New and updated translations + +- Khaled Hosny [ar] +- Denis Arnaud [br] +- Jordi Mas [ca] +- Adrian Guniš [cs] +- Christian Kirbach [de] +- Jorge González [es] +- Ivar Smolin [et] +- Claude Paroz [fr] +- Gabor Kelemen [hu] +- Davide Falanga [it] +- Kjartan Maraas [nb] +- A S Alam [pa] +- Wancharle Sebastião Quirino [pt_BR] +- Leonid Kanter [ru] +- Matej Urbančič [sl] +- Daniel Nylander [sv] +- Dr.T.Vasudevan [ta] + +New and updated manual translations + +- Khaled Hosny [ar] + +Version 2.28.0 +-------------- + +New and updated translations: +- Amitakhya Phukan [as] +- astur [ast] +- Runa Bhattacharjee [bn_IN] +- Denis ARNAUD [br] +- Kenneth Nielsen [da] +- Giannis Katsampirhs [el] +- Philip Withnall [en_GB] +- Sweta Kothari [gu] +- Rajesh Ranjan [hi] +- Shankar Prasad [kn] +- Gintautas Miliauskas [lt] +- Ani Peter [ml] +- Sandeep Shedmake [mr] +- Manoj Kumar Giri [or] +- A S Alam [pa] +- Adi Roiban [ro] +- Matej Urbančič [sl] +- Krishna Babu K [te] +- Maxim Dziumanenko [uk] + +New and updated manual translations: +- Ask Hjorth Larsen [da] +- Μάριος Ζηντίλης, Kostas Papadimas [el] + +Version 2.27.92 +--------------- + +Bug fixes: + + #592945, Images not automatically rotated (Felix Riemann) + #594403, Display order is broken in some locales (Felix Riemann) + +New and updated translations +- Runa Bhattacharjee [bn_IN] +- Denis Arnaud [br] +- Iñaki Larrañaga Murgoitio [eu] +- Gabor Kelemen [hu] +- Davide Falanga [it] +- Shankar Prasad [kn] +- Changwoo Ryu [ko] +- Duarte Loreto [pt] +- Miloš Popović [sr, sr@latin] +- Askin Yollu [tr] + +Version 2.27.91 +--------------- + + * Make "Open With..." plugin look more like Caja's (Marcus Carlson) + * Code fixes / improvements (Felix Riemann) + +Bug fixes: + + #592649, Open with list should be in sync with caja (Marcus Carlson) + +New and updated translations +- Khaled Hosny [ar] +- Alexander Shopov [bg] +- Adrian Guniš [cs] +- Tommi Vainikainen [fi] +- Laurent Coudeur [fr] +- Seán de Búrca [ga] +- Antón Méixome [gl] +- Piotr Drąg [pl] +- Theppitak Karoonboonyanan [th] + +Version 2.27.90 +--------------- + + * Fix crashes with plugins using Clutter 1.0 (Felix Riemann) + * Make netbook-mode and xdg-fallback always enabled (Felix Riemann) + * Support Automake 1.11's silent build rules (Felix Riemann) + * Generate ChangeLog from git history (Lucas Rocha) + * Build system fixes (Felix Riemann) + +Bug fixes: + + #590124, Eom fails to compile if exempi/exif are not available (Felix Riemann) + +New and updated translations: + +- Carles Ferrando [ca@valencia] +- Adrian Gunis [cs] +- Jochen Skulj [de] +- Jorge González [es] +- Ivar Smolin [et] +- Iñaki Larrañaga Murgoitio [eu] +- Antón Méixome [gl] +- Yaron Shahrabani [he] +- Peteris Krisjanis [lv] +- Kjartan Maraas [nb] +- Manoj Kumar Giri [or] +- Krix Apolinário, Leonardo Ferreira Fontenelle [pt_BR] +- Daniel Nylander [sv] +- Dr.T.Vasudevan [ta] +- Chao-Hsiung Liao [zh_HK, zh_TW] + +Version 2.27.5 +-------------- + + * Add option to move the detailled metadata list on its own page in the image + properties dialog; useful on small screens (Felix Riemann) + * Add option to have filechooser show the XDG pictures folder by default if + no image is loaded (Felix Riemann) + * Code improvements (Claudio Saavedra, Frédéric Péters) + * Build system improvements / fixes (Felix Riemann) + +Bug fixes: + + #566810, Image properties dialog too big for netbooks (Felix Riemann) + #589151, Let filechooser fall back to user's pictures folder (Felix Riemann) + #589584, always show icon for rotate/flip menu items (Frédéric Péters) + +New and updated translations + +- Khaled Hosny [ar] +- Jorge González [es] +- Ivar Smolin [et] +- Ilkka Tuohela [fi] +- César Veiga, Leonardo Ferreira Fontenelle [pt_BR] +- Bùi Xuân Dương, Nguyễn Thái Ngọc Duy [vi] +- Chao-Hsiung Liao [zh_HK, zh_TW] + +New and updated manual translations + +- Marek Černocký [cs] + +Version 2.27.4 +-------------- + + * Allow having a "Save" button on the toolbar (Felix Riemann) + * Try to realise the main window from the main loop to reduce the risk + of crashes when clutter-using plugins use the sidebar. (Felix Riemann) + +New and updated translations: + +- Mark Krapivner [he] +- Daniel Nylander [sv] +- wanderlust [uk] + +Version 2.27.3 +-------------- + +Bug fixes: + + #585357, Undefined entity in .de helpfile (Felix Riemann) + +New and updated translations: + +- Kjartan Maraas [nb] + +Version 2.27.2 +-------------- + + * Interpolation controllable independently for zoom-in and zoom-out + (Brad Greco, Evert Verhellen) + * Code improvements / fixes (Felix Riemann) + +Bug fixes: + + #491197, Avoiding zoom-in blurriness (Brad Greco, Evert Verhellen) + #583268, properties in image properties dialog not selectable (Felix Riemann) + #583448, Crash on exif data (Felix Riemann) + +New and updated translations: +- Nathan-J. Hirschauer [de] +- Jorge González [es] +- Ivar Smolin [et] +- Dr.T.Vasudevan [ta] + +New and updated manual translations: + +- Βασίλης Κοντογιάνης, Simos Xenitellis [el] + +Version 2.27.1 +-------------- + + * Drop libart_lgpl dependency (Felix Riemann) + * Allow disabling trash confirmation dialog (Felix Riemann) + * Shortcut improvements (Gabor Kelemen, Felix Riemann, Claudio Saavedra, + Cyriac Thomas) + * Reduce number of exported symbols (Felix Riemann) + * UI improvements (Claudio Saavedra, Robin Stocker) + * Code improvements / fixes (Josselin Mouette, Felix Riemann, + Claudio Saavedra) + +Bug fixes: + + #541967, Make possible to remove image with 'Delete' without being asked + for confirmation (Felix Riemann) + #543158, Make deletion confirmation dialog optional during session + (Felix Riemann) + #556378, "Best Fit" zoom setting should have a shortcut (Felix Riemann) + #557317, image collection's scroll bar doesn't have a proportional slider + (Robin Stocker) + #571732, Get rid of deprecated libart_lgpl (Felix Riemann) + #575772, Move to Trash button has no accelerator (Gabor Kelemen) + #576558, Crashes when trying to save write protected file + (Josselin Mouette, Felix Riemann) + #579212, JPEG file causes memory corruption (Claudio Saavedra) + #580600, eom crashes on drag&drop a directory from places menu (Felix Riemann) + #581180, Set as background on Right click (Cyriac Thomas) + +New and updated translations: + +- Osama Khalid [ar] +- Amitakhya Phukan [as] +- Thanos Lefteris, Simos Xenitellis [el] +- Jorge González [es] +- Claude Paroz [fr] +- Shankar Prasad [kn] +- Gintautas Miliauskas [lt] +- A S Alam [pa] +- Vladimir Melo [pt_BR] +- Matej Urban [sl] +- Miloš Popović [sr.po, sr@latin] +- Funda Wang [zh_CN] + +New and updated manual translations: + +- Felix Riemann [de] +- Marios Zindilis, Fotis Tsamis [el] +- Claude Paroz [fr] + +Version 2.26.0 +-------------- + +New and updated translations: + +- Runa Bhattacharjee [bn_IN] +- Kenneth Nielsen, Ask H. Larsen [da] +- Suso Baleato, Ignacio Casal Quinteiro [gl] +- Yaron Shahrabani [he] +- Rajesh Ranjan [hi] +- Žygimantas Beručka, Gintautas Miliauskas [lt] +- Rajesh Ranjan [mai] +- Ani Peter [ml] +- Sandeep Shedmake [mr] +- Manoj Kumar Giri [or] +- Duarte Loreto [pt] +- Nickolay V. Shmyrev [ru] +- I. Felix [ta] +- Krishna Babu K, Krishnababu K [te] + +New and updated manual translations: + +- Kenneth Nielsen [da] +- Philip Withnall [en_GB] +- Milo Casagrande [it] +- Łukasz Jernaś [pl] + +Version 2.25.92 +--------------- + + * Code improvements / fixes (Christian Persch, Claudio Saavedra) + * Typo fixes in UI / docs (Milo Casagrande, Łukasz Jernaś) + +Bug fixes: + + #550086, Rotate image counterclockwise shortcut (Felix Riemann) + #558086, simplify drag targets handling (Christian Persch) + #572410, eom crashed with SIGSEGV in g_closure_invoke() (Claudio Saavedra) + #572723, Misspelled word in a window (Milo Casagrande) + #572889, Possible typo (Łukasz Jernaś) + +New and updated translations: + +- Jordi Mas, David Planella [ca] +- Petr Kovar, Adrian Gunis [cs] +- Marios Zindilis, Simos Xenitellis [el] +- David Lodge, Philip Withnall [en_GB] +- Ivar Smolin [et] +- Claude Paroz [fr] +- Sweta Kothari [gu] +- Milo Casagrande [it] +- Shankar Prasad [kn] +- Changwoo Ryu [ko] +- Manoj Kumar Giri [or] +- Adi Roiban, Jani Monoses [ro] + +New and updated manual translations: + +- Joan Duran [ca] +- Jorge Gonzalez [es] +- Daniel Nylander [sv] + +Version 2.25.91 +--------------- + + * Additional workaround for CVE-2008-5978 (Morten Welinder) + +Bug fixes: + + #569228, eom: untrusted python modules search path (Morten Welinder) + +New and updated translations: + +- Ihar Hrachyshka [be@latin] +- Alexander Shopov [bg] +- Kenneth Nielsen [da] +- Christian Kirbach [de] +- Iñaki Larrañaga Murgoitio [eu] +- Gabor Kelemen [hu] +- Takeshi AIHANA [ja] +- Kjartan Maraas [nb] +- Wouter Bolsterlee [nl] +- Tomasz Dominikowski [pl] +- Duarte Loreto [pt] +- Adi Roiban, Jani Monoses [ro] +- Daniel Nylander [sv] +- Theppitak Karoonboonyanan [th] +- Clytie Siddall [vi] + +New and updated manual translations: + +- Ask. H. Larsen [da] +- Daniel Nylander [sv] + +Version 2.25.90 +--------------- + + * Support for deleting files that can't be trashed (Claudio Saavedra) + * Build system improvements / fixes (Luis Medinas, Felix Riemann) + * Code improvements / fixes (Christian Persch, Joaquim Rocha) + +Bug fixes: + + #441637, Patch to delete file when Trash isn't found (Claudio Saavedra) + #568410, eom 2.25.5 build fails (Felix Riemann) + #568882, don't rely on gtk implementation details (Christian Persch) + #569657, Eom needs update on data/eom.pc.in (Luis Medinas) + #569855, Unref on thumbnail manipulator functions (Joaquim Rocha) + +New and updated translations: + +- Jordi Mas, Gil Forcada [ca] +- Andre Klapper [de] +- Jorge González [es] +- Ilkka Tuohela [fi] +- Changwoo Ryu [ko] +- Krix Apolinário, Og Maciel, Henrique P. Machado, César Veiga [pt_BR] +- Chao-Hsiung Liao [zh_HK] +- Chao-Hsiung Liao [zh_TW] + +New and updated manual translations: + +- Andre Klapper [de] + +Version 2.25.5 +-------------- + + * Code improvements / fixes (Felix Riemann) + * Drop libmate dependency (Felix Riemann) + +Bug fixes: + + #559500, drop libmate dependency (Felix Riemann) + #557662, Cannot build doc without exif enabled. (Arun Raghavan) + #566104, Reverse Left/Right arrows action in RTL mode (Khaled Hosny) + #566190, scroll buttons of the icons navigation window are reversed for + RTL locales (Yair Hershkovitz) + +New and updated translations: + +- Gil Forcada, Jordi Mas [ca] +- Marios Zindilis [el] +- Jorge Gonzalez, Jorge González [es] +- Kjartan Maraas [nb] +- Nurali, Nurali Abdurahmonov [uz] + +Version 2.25.4 +-------------- + + * Code improvements / fixes (Felix Riemann) + * Python bindings improvements (Felix Riemann) + +Bug fixes: + + #566367, no weekday calculation in exif date display (Felix Riemann) + +New and updated translations: + +- Ivar Smolin [et] +- Gabor Kelemen [hu] +- Kjartan Maraas [nb] + +New and updated manual translations: + +- Jorge Gonzalez [es] + +Versio 2.25.3 +-------------- + + * Build system improvements (Daniel Macks, Felix Riemann) + * Code improvements / fixes (Claudio Saavedra, Friedrich Oslage, Tom Parker) + * Fetch tooltip data asynchronously (Claudio Saavedra) + * UI enhancements (Bob Mauchin, Robin Sonefors) + +Bug fixes: + + #514352, HIG says "Page Setup" not "Page Setup..." (Bob Mauchin) + #555480, Add a delete button (Robin Sonefors) + #558442, eom should load image tooltips data asynchronously (Claudio Saavedra) + #560070, Sub-optimal -I flag ordering (Daniel Macks) + #560073, Poor linking against convenience libs (Daniel Macks, Felix Riemann) + #563570, MATE Goal: Clean up GLib and GTK+ includes (Claudio Saavedra) + #564290, eom_image_load doesn't correctly clear errors on read issues + (Tom Parker) + #564526, eom SIGBUS on sparc (Friedrich Oslage) + +New and updated translations: + +- Jorge González [es] +- Mark Krapivner, Yair Hershkovitz [he] +- Daniel Nylander [sv] + +Version 2.25.2 +-------------- + + * Build system fixes / improvements (Felix Riemann, Kjartan Maraas) + * Workarounds to make remote images work again (Felix Riemann) + * Fix broken keyboard keys (Frederic Peters) + * String improvements (Luca Ferretti) + * Code improvements (Felix Riemann) + +Bug fixes: + +- #559579, Don't use "wallpaper" term deprecated by GDP style guide (Luca Ferretti) +- #560065, Build failure: local variable-name collides with system-header symbol (Felix Riemann) +- #560068, Insufficient check for libz (Felix Riemann) +- #560336, need to update the eggtreemultidnd.[ch] copy from libegg (Felix Riemann) +- #560396, can't open menu with keyboard when no image is shown (Frederic Peters) +- #562119, eom doesn't open remote images (Felix Riemann) + +New and updated translations: + +- Jorge González [es] + +Version 2.25.1 +-------------- + + * Improvements to the JPEG metadata reader (Felix Riemann) + * Fix progress reporting when images only need copying during "Save As" (Felix Riemann) + * Fix some critical warnings (Claudio Saavedra, Vincent Untz) + * Do not open some images at 98% or 99% (Felix Riemann) + * Install metadata related headers properly (Pierre-Luc Beaudoin) + * Avoid possible markup "injection attack" (Martin Olsson) + * Copy non-local images locally when setting them as wallpaper (Claudio Saavedra) + * Allow DnD without an enabled collection (Claudio Saavedra) + * Use less deprecated APIs (Felix Riemann, Diego Escalante Urrelo) + * Code & Docs cleanups + improvements + +Bug fixes: + +- #553232, copy remote wallpapers locally (Claudio Saavedra) +- #476709, I need to drag & drop images from eom's simple viewer (Claudio Saavedra) +- #530447, Eye of MATE opens images resized at 98% or 99% zoom (Felix Riemann) +- #555940, eom is vulnerable to pango injection attack :-) (Martin Olsson) +- #555942, Not all public EXIF API headers are installed (Pierre-Luc Beaudoin) +- #556086, Use gtk_show_uri instead of mate_help (Diego Escalante Urrelo) +- #555916, drop libglade dependency; use GtkBuilder (Felix Riemann) +- #556029, Drop mate-desktop dependency (Felix Riemann) + +New and updated translations: + +- OsamaKhalid [ar] +- Alexander Shopov [bg] +- Adrian Guniš [cs] +- Pierros Papadeas [el] +- Takeshi AIHANA [ja] +- Jovan Naumovski [mk] +- Wouter Bolsterlee [nl] +- Vladimir Melo [pt_BR] +- Laurent Dhima [sq] +- Daniel Nylander [sv] +- Maxim Dziumanenko [uk] + +New and updated manual translations: + +- Osama K [ar] +- Mario Blättermann [de] +- Sira Nokyoongtong [th] + +Version 2.24.0 +-------------- + + * Fixes setting an image as wallpaper (Felix Riemann, Claudio Saavedra) + +Bug fixes: + +- #552109, won't set wallpaper (Felix Riemann, Claudio Saavedra) + +New and updated translations: + +- Friedel Wolff [af] +- Khaled Hosny [ar] +- Jordi Mas, Gil Forcada [ca] +- Adrian Guniš [cs] +- M.P. Rommedahl, Kenneth Nielsen [da] +- Philipp Kerling [de] +- David Lodge, Philip Withnall [en_GB] +- Jorge González, Claudio Saavedra [es] +- Ivar Smolin [et] +- Iñaki Larrañaga Murgoitio, Inaki Larranaga Murgoitio [eu] +- Ilkka Tuohela [fi] +- Claude Paroz [fr] +- Ankit Patel, Ankitkumar Patel, Sweta Kothari [gu] +- Robert Sedak [hr] +- Gabor Kelemen [hu] +- Milo Casagrande, Luca Ferretti [it] +- Shankar Prasad [kn] +- Changwoo Ryu [ko] +- Žygimantas Beručka, Gintautas Miliauskas [lt] +- Sandeep Shedmake [mr] +- Kjartan Maraas [nb] +- Tomasz Dominikowski [pl] +- Duarte Loreto [pt] +- Vladimir Melo [pt_BR] +- Mugurel Tudor [ro] +- Alexandre Prokoudine [ru] +- Goran Rakić [sr.po, sr@latin] +- Dr.T.Vasudevan, Tirumurthi Vasudevan [ta] +- Theppitak Karoonboonyanan [th] +- Baris Cicek [tr] + +New and updated manual translations: + +- Mario Blättermann [de] +- Jorge Gonzalez [es] +- Robert-André Mauchin [fr] +- Milo Casagrande [it] + +Version 2.23.92 +--------------- + + * Fixes in the recent files management (Felix Riemann) + * Fixes drawing problems on the message area (Claudio Saavedra) + * Fixes "Operation not supported" error on save-as-many (Felix Riemann) + * Fixes the "reload image" plugin (Claudio Saavedra, Felix Riemann) + * More API reference (Claudio Saavedra) + +Bug fixes: + + #548392, redisplay image plugin is broken (Claudio Saavedra, Felix Riemann) + #504538, When image is not found, eom shows broken background for the message (Claudio Saavedra) + #550252, The Gimp breaks EOM's recent files order (Felix Riemann) + +New and updated translations + +- Alexander Shopov [bg] +- Hendrik Richter [de] +- David Lodge, Philip Withnall [en_GB] +- Rajesh Ranjan [hi] +- Robert Sedak [hr] +- Clytie Siddall, Nguyễn Thái Ngọc Duy [vi] +- Funda Wang [zh_CN] + + +Version 2.23.91 +--------------- + + * Fixes segfaults with XMP-only files (Felix Riemann) + * Do not fail to show current directory in the open file chooser + (Claudio Saavedra) + * More robust handling of image loading errors (Felix Riemann) + * Sensible UI defaults if MateConf fails (Claudio Saavedra) + * Misc UI improvements (Claudio Saavedra) + * Build system and docs improvements (Tom Parker) + +Bug fixes: + + #548738, Segfault trying to see properties of an image with XMP metadata + (Felix Riemann) + #547466, eom builds without python support can't build documentation + (Tom Parker) + #548736, eom's 'Open..' dialog gives an false "No such file or directory" + (Claudio Saavedra) + +New and updated translations: + +- Goran Rakic [sr@Latn] +- Petr Kovar, Adrian Gunis [cs] +- Dawa pemo, Pema Geyleg [dz] +- Jorge González [es] +- Žygimantas Beručka, Gintautas Miliauskas [lt] +- Tomasz Dominikowski [pl] +- Chao-Hsiung Liao [zh_HK] +- Chao-Hsiung Liao [zh_TW] + +New and updated manual translations: + +- Leonardo Gregianin [pt_BR] + +Version 2.23.90 +--------------- + +Misc improvements/fixes: + + * Build system improvements (Felix Riemann, Paul, Tom Parker) + +Bug fixes: + + #547302, eom trunk needs gtk >= 2.13.1 not 2.11.6 (Tom Parker) + #547566, eom crashed with SIGSEGV in eom_thumbnail_load() (Felix Riemann) + #548079, can not access File menu with Alt-F key combo (Felix Riemann) + #548202, in the plugins, move $(EOM_LIBS) from libwhatever_la_LDFLAGS + to libwhatever_la_LIBADD (Paul) + +New and updated translations: + +- Khaled Hosny [ar] +- Ihar Hrachyshka [be@latin] +- Iñaki Larrañaga Murgoitio [eu] +- Ilkka Tuohela [fi] +- Mark Krapivner, Yair Hershkovitz [he] +- Takeshi AIHANA [ja] +- Shankar Prasad [kn] +- Arangel Angov [mk] +- മണിലാല് കെ.എം|Manilal K M, Hari Vishnu, Sarath Lakshman [ml] +- Duarte Loreto [pt] +- Vladimir Melo [pt_BR] +- Theppitak Karoonboonyanan [th] + +Version 2.23.6 +-------------- + +Misc improvements/fixes: + + * Code cleanups (Claudio Saavedra) + * More icon naming specs usage (Matthias Clasen) + +Bug fixes: + + #545873, use standard icon names (Matthias Clasen) + +New and updated translations: + +- Djihed Afifi [ar] +- Jorge Gonzalez [es] +- Ivar Smolin [et] +- Iñaki Larrañaga Murgoitio, Laurent Dhima [eu] +- Pierre Lemaire [fr] +- Ignacio Casal Quinteiro [gl] +- Kjartan Maraas [nb] +- Wouter Bolsterlee [nl] +- Yannig Marchegay (Kokoyaya) [oc] +- Hugo Doria, Fabrício Godoy [pt_BR] +- Laurent Dhima [sq] +- Woodman Tuen [zh_TW] + +New and updated manual translations: + +- Daniel Nylander [sv] + +Version 2.23.5 +-------------- + +Misc improvements/fixes: + + * Show 35mm film equivalent in addition to lens focal length in + properties dialog if value is provided by image. + * Code improvements and cleanups (Claudio Saavedra, Felix Riemann) + +Bug fixes: + + #539495, eom stays in Slideshow mode even in Full Screen or normal window + (Felix Riemann) + #543171, Unexpected/Wrong EXIF information about "Focal length" shown + (Felix Riemann) + +New and updated translations: + +- Jordi Mas, Joan Duran [ca] +- Rakesh Pandit [ks] +- Yannig Marchegay (Kokoyaya) [oc] +- Zabeeh Khan [ps] +- Laurent Dhima [sq] +- Daniel Nylander [sv] + +New and updated manual translations: + +- Joan Duran [ca] + +Version 2.23.4.1 +---------------- + +Misc improvements/fixes: + + * Depend on intltool 0.40.0 + +Version 2.23.4 +-------------- + +Misc improvements/fixes: + + * Code improvements and cleanups (Felix Riemann, Cosimo Cecchi) + +Bug fixes: + + #526483, Use play icon for Slideshow (Andreas Nilsson, Michael Monreal) + #537488, Fix some build warnings (Cosimo Cecchi) + #537758, libz not included so build breaks on Solaris (Damien Carbery) + +New and updated translations: + +- Djihed Afifi [ar] +- Luca Ferretti [it] +- Theppitak Karoonboonyanan [th] + +Version 2.23.3 +-------------- + +New features: + + * Allow to use arrow keys to scroll the image if zoomed in (Gernot Klimscha) + +Misc improvements/fixes: + + * Code improvements and cleanups (Claudio Saavedra, Felix Riemann) + * More documentation on plugin API (Claudio Saavedra) + +Bug fixes: + + #528454, Metadata box should have limited width (Lucas Rocha) + #533041, Eom generates thumbnails of thumbnails (Lucas Rocha) + #532925, Missing feature: movement of image not possible with keyboard + when image is zoomed + +New and updated translations: + +- Djihed Afifi [ar] +- Philip Withnall, David Lodge [en_GB] +- Clytie Siddall [vi] + +Version 2.23.2 +-------------- + +New features: + + * Use gtk-doc to document plugin API (Claudio Saavedra) + +Bug fixes: + + #530102, Doesn't register support for compressed svg (Franklin Piat) + #531300, fails to start up due to lcms error (Felix Riemann) + #531809, scroll view scrollbar needs to have secondary steppers disabled + (Benjamin Berg) + +New and updated translations: + +- Petr Kovar [cs] +- Ivar Smolin [et] +- Andrea Decorte [fur] +- Ignacio Casal Quinteiro [gl] +- Tino Meinen [nl] + +Version 2.23.1 +-------------- + +New features: + + * Migration to gio/gvfs (Cosimo Cecchi) + * An initial set of default plugins (Lucas Rocha, Claudio Saavedra) + * New command line option --new-instance to force creation of a + new instance instead of reusing existing one (Claudio Saavedra) + * PNG metadata (XMP and color profile) support (Felix Riemann) + +Misc improvements/fixes: + + * Miscellaneous improvements in thumbnailing code (Michael Chudobiak) + * Several metadata handling improvements (Felix Riemann, Claudio Saavedra) + +Bug fixes: + + * Fixed #343061, Can't save picture after opened a link picture (Cosimo + Cecchi, Felix Riemann) + * Fixed #427053, Keyboard shortcuts managed in eom-scroll-view.c only work + if image has focus (Claudio Saavedra) + * Fixed #466566, Display date in a more prominent place (Claudio Saavedra) + * Fixed #492017, Bring back 'Q' to exit eom (Lucas Rocha) + * Fixed #517017, Gtk-CRITICAL **: gtk_widget_event: assertion + `WIDGET_REALIZED_FOR_EVENT (widget, event)' failed (Wouter Bolsterlee) + * Fixed #517821, Save print settings in key file (Claudio Saavedra) + * Fixed #523173, provide option not to fork and exit if existing instance + (Claudio Saavedra) + * Fixed #525618, thumbnail code issues (Michael J. Chudobiak) + * Fixed #526331, EoG can't read XMP tags created with F-SPOT whereas Caja + can (Felix Riemann) + * Fixed #527798, compile warnings (Claudio Saavedra) + * Fixed #522077, make it easier to add more metadata readers (Felix Riemann) + * Fixed #523856, read (and use) selected PNG metadata (Felix Riemann) + +New and updated translations: + +- Alexander Shopov, Yavor Doganov [bg] +- Simos Xenitellis, Kostas Papadimas [el] +- Philip Withnall, David Lodge [en_GB] +- Jorge González, Jorge Gonzalez [es] +- Ivar Smolin [et] +- Mark Krapivner, Yair Hershkovitz [he] +- Sandeep Shedmake [mr] +- Kjartan Maraas [nb] +- Peter Tuhársky [sk] +- Nguyễn Thái Ngọc Duy, Clytie Siddall [vi] + +New and updated manual translations: + +- Jorge Gonzalez, Jorge González [es] +- Maxim Dziumanenko, Maxim V. Dziumanenko [uk] + +Version 2.22.0 +-------------- + +New features: + + * Contextual menu in image view widget + * Support for resetting the toolbar to its default layout + +Misc improvements/fixes: + + * Performance improvements + * Several fixes and improvements in the UI + * Improvements in plugin API + +Bug fixes: + + #519028, EOM crashes when loading too small ICC chunk (Felix Riemann) + #519910, crash in Image Viewer: I saved a new picture in... (Felix Riemann) + #498989, Eom gets it's locking wrong and crashes. (Matt Keenan) + #506421, eom with python enabled requires NO_IMPORT, NO_IMPORT_PYGOBJECT + defined to prevent multiply defined symbols (Paul) + #509079, Recent files wrong direction when in RTL with latin file names + (Djihed Afifi) + +New and updated translations: + +- Djihed Afifi [ar] +- Runa Bhattacharjee [bn_IN] +- Gil Forcada, Jordi Mas [ca] +- Kenneth Nielsen, M.P. Rommedahl [da] +- Philip Withnall, David Lodge [en_GB] +- Jorge González, Jorge Gonzalez [es] +- Stéphane Raimbaul [fr] +- Ankit Patel [gu] +- Gabor Kelemen [hu] +- Luca Ferretti [it] +- Gintautas Miliauskas, Žygimantas Beručka [lt] +- Rahul Bhalerao, Sandeep Shedmake [mr] +- Åsmund Skjæveland [nn] +- Alexandre Prokoudine [ru] +- Peter Tuhársky [sk] +- Laurent Dhima [sq] +- Daniel Nylander [sv] +- Maxim Dziumanenko [uk] +- Chao-Hsiung Liao [zh_HK] +- Chao-Hsiung Liao, Woodman Tuen [zh_TW] + +New and updated manual translations: + +- Kenneth Nielsen, M.P. Rommedahl [da] +- Jorge Gonzalez, Jorge González [es] +- Claude Paroz [fr] +- Luca Ferretti [it] +- Leonardo Ferreira Fontenelle, Rodrigo Flores [pt_BR] +- Daniel Nylander [sv] + +Version 2.21.92 +--------------- + +Bug fixes: + + #513958, crash in Image Viewer: Pressing page down to go... (Felix Riemann) + #500203, eom crash when .mate2/eom is not a directory (Felix Riemann) + #513827, Use DateTimeOriginal for the "Taken on" metadata (Francisco Rojas) + #517450, Missing return ? (Rodrigo Moya) + +New and updated translations: + +- Daniel Nylander [sv] +- Duarte Loreto [pt] +- Vincent van Adrighem [nl] +- Ihar Hrachyshka [be@latin] +- R: Leonardo Ferreira Fontenelle [pt_BR] +- Pawan Chitrakar [ne] +- Changwoo Ryu [ko] +- Kjartan Maraas [nb] +- Andre Klapper, Hendrik Richter [de] +- Runa Bhattacharjee [kn] +- Luca Ferretti [it] +- Arangel Angov [mk] +- Gabor Kelemen [hu] +- Theppitak Karoonboonyanan [th] +- Ilkka Tuohela [fi] +- Petr Kovar [cs] +- Priit Laes [et] +- Ignacio Casal Quinteiro [gl] +- Takeshi Aihana [ja] +- Artur Flinta [pl] + +New and updated manual translations: + +- Changwoo Ryu [ko] +- Kenneth Nielsen [da] + +Version 2.21.90 +--------------- + +Misc improvements/fixes: + + * Convert remaining help manuals over to g-d-u (Felix Riemann) + * Reuse the loaded image's data to create the thumbnail if it doesn't exist + (Claudio Saavedra) + +Bug fixes: + + #322728, Add support for --disable-scrollkeeper (Felix Riemann) + #511393, Tooltip could be more precise (Felix Riemann) + #512626, eom 2.20.4 crashes on some jpeg files when there's a loaded + color profile (Felix Riemann) + #515250, EOM slow, locks up system on bitonal TIFF (Claudio Saavedra) + +New and updated translations: + +- Khaled Hosny [ar] +- Amitakhya Phukan [as] +- Andre Klapper [de] +- Kostas Papadimas [el] +- Jorge González, Jorge Gonzalez [es] +- Iñaki Larrañaga Murgoitio, Inaki Larranaga Murgoitio [eu] +- Claude Paroz [fr] +- Ignacio Casal Quinteiro [gl] +- Mark Krapivner, Mark Krapviner [he] +- Luca Ferretti [it] +- Arangel Angov, Jovan Naumovski [mk] +- Sandeep Shedmake [mr] +- Yannig Marchegay (Kokoyaya) [oc] +- Tomasz Dominikowski, MATE PL Team [pl] +- Duarte Loreto [pt] +- Leonardo Ferreira Fontenelle, Pedro de Medeiros [pt_BR] +- Danishka Navin [si] +- Theppitak Karoonboonyanan [th] +- Baris Cicek [tr] +- Maxim Dziumanenko [uk] +- Woodman Tuen, Chao-Hsiung Liao [zh_HK] +- Woodman Tuen, Chao-Hsiung Liao [zh_TW] + +New and updated manual translations: + +- Luca Ferretti [it] +- Yannig Marchegay [oc] +- Rodrigo Flores, Leonardo Ferreira Fontenelle [pt_BR] + +Version 2.21.4 +-------------- + +Misc improvements/fixes: + + * Fix ICC profiles implementation (Frederic Crozat, Claudio Saavedra) + * Do not close a window while an image is being saved (Claudio Saavedra) + * More discrete toolbar in fullscreen mode (Francisco Rojas) + * Added documentation for the toolbar editor (Felix Riemann) + * Misc. performance improvements (Claudio Saavedra) + * Misc. UI improvements, code improvements, leaks fixed, etc (Claudio + Saavedra, Felix Riemann, Seán de Búrca) + +Bug fixes: + + #487075, crash in Image Viewer: Trying to ``save as'' Th... (Felix Riemann) + #491092, eom shouldn't quit while an image is being saved (Claudio Saavedra) + #496464, Tooltips in Eye of MATE (Claudio Saavedra) + #501073, Toolbar in full screen view should be more "discrete" (Francisco + Rojas) + #503637, No toolbar documentation (Felix Riemann) + #504093, Print size units default to inches (Felix Riemann) + #505576, Keypress navigation in slideshow mode do not reset slideshow timer + (Priit Laes) + #505811, slow image switching due to GtkRecent (Claudio Saavedra) + #505949, String fixes for EOM HEAD (Seán de Búrca, Felix Riemann) + #507068, XICC implementation is broken, causing eom to quit when loading + sRGB images (Frederic Crozat) + #509149, Build failure for eom-properties-dialog.c (Claudio Saavedra) + +New and updated translations: + +- Khaled Hosny, Djihed Afifi [ar] +- Ihar Hrachyshka [be@latin] +- Jorge González [es] +- Ivar Smolin, Leonardo Ferreira Fontenelle [et] +- Iñaki Larrañaga Murgoitio, Inaki Larranaga Murgoitio [eu] +- Seán de Búrca [ga] +- Erdal Ronahi [ku] +- Kjartan Maraas, Espen Stefansen [nb] +- Yannig Marchegay (Kokoyaya) [oc] +- Leonardo Ferreira Fontenelle [pt_BR] +- Daniel Nylander [sv] +- Clytie Siddall [vi] + +New and updated manual translations: + +- Jorge Gonzalez [es] + +Version 2.21.3 +-------------- + +Misc improvements/fixes: + + * Miscellaneous fixes in the UI (Felix Riemann, Lucas Rocha) + +New and updated translations: + +- Jakub Friedl [cs] +- Kostas Papadimas [el] +- Kjartan Maraas [nb] +- Rodrigo Flores [pt_BR] + +Version 2.21.2 +-------------- + +New features: + + * Support for resetting the toolbar to its default layout (Felix Riemann) + +Misc improvements/fixes: + + * Fixes for memory leaks and code optimizations (Felix Riemann) + * Improvements in plugin API (Lucas Rocha) + * Improvements in the plugin system Python bindinds (Ross Burton) + +Bug fixes: + + #458661, Up/Down keys in image collection (Claudio Saavedra) + #491528, Use trash icon i.s.o. delete icon for move to trash + menu item (Jaap Haitsma) + #491826, Defaults are wrong (Lucas Rocha) + #494881, Support for exempi 1.99.5 (Sebastian Dröge) + #496184, Eom does not support color management (Felix Riemann) + #499154, Specify correct type for eom_image_load and + _has_data (Ross Burton) + #499156, Wrap eom_image_load in Python (Ross Burton) + #480975, Feature request : EOM lack an option to reset + toolbars (Felix Riemann) + +New and updated translations: + +- Alexander Shopov [bg] +- Ihar Hrachyshka [be@latin] +- Changwoo Ryu [ko] +- Gil Forcada [ca] +- Yannig Marchegay [oc] +- Daniel Nylander [sv] +- Gabor Kelemen [hu] +- Matej Urbančič [sl] +- Priit Laes [et] +- Ignacio Casal Quinteiro [gl] +- Jorge Gonzalez [es] + +New and updated manual translations: + +- Yannig Marchegay [oc] +- Luca Ferretti [it] + +Version 2.21.1 +-------------- + +New features: + + * Contextual menu in image view widget (Cosimo Cecchi) + +Misc improvements/fixes: + + * Several code cleanups and improvements (Felix Riemann, Claudio Saavedra) + +Bug fixes: + + #482752, crash when opening a tiff image (eom_image_load) (Felix Riemann) + #475124, Add " (invalid Unicode)" suffix when image caption is not a valid utf8 + string (Lucas Rocha) + #475645, When an image is saved, the selection is lost (Lucas Rocha) + #476313, plugins about dialog is not gtk+-2.11/2.12 ready (Felix Riemann) + #476919, eom save menu is always active (Cosimo Cecchi) + #477550, fileformat combobox in save-as-many dialog is empty (Felix Riemann) + #479029, eom crashes when showing Image Collection (Felix Riemann) + #479400, Renamed files vanish from the collection (Claudio Saavedra) + #479884, Mouse dragging UI broken. (Lucas Rocha) + #481096, Thumbnails in collection viewer not updated when scrolling + (Felix Riemann) + #481301, Add a context menu in main window (open with/properties etc.) + (Cosimo Cecchi) + #482128, Hangs on XPM file (Felix Riemann) + #486057, "SetAsWallpaper" functionality doesn't launch background properties + (Felix Riemann) + #488344, using the scroll buttons of a non-first instance of eom scrolls the + collection on the first one (Claudio Saavedra) + #488808, eom won't display some .jpg files (Felix Riemann) + #490065, Retry string not marked for translation (Kelemen Gabor) + #481712, Substandard .desktop file (patch against latest SVN attached) + (Stéphane Loeuillet) + +New and updated translations: + +- Ihar Hrachyshka [be@latin] +- Kjartan Maraas [nb] +- Kenneth Nielsen [da] +- Djihed Afifi [ar] +- Matej Urbančič [sl] +- Priit Laes [et] +- Jorge Gonzalez [es] +- Yair Hershkovitz [he] + +Version 2.20.0 +-------------- + +New features: + + * Complete rewrite of application core which means more stable, + maintanable, faster image viewer for MATE + * New plugin system which allows developers to extend EOM's UI + and behavior. Python support is available. + * Editable application toolbar + * New image collection pane with on-demand thumbnail loading, + polished look, and continuous scrolling side buttons. + * Side Pane to be extended by plugins + * New image properties dialog which replaces the image info + sidepane + * Single instance D-Bus-based activation support + * Revamped error/warning UI + * "Open with" support to quickly open images on other applications + * Mouse scrollwheel improvements: HIG compliancy and zoom factor + setting + * General UI polishing + * Command line options for fullscreen, slideshow and image collection + disabling + * Display EXIF MakerNotes + * XMP Support + +Misc improvements/fixes: + + * Small refactorings in metadata readers (Claudio Saavedra) + +Bug fixes: + + #354352, Show incomplete images (Lucas Rocha) + #394803, Fails to load .svgz (Matthias Clasen, Felix Riemann) + #440254, Eom crashes when opening an image with invalid unicode + as filename (Lucas Rocha) + #447063, eom hangs when opening SVG files that include external + images (Felix Riemann) + #459665, opened images should take as much screen space as + possible (Claudio Saavedra) + #465583, thumbnails badly rotated (autorotation enabled) (Lucas Rocha) + #470521, some image is rendered with a wrong rotation (Lucas Rocha) + #471530, Confusing PyGtk configure failure message (Paolo Borelli) + #474642, ./configure is semi-broken (Martin Olsson) + #474710, eom crashes when you try to open this .jpg file (it works fine on + Vista/XP) (Claudio Saavedra) + #474931, factore out some code in the metadata consumer (Claudio Saavedra) + +New and updated translations: + +- Vincent van Adrighem [nl] +- Alexandre Prokoudine [ru] +- Ankit Patel [gu] +- Goran Rakić [sr, sr@Latn] +- Duarte Loreto [pt] +- Kostas Papadimas [el] +- Changwoo Ryu [ko] +- Gil Forcada [ca] +- Hendrik Richter [de] +- Yannig Marchegay [oc] +- Jovan Naumovski [mk] +- Gabor Kelemen [hu] +- Andre Klapper [sk] +- Djihed Afifi [ar] +- David Lodge [en_GB] +- Maxim Dziumanenko [uk] +- Inaki Larranaga Murgoitio [eu] +- Priit Laes [et] +- Kenneth Nielsen [da] +- Laurent Dhima [sq] +- Artur Flinta [pl] + +New and updated manual translations: + +- Claude Paroz [fr] +- Luca Ferretti [it] + +Version 2.19.92 +--------------- + +New features: + + * New image collection pane layout with continuous scrolling + side buttons (Lucas Rocha) + +Misc improvements/fixes: + + * Several code cleanups and improvements (Felix Riemann) + +Bug fixes: + + #427046, Scrollwheel on image list doesn't work (Lucas Rocha) + #458663, Kill the scrollbar! (Lucas Rocha) + +New and updated translations: + +- Ilkka Tuohela [fi] +- Stéphane Raimbault [fr] +- Alexander Shopov [bg] +- Raphael Higino [pt_BR] +- Funda Wang [zh_CN] +- Clytie Siddall [vi] +- Kjartan Maraas [nb] +- Ankit Patel [gu] +- Daniel Nylander [sv] +- Gintautas Miliauskas [lt] +- Theppitak Karoonboonyanan [th] +- Ani Peter [ml] +- Priit Laes [et] +- Ignacio Casal Quinteiro [gl] +- Takeshi AIHANA [ja] +- Jorge Gonzalez [es] +- I. Felix [ta] + +New and updated manual translations: + +- Daniel Nylander [sv] +- Jorge Gonzalez [es] + +Version 2.19.91 +--------------- + +Misc improvements/fixes: + + * Small improvements on thumbnails appearance (Lucas Rocha) + +Bug fixes: + + #470297, eom doesn't display images from an empty window (Felix Riemann) + #311308, Drag and Dropping the same image twice in EOM will open + 2 windows (Lucas Rocha) + #467835, Patch to HIGify plugin list (Martin Ejdestig) + #470416, Icon install location (Lucas Rocha) + #470686, zooming documentation is confusing (Lucas Rocha) + #466681, Page Setup/Properties/Trash items not accessible (Patrick Wade) + +New and updated translations: + +- Adam Weinberger [en_CA] +- Ankit Patel [gu] +- Alexander Shopov [bg] +- Duarte Loreto [pt] +- Raphael Higino [pt_BR] +- Kjartan Maraas [nb] +- Hendrik Richter [de] +- Daniel Nylander [sv] +- Gabor Kelemen [hu] +- Žygimantas Beručka [lt] +- Jorge Gonzalez [es] +- Theppitak Karoonboonyanan [th] +- Ilkka Tuohela [fi] +- Priit Laes [et] +- Takeshi AIHANA [ja] +- Artur Flinta [pl] +- I. Felix [ta] + +New and updated manual translations: + +- Daniel Nylander [sv] + +Version 2.19.5 +--------------- + +New features: + + * XMP Support (Hubert Figuiere) + * Side Pane to be extended by plugins (Lucas Rocha) + * Inhibit screensaver when running slideshow/fullscreen (Lucas Rocha) + * Improved selection visual feedback in image collection + pane (Lucas Rocha) + +Misc improvements/fixes: + + * Several code cleanup and fixes (Felix Riemann, Claudio Saavedra) + +Bug fixes: + + #456451, crash in EOM: Saving rotated image (Claudio Saavedra) + #408591, Add wbmp to supported image types (Sven Arvidsson) + #427806, Crash: when specifying an invalid extension in save + as dialog (Felix Riemann) + #451101, Support Adobe XMP metadata (Hubert Figuiere) + #453151, Changing scale of image in print dialog is slow (Stefan Röllin, + Claudio Saavedra) + #455672, Use "document-page-setup" named icon for File->Setup Page + (Luca Ferretti) + #455700, tooltips in collection don't update (Claudio Saavedra) + #459819, Inhibit screensaver when running slideshow (Lucas Rocha) + #460780, Weird preferences window (Felix Riemann) + #462362, Application specific icons are installed in the wrong directory + (Jaap Haitsma) + #462785, Fail to build with undefined reference to + `eom_application_register_service' (Felix Riemann) + #462971, Thumbnails of modified images wrongly loaded from thumbnail + factory (Claudio Saavedra) + #462973, thumbnails not updated after applying a transformation + (Claudio Saavedra) + #464709, [patch] make thumbnail of modified and saved images actually + appear (Claudio Saavedra) + #465060, [patch] get rid of compilation warnings (Cosimo Cecchi) + #465628, configure doesn't check for libexif/exif-data.h (Claudio Saavedra) + +New and updated translations: + +- Kostas Papadimas [el] +- Ankit Patel, Josep Puigdemont i Casamajó [gu] +- Nguyễn Thái Ngọc Duy [vi] +- Jordi Mas [ca] +- Inaki Larranaga Murgoitio [eu] +- Priit Laes [et] +- Jorge Gonzalez [es] +- Wouter Bolsterlee [nl] +- Kjartan Maraas [nb] +- Åsmund Skjæveland [lv] +- Žygimantas Beručka [lt] +- Theppitak Karoonboonyanan [th] +- Artur Flinta [pl] +- Stéphane Raimbault [fr] +- Leonardo Ferreira Fontenelle, Raphael Higino [pt_BR] +- Gabor Kelemen [hu] +- Åsmund Skjæveland [hi] +- Ilkka Tuohela [fi] +- Takeshi Aihana [ja] +- Daniel Nylander [sv] +- Jovan Naumovski [mk] + +New and updated manual translations: + +- Claude Paroz [fr] + +Version 2.19.4 +-------------- + +New features: + + * Python support on plugin system (Lucas Rocha) + * Use same thumbnail frame than Caja (Lucas Rocha) + * Ability to enable collection pane when in fullscreen (Lucas Rocha) + * Display EXIF MakerNotes (Jef Driesen) + * Image Collection toolbar item available on toolbar editor (Lucas Rocha, + Andreas Nilsson, Jakub Steiner) + +Misc improvements/fixes: + + * Several code cleanup and fixes (Felix Riemann, Lucas Rocha) + * Several improvements and fixes on editable toolbar (Felix Riemann, Jaap + Haitsma) + +Bug fixes: + + #340831, add toolbar icon for image collection (Lucas Rocha) + #350809, Exif MakerNotes are not decoded (even when supported by + libexif) (Jef Driesen) + #374582, Need 'slideshow' button on toolbar (Felix Riemann) + #413211, eom crashed with SIGSEGV in eom_image_load() (Chris Wilson) + #425613, Grey border around images in fullscreen/presentation mode + (Felix Riemann) + #435408, next and previos button don't get sensitive (Lucas Rocha) + #435456, focus on the "Exif" tab should be remebered (Lucas Rocha) + #438242, EOM should have a drag mode when zooming (Lucas Rocha) + #440168, spacing in vertical collection not ideal (Lucas Rocha) + #445535, Plugin menù problem (Lucas Rocha) + #449741, Add ability to enable collection pane when in fullscreen + (Lucas Rocha) + #452849, egg-toolbareditor copy needs to be synched with libegg (Jaap + Haitsma) + #452886, Typo in data/eom.schemas.in (Bob Mauchin) + #453064, Use a shorter label for collection button on toolbar (Lucas + Rocha) + #453503, null string pointer for "value" in eom_window.c at line 345 + (Lucas Rocha) + #450590, [toolbareditor] allow named icons with + Gtk{Radio,Toggle}Actions (Felix Riemann, Jaap Haitsma) + #452923, [toolbareditor] use gobject type helpers instead of defining + our own (Felix Riemann) + #313676, Cleanup of EXIF tab (or, if you want, side pane) (Lucas Rocha) + #441138, use caja thumbnails in the image pane (Lucas Rocha) + +New and updated translations: + +- Ankit Patel [gu] +- Funda Wang [zh_CN] +- Clytie Siddall, Nguyễn Thái Ngọc Duy [vi] +- Kjartan Maraas [nb] +- Daniel Nylander [sv] +- Jovan Naumovski [mk] +- Danishka Navin [si] +- Pema Geyleg, Jorge Gonzalez [dz] +- Artur Flinta [pl] +- Theppitak Karoonboonyanan [th] +- Priit Laes [et] +- Sunil Mohan Adapa [te] +- Jorge Gonzalez [es] +- Tirumurthi Vasudevan [ta] + +New and updated manual translations: + +- Daniel Nylander [sv] +- Jorge Gonzalez [es] + +Version 2.19.3 +-------------- + +New features: + + * New preferences tab for the image collection view position/size features + (Felix Riemann). + +Misc improvements/fixes: + + * Make the toolbar keyboard navigable (Patrick Wade, Claudio Saavedra) + * Several code cleanup and fixes (Felix Riemann, Christian Persch, + Claudio Saavedra, Damien Carbery) + +Bug fixes: + + #430021, crash in Image Viewer: Eom crashes when it star... + (Claudio Saavedra) + #439907, /usr/lib/eom/plugins/ warning not required (Claudio Saavedra) + #440207, duplicate actions (Christian Persch) + #440716, sys/time.h header needed to build on Solaris (Damien Carbery) + #385327, Keyboard navigation doesn't work in eom toolbar. (Patrick Wade, + Claudio Saavedra) + +New and updated translations: + +- Danilo Segan, Goran Rakic [sr, sr@Latn] +- Kjartan Maraas [no, nb] +- Daniel Nylander [sv] +- David Lodge [en_GB] +- Theppitak Karoonboonyanan [th] +- Jakub Friedl [cs] +- Priit Laes [et] +- Ignacio Casal Quinteiro [gl] +- Jorge Gonzalez [es] +- Yair Hershkoviz [he] + +Version 2.19.2 +-------------- + +New features: + + * New plugin system which allows developers to extend EOM's UI + and behavior (Lucas Rocha) + +Misc improvements/fixes: + + * Several code cleanups (Felix Riemann, Lucas Rocha) + * Correctly set slideshow delay when being entered with the + keyboard (Ryan Cumming) + +Bug fixes: + + #435614, When DnD rotate left/right icons to "Toolbar Editor" the + icon not appear (Felix Riemann) + #437691, README files needs an update (Claudio Saavedra) + +New and updated translations: + + * Nickolay V. Shmyrev [ru] + * Kjartan Maraas [nb] + * Daniel Nylander [sv] + * Jorge Gonzalez [es] + +New and updated manual translations: + + * Nickolay V. Shmyrev [ru] + * Daniel Nylander [sv] + +Version 2.19.1 +-------------- + +New features: + + * Complete rewrite of application core which means more stable, + maintanable, faster image viewer for MATE (Claudio Saavedra, + Felix Riemann, Lucas Rocha, and others) + * Editable application toolbar (Claudio Saavedra, Lucas Rocha) + * New image collection pane with on-demand thumbnail loading + (Claudio Saavedra, Felix Riemann, Lucas Rocha) + * Support for setting image collection position (left, right, top, + bottom) and wether it's resizable or not. No preference UI + yet (Lucas Rocha) + * New image properties dialog which replaces the image info + sidepane (Lucas Rocha) + * Single instance D-Bus-based activation support (Claudio Saavedra) + * Revamped error/warning UI (Lucas Rocha) + * "Open with" support to quickly open images on other applications + (Rodrigo Aguilar) + * Mouse scrollwheel improvements: HIG compliancy and zoom factor + setting (Lucas Rocha) + * Migration to GtkRecent (Felix Riemann) + * UI polishing on multiple images save as dialog (Claudio Saavedra) + * Command line options for fullscreen, slideshow and image collection + disabling (Bruno Boaventura, Lucas Rocha) + +Bug fixes: + + #377123, [eom-ng] implement EomJobSave (Felix Riemann, Lucas Rocha) + #319859, "open image with" function (Rodrigo Aguilar) + #334321, Should be possible move the collection in EOM (Lucas Rocha) + #316175, EOM gives no error upon opening non image files (Lucas Rocha) + #432439, Run gtk-update-icon-cache in uninstall-hook (Brian Pepple) + #429156, [patch] "Save As" dialog for multiple files is way too + ugly (Claudio Saavedra) + #427154, Some strings are not translated in save-as-multiple dialog. + (Felix Riemann) + #419756, Slideshow background should be black. (Diego Escalante) + #404708, eom crashed with SIGSEGV in g_closure_invoke() (Lucas Rocha) + #404126, Convert debug messages to eom_debug_message (Claudio André) + #401939, [eom-ng] Remove leaftag support. (Claudio Saavedra) + #399333, EOM-NG crash while opening Print dialog (Claudio Saavedra) + #398250, build bug: missing symbols from libpangoft2 (Elijah Newren) + #389314, eom should use stock_print-setup from g-i-t for the + "Page setup..." action (Thomas Andersen) + #376513, TRACKER: command-line options (Bruno Boaventura, Lucas Rocha) + #355858, switching image forward and back quickly can display wrong + image (Felix Riemann) + #351040, [eom-ng] use GtkRecent (Felix Riemann) + #344140, [eom-ng] remove duplicate code in fullscreen-code (Claudio + Saavedra) + #342817, crash trying to view profile image (Felix Riemann) + #342103, [patch] [eom-ng] update about dialog (Claudio Saavedra) + #341935, Should not zoom with mouse wheel (Lucas Rocha) + #341831, [eom-ng] memory usage increases when switching fastly between + images (Lucas Rocha) + #341600, [eom-ng] EOM eats a lot o CPU when inactive (Paolo Borelli) + #340957, Filenames containing numbers are not properly sorted (as how + caja does) (Felix Riemann) + #335689, Middle mouse drag should also scroll (Wouter Bolsterlee, + Lucas Rocha) + #327424, progress bar changes view size which forces re-zooming of + image (Lucas Rocha) + #322057, eom print output is corrupt (Jan Kümmel) + #305823, The rotate buttons on the toolbar are blurred (Luca Ferretti) + #404907, [eom-ng] Crash when opening properties dialog (broken EXIF). + (Felix Riemann) + #372820, First call to PKG_CHECK_MODULES is conditional without a prior + call to PKG_PROG_PKG_CONFIG (Felix Riemann) + #381867, mouse cursor disappear after exit fullscreen mode + (Bruno Boaventura) + #383090, Slideshow / Slide Show (Bruno Boaventura) + #336973, [eom-ng] Migration of the collection pane to GtkIconView and + GtkListStore (Claudio Saavedra, Felix Riemann, Lucas Rocha) + #356947, [eom-ng] GtkPrint support (Claudio Saavedra) + #393586, [eom-ng] Editable toolbar for EOM (Claudio Saavedra, Lucas Rocha) + #401946, [eom-ng] [patch] D-Bus based activation (Claudio Saavedra) + #416321, [eom-ng] Use tooltips to show image information in the + thumbview (Lucas Rocha) + #89512, Setting for how much the mouse wheel should affect + zoom (Lucas Rocha) + #321400, mouse side-buttons for navigation (Lucas Rocha) + +New and updated translations: + + * Laurent Dhima [sq] + * Yannig Marchegay [oc] + * Daniel Nylander [sv] + * Jovan Naumovski [mk] + * again, Luca Ferretti [it] + * Djihed Afifi [ar] + * David Lodge [en_GB] + * Jakub Friedl [cs] + * Ignacio Casal Quinteiro [gl] + * Jorge González, Claudio Saavedra [es] + +New and updated manual translations: + + * Changwoo Ryu [ko] + * Daniel Nylander [sv] + * Jorge González, Claudio Saavedra [es] + +Version 2.18.0.1 +---------------- + +- Build when libexif is not installed in the system [#417684]. +- Updated translations: Nikos Charonitakis (el). +- Updated manual translations: Maxim Dziumanenko (uk), A S + Alam (pa). + +Version 2.18.0 +-------------- + +- Avoid ellipsizing image position in statusbar for with big + numbers (Lucas Rocha) [#357427] +- Fix crasher when trying to print an already removed image + (Claudio Saavedra) [#414547] +- Correctly handle external file removals (Claudio Saavedra) [#399982] +- Update image list position and length when image are externaly + removed or added (Lucas Rocha, Claudio Saavedra) [#414968] +- Removed 'Application' category from desktop file (Claudio Saavedra). +- Updated manual translations: Daniel Nylander (sv), Amadeu A. + Barbosa (pt_BR), Christophe Bliard (fr), David Lodge (en_GB) +- Updated translations: Ankit Patel (gu), Artur Flinta (pl), + Erdal Ronahi (ku), Gintautas Miliauskas (lt), Reinout van + Schouwen (nl), Goran Rakić (sr, sr@Latn), Nickolay V. Shmyrev (ru) + + +Version 2.17.92 +-------------- + +- Take other images in the same location into account even for remote + URIs (if the image's parent is a directory) (Lucas Rocha) [#364426] +- EOM dependency on GTK >= 2.10 (Felix Riemann) +- Several code cleanups (Claudio Saavedra) +- Updated manual translations: Daniel Nylander (sv), + Amadeu A. Barbosa Junior (pt_BR), Maxim Dziumanenko (uk), + Christophe Bliard (fr) +- Updated translations: Ihar Hrachyshka (be), Daniel Nylander (sv), + Theppitak Karoonboonyanan (th), Josep Puigdemont i Casamajó (ca), + Ilkka Tuohela (fi), Leonardo Ferreira Fontenelle (pt_BR), + Duarte Loreto (pt), Djihed Afifi (ar), David Lodge (en_GB), + Takeshi Aihana (ja), Ivar Smolin (et), Nguyễn Thái Ngọc Duy (vi), + Maxim Dziumanenko (uk), Stéphane Raimbault (fr), Hendrik Richter (de), + Abel Cheung (zh_CN), Peter Bach (da), Alexander Shopov (bg), + Kjartan Maraas (nb), Changwoo Ryu (ko), Gabor Kelemen (hu) + +Version 2.17.91 +-------------- + +- Show an error message instead of closing the program if the image + loading has failed (Claudio Saavedra) [#399988] +- Fix crash when exiting EOM (Kees Cook) [#389755] +- Several code cleanups and memory leak fixes (Felix Riemann, Claudio Saavedra) +- Fix crash when closing EOM while printing (Felix Riemann) [#404708] +- Change launcher description to match UI review (Lucas Rocha) [#383436] +- Updated manual translations: Vasiliy Faronov (ru), AP Singh Alam (pa), + David Lodge (en_GB) +- Updated translations: Daniel Nylander (sv), David Lodge (en_GB), + Kjartan Maraas (nb), Theppitak Karoonboonyanan (th), Pema Geyleg (dz), + Priit Laes (et), Josep Puigdemont i Casamajó (ca), Leonardo Fontenelle (pt_BR), + Jakub Friedl (cs), Stéphane Raimbault (fr), Philip Kerling (de), + Ihar Hrachyshka (be), Ilkka Tuohela (fi), Changwoo Ryu (ko), Djihed Afifi (ar), + Duarte Loreto (pt), Alexander Shopov (bg) + +Version 2.17.90 +-------------- + +- Several code cleanups (Felix Riemann) +- Small i18n fix (Philip Kerling) [#395541] +- Updated translations: Priit Laes (et), Daniel Nylander (sv), + Clytie Siddall (vi), Hendrik Richter (de), Raphael Higino (pt_BR), + Djihed Afifi (ar), Rasmus Ory Nielsen (da), Yair Hershkovitz (he), + Theppitak Karoonboonyanan (th), Kjartan Maraas (nb), Matic Zgur (sl), + Jakub Friedl (cs) + +Version 2.17.4 +-------------- + +- Several printing fixes (Claudio Saavedra) +- Fix crash on automatic orientation (Felix Riemann) [#388413] +- Use mate-icon-theme icon for printing setup (Thomas Andersen) [#389314] +- Fix fatal warning when reusing windows (Felix Riemann) [#390268] +- Several code cleanups (Felix Riemann, Lucas Rocha) [#354106] +- New themable EOM icon by Ulisse Perusin (Luca Ferretti) [#357413] +- New interactive image print preview on printing + dialog (Claudio Saavedra) [##356947, #321815] +- Updated manual translations: Daniel Nylander (sv) +- Updated translations: Francisco Javier F. Serrador (es), + Ales Nyakhaychyk (be), Raivis Dejus (lv), Djihed Afifi (ar), + Daniel Nylander (sv), Kjartan Maraas (nb), David Lodge (en_GB), + Theppitak Karoonboonyanan (th), Josep Puigdemont i Casamajó (ca), + Jovan Naumovski (mk), Alexander Shopov (bg), Clytie Siddall (vi), + Jakub Friedl (cs), Priit Laes (et) + + +Version 2.17.3 +-------------- + +- Printing fixes (Claudio Saavedra) [#381358] +- Memory leaks fixes (Felix Riemann) +- Automatic orientation based on EXIF (Kalle Vahlman, Jef Driesen) [#148400] +- Simplify preferences dialog label texts (Lucas Rocha) [#382586] +- Updated manual translations: Francisco Javier F. Serrador (es), + Jan Arne Petersen (de) +- Updated translations: Francisco Javier F. Serrador (es), Ilkka Tuohela (fi), + Kjartan Maraas (nb), Theppitak Karoonboonyanan (th), Priit Laes (et), + Djihed Afifi (ar) + +Version 2.17.2 +-------------- + +- Manual translations fixes (Claudio Saavedra, Felix Riemman) + [#363348, #366695] +- Several code cleanups (Claudio Saavedra, Felix Riemann) [#375897] +- Use stock icons for rotate and flip actions (Luca Ferretti) [#305823] +- Migration to GtkPrint (Claudio Saavedra) +- Make check pattern for transparent images a bit lighter (Claudio Saavedra) + [#350183] +- i18n fixes on save as dialog for multiple images (Felix Riemman) + [#337642, #340490] +- Build infrastructre fixes (Felix Riemann) [#372820] +- Updated manual translations: Daniel Nylander (sv), Francisco Javier + F. Serrador (es) +- Updated translations: Satoru Satoh (ja), Hendrik Richter (de), + Danilo Nylander (sv), Jakub Friedl (cs) + + +Version 2.17.1 +-------------- + +- Use mouse sidebuttons for image navigation (Lucas Rocha) [#321400] +- Use mouse wheel to scroll, not to switch images (Wouter Bolsterlee) [#331645] +- Save customized keybindings on application shutdown (Lucas) [#324757] +- Fix some memory leaks (Claudio Saavedra) +- Fix critical warnings (Claudio) +- Undo stack optimizations (Felix Riemman) +- Make sure correct image is displayed when reselecting current one while + loading other image (Felix) [#355858] +- Add stock icon to undo action (Felix) +- Several code cleanups and updates (Felix) +- Optimize transformations calculations (Felix) +- Updated translations: Jakub Friedl (cs), Mindu Dorji (dz), Ivar Smolin (et), + Christophe Bliard (fr), Satoru SATOH (ja), Kjartan Maraas (nb), Åsmund + Skjæveland (nn), Pablo Saratxaga (wa). + +Version 2.16.0.1 +---------------- + +- Fix infinite loop on canvas destruction (Sven Herzberg) [#350569] + +Version 2.16.0 +--------------- + +- Updated translations: Raivis Dejus (lv), Duarte Loreto (pt), + Žygimantas Beručka (lt), Robert-André Mauchin (fr), + Theppitak Karoonboonyanan (th), Gabor Kelemen (hu), + Chao-Hsiung Liao (zh_HK, zh_TW), Jovan Naumovski (mk), + Nikos Charonitakis (el), Inaki Larranaga (eu), Abel Cheung (zh_HK, zh_TW), + Danilo Šegan (sr, [email protected]), Runa Bhattacharjee (bn_IN) + +Version 2.15.92 +--------------- + +- .desktop file small fix (Lucas Rocha) [#343052] +- Fix error when loading images with ':' in their filenames + from command line (Felix Riemman) [#305129]. +- Fix critical warnings when opening remote + images (Lucas Rocha) [#350557] +- Make transparency color preferences work on full screen + mode (Felix Riemman) [#346680] +- Updated translations: Wouter Bolsterlee (nl), Baris Cicek (tr), + Ilkka Tuohela (fi), Jovan Naumovski (mk), Priit Laes (et), + Guntupalli Karunakar (dz), Francisco Javier F. Serrador (es), + Maxim Dziumanenko (uk), Ani Peter (ml), Hendrik Richter (de), + Vladimer Sichinava (ka), Ahmad Riza H Nst (id), Clytie Siddall (vi), + Ankit Patel (gu), Gabor Kelemen (hu), Daniel Nylander (sv), + Leonid Kanter (ru), Satoru Satoh (ja), Artur Flinta (pl), + Funda Wang (zh_CN), Alexander Shopov (bg), Matic Žgur (sl). + +Version 2.15.91 +--------------- + +- Small fixes on error dialog (Lucas Rocha) +- Fix memory leak on image transformation (Felix Riemman) [349434] +- Fix typo on UI message (Lucas Rocha) [349361] +- Panning around the image with arrows on fullscreen mode + (Lucas Rocha) [347174] +- Updated translations: Hendrik Richter (de), Francisco Javier F. + Serrador (es), Christophe Merlet (fr), Maxim Dziumanenko (uk), + Jovan Naumovski (mk), Bastien Nocera (en_GB), Theppitak + Karoonboonyanan (th), Ankit Patel (gu), Jakub Friedl (cs) + +Version 2.15.90 +--------------- + +- Avoid losing EXIF data when saving changed jpeg images (Felix Riemman) + [#309219] +- Use middle mouse drag to scroll image (Wouter Bolsterlee) [#335689]. +- Make transparent color selection work (Felix Riemman) [#347600]. +- Fix crash when switching images with mouse wheel (Callum McKenzie) [#340827]. +- Updated translations: Mahay Alam Khan (bn_IN), Jordi Mallach (ca), Jakub + Friedl (cs), Kostas Papadimas (el), Christophe Merlet (RedFox) (fr), Satoru + SATOH (ja), Daniel Nylander (sv). + +Version 2.15.4 +--------------- + +- Several code cleanups (Felix Riemman) [#321267, #321267] +- Updated FSF address (Francisco Javier F. Serrador). +- Updated translations: Ales Nyakhaychyk (be), Vladimir Petkov (bg), Mahay + Alam Khan (bn_IN), Mahay Alam Khan (bn), Lukas Novotny (cs), Martin Willemoes + Hansen (da), Hendrik Richter (de), Mindu Dorji (dz), Alan Horkan (en_GB), + Francisco Javier F. Serrador (es), Priit Laes (et), Iñaki Larrañaga + Murgoitio (eu), Ilkka Tuohela (fi), Benoît Dejean (fr), Ankit Patel (gu), + Mohammad DAMT (id), Changwoo Ryu (ko), Fanomezana Rajaonarisoa (mg), Sanlig + Badral (mn), Mahesh Subedi (ne), A S Alam (pa), Licio Fernando Nascimento da + Fonseca (pt_BR), Leonid Kanter (ru), Felix (ta), Theppitak + Karoonboonyanan (th), Gheyret T.Kenji (ug), Woodman Tuen (zh_HK), Woodman + Tuen (zh_TW) + +Version 2.15.3 +--------------- +- Properly sort image filenames containing numbers (Felix Riemann) [#340957] +- Thumbnailing fixes (Felix Riemann) [#342817] +- Fix printing for images with alpha channel (Jan Kümmel) [#322057] +- Updated translations: Ignacio Casal Quinteiro (gl), Ankit Patel (gu), + Theppitak Karoonboonyanan (th), Clytie Siddall (vi), Inaki Larrañaga (eu), + Pema Geyleg (dz), Francisco Javier F. Serrador (es) + +Version 2.15.2 +--------------- +- Small code cleanups (Lucas Rocha) +- About dialog update (Claudio Saavedra) [#342103] +- Respect desktop saving lockdown (Lucas Rocha) [#341862] +- Avoid rezooming caused by progress bar (Lucas Rocha) [#327424] +- Partial fix for crash on slideshow/fullscreen + cancel (Claudio Saavedra) [#320206] + +Version 2.15.1 +--------------- +- mate-doc-utils migration (Lucas Rocha) +- Use the directory of the currently viewed file as + initial location of file chooser (Lucas Rocha) [#335653] +- Image navigation keyboard shortcuts review for desktop + coherence: Alt-Left for previous image, Alt-Right for + next, Alt-Home for first, Alt-End for last (Jaap Haitsma) +- GOption migration (Michael Plump) +- Small UI fixes (Lucas Rocha) [#339315, #335109] +- Duplex printing off by default (Lucas Rocha) [#334016] +- Fix crash when saving files on directories that EOM + is watching (Lucas Rocha) [#336050] +- Use of po/LINGUAS file (Michiel Sikkes) +- Updated translations: Baris Cicek (tr), Gora Mohanty (or), + Tommi Vainikainen (dz), Priit Laes (et), + Vincent van Adrighem (nl), Lukas Novotny (cs), + Clytie Siddall (vi), Kjartan Maraas (no), + Ankit Patel (gu). + +Version 2.14.0 +--------------- +- Fixes crasher when opening images with strange extensions + (Ryan Lortie) [#333551] +- Quit EOM when not able to load images (Lucas Rocha) +- Fix window positioning behavior (Lucas Rocha) +- Updated translations: Alexander Shopov (bg), Mugurel Tudor (ro), + Rajesh Ranjan (hi), Luca Ferretti (it), Ole Laursen (da), + Gabor Kelemen (hu), Daniel Nylander (sv), Elnaz Sarbar (fa), + Farzaneh Sarafraz (fa), Miloslav Trmac (cs), Benoît Dejean (fr). + +Version 2.13.92 +--------------- + +- Disable all debug messages by default (Lucas Rocha) [#331362] +- Fix 64-bit pointer truncation (Pascal Hofstee, Alexander + Nedotsukov) [#331971] +- Correct handling of zoom precision with mouse wheel + (Felix Riemann) [#310833] +- Build system fixes (Sylvain Bertrand) [#330708] +- Define a minimum window size (Lucas Rocha) [#327065] +- Mouse scroll wheel now makes image switching on collection + pane (Lucas Rocha) [#331645] +- Fixes crash when removing images from a directory with images + that EOM is watching (Lucas Rocha) +- Updated translations: Žygimantas Beručka (lt), Kostas Papadimas (el), + Satoru Satoh (ja), Inaki Larrañaga (eu), Artur Flinta (pl), + Rhys Jones (cy), Leonid Kanter (ru), Alessio Frusciante (it), + Maxim Dziumanenko (uk) + +Version 2.13.91 +--------------- + +- Remove critical warnings on save dialogs (Lucas Rocha) [#327170] +- Use current locale for images on NIS filesystem (Takao Fujiwara) [320289] +- Updated translations: Laurent Dhima (sq), Hendrik Richter (de), + Lukas Novotny (cs), Alexander Sigachov (ru) + +Version 2.13.90 +--------------- + +- Normal viewing of images from SMB shares (#326104) + Patch from Felix Riemann. +- .desktop file fixes (#328033) +- Updated translations: Theppitak Karoonboonyanan (th), Ankit Patel (gu), + Adam Weinberger (en_CA), Slobodan D. Sredojevic (sr, sr@Latn), + Priit Laes (et), Clytie Siddall (vi), Kjartan Maraas (no, nb), + Josep Puigdemont i Casamajó (ca), Francisco Javier F. Serrador (es), + Chao-Hsiung Liao (zh_TW, zh_HK), Funda Wang (zh_CN), Duarte Loreto (pt), + Evandro Fernandez Giovanini (pt_BR) + +Version 2.13.5 +-------------- + +- Plural string fixes (#327106) +- Updated translations: Clytie Siddall (vi), Ankit Patel (gu), + Gabor Kelemen (hu), Ivar Smolin (et), Takeshi Aihana (ja), + Kjartan Maraas (no, nb), Chao-Hsiung Liao (zh_TW, zh_HK), + Francisco Javier F. Serrador (es), Slobodan D. Sredojevic (sr, sr@Latn), + Ignacio Casal Quinteiro (gl), Ilkka Tuohela (fi) + + +Version 2.13.4 +-------------- + +- Disable xscreensaver on fullscreen mode (#326369) +- Correctly refresh image section for very small images (#317641). + Patch from Felix Riemann. +- New delete confirmation dialog (#322884). Patch from + Jaap Haitsma. +- Several code cleanups. Patches from Felix Riemann. +- Resize window according to the image dimensions (#323204) +- Add BackSpace accel for previous image action (#324088) +- Fix GTK+ dependency version. (#324149) +- Updated translations: Alan Horkan (en_GB), Clytie Siddall (vi), + Ilkka Tuohela (fi), Abel Cheung (zh_TW, zh_HK), Josep Puigdemont + i Casamajó (ca), Žygimantas Beručka (lt), Vincent van Adrighem (nl), + Kjartan Maraas (no, nb), Ignacio Casal Quinteiro (gl), Theppitak + Karoonboonyanan (th), Ankit Patel (gu), Alexander Shopov (bg), + Adam Weinberger (en_CA) + +Version 2.13.3 +-------------- + +- Added Return accelerator for Next Image and Shift+Return + and Shift+SpaceBar accelerators for Previous Image. (#322593) + Patch from Jaap A. Haitsma <[email protected]> +- Use one single function when changing single selection + instead of six too similar ones. (#321395) Patch from + Claudio Saavedra <[email protected]>) +- Icon now shown in about dialog. (#321665) Patch from + Vincent Noel <[email protected]>. +- Image information pane is disabled by default. (#313672) +- Other assorted bug fixes and code cleanups. +- Updated translations: + Ankit Patel (gu), Alessio Frusciante (it), Miloslav Trmac (cs), + Åsmund Skjæveland (nn), Francisco Javier F. Serrador (es), + Alexander Shopov (bg), Žygimantas Beručka (lt),Ales Nyakhaychyk (be), + Takeshi AIHANA (ja), Adam Weinberger (en_CA), Funda Wang (zh_CN), + Priit Laes (et), Ignacio Casal Quinteiro (gl), Kjartan Maraas (nb, no), + Guilherme de S. Pastore (pt_BR), Theppitak Karoonboonyanan (th). + +Version 2.13.2 +-------------- + +- UI redesign. Fixes bugs #148643 and #320542. (Lucas Rocha) + * Removed 'New Window' and 'Open Folder' from 'File' menu; + * Removed 'New Window' and 'Open' items from toolbar; + * Moved rotation toolbar items to the right edge; + * Added Next/Previous button to toolbar for easy navigation + through image collection; + * Added 'Go' menu with Next/Previous/First/Last Image items; + * Status shows the position of image within a collection, + not the number the selected images; + * Added 'Image Collection' item to 'View' menu to Show/Hide + image collection pane; + * Accelerators: Ctrl+PageDown and spacebar switches to the next + image, Ctrl+PageUp switches to the previous image, Ctrl+Home + switches to the first image, Ctrl+End switches to the last image, + F9 shows/hides image collection pane, F5 starts slideshow. +- Fix crash when setting window icon. Fixes bug #320245. + (Claudio Saavedra) +- Removed confirmation dialog when removing an image. Fixes + bug #309046. (Lucas Rocha) +- Option to use an image as the desktop wallpaper. Fixes bug + #140768. (Nirmal Kumar, Lucas Rocha) +- Page Up and Page Down scroll images up and down. Fixes bug + #152364. (Lucas rocha) +- Several code cleanups. (Lucas Rocha, Paolo Borelli) +- Correct keys that cancel Fullscreen and Slideshow. (Lucas + Rocha) +- On single and collection view, default focus on + image. Fixes bug #169836. (Lucas Rocha) +- Make it possible to use '=' or '+' for zooming in. Fixes + bug #320367. (Lucas Rocha) +- Added accelerators from numerical keypad for zooming in + and out. Fixes bug #315183. (Felix Riemann) +- Make scrollbar buttons work in thumbnails pane. Fixes + bug #124653. (Juan Carlos Inostroza) +- More coherent fullscreen/slide show behavior. Fixes + bug #317392. (Lucas Rocha) +- Window icon is a thumbnail of the image. Fixed bug + #311720. (Lucas Rocha) +- Use intuitive mate-icon-theme icon for image viewer + instead of EOM icon. Fixes bug #167087. (Lucas Rocha) +- Fix width of the information pane that was too small. + Fixes bug #313674. (Ed Catmur) + +Version 2.13.1 +-------------- + +- Update window title when saving in another location. + Fixes bug #318318. (Lucas Rocha) +- Asks to overwrite target file instead of source when 'Saving + as'. Fixes bug #162627. (Lucas Rocha) +- Don't crash when removing images from a collection. + Fixes bug #313003. (Lucas Rocha) +- No "Open in new window" option on save action. Fixes bug #318734. + (Lucas Rocha) +- Add image/svg+xml to the list of supported file types. + Closes bug #314566. (Lucas Rocha) +- Fix RGBA->RGB conversion when saving PNG images to JPEG. + Fixes bug #314742. (Felix Riemann) +- Update "recent files" when viewing images. Fixes bug #316004. + (Lucas Rocha) +- Ctrl+I keybinding to show/hide Image Properties bar. + Fixes bug #307188. (Lucas Rocha) +- Fix crash when trying to view an image from recent list that + doesn't exist anymore. Fixes bug #312448. (Lucas Rocha) +- Change X development libraries checking in build system + to work on every platform. Fixes bug #317828. (Christophe Belle) +- Fix crash when adding new non-image files to a directory eom + watches and when trying to view a PNG image with a JPEG extension. + Fixes bugs #316808 and #311925. (Callum McKenzie) +- Translation Updates: Ivan Noris (sk) + +Version 2.12.1 +-------------- + +- Several bug fixes from Lucas Rocha: fixes a crash reading broken + SVG files, fixes a crash when opening a symlink to an image, + and properly updates the status bar on opening. +- Translation Updaes: Vladimir Petkov (bg), Mahay Alam Khan (bn), + Miloslav Trmac (cs), Iñaki Larrañaga Murgoitio (eu), Ignacio + Casal Quinteiro (gl), Alessio Frusciante (it), Christian Rose (sv), + Clytie Siddall (vi) + + +Version 2.12.0 +-------------- + +- Images opened with the sidebar enabled are now shown at 100% zoom + with a correct window size. Bug #315189. (Ryan Lortie) +- Fixed a crashing bug while using arrow keys to navigate a + directory. Bug #311086. (Lucas Rocha) +- Translation Updates: Vladimir Petkov (bg), Jordi Mallach (ca), + Miloslav Trmac (cs), Rhys Jones (cy), Hendrik Richter (de), + Kostas Papadimas (el), Stéphane Raimbault (fr), Gil Osher (he), + Gabor Kelemen (hu), Mohammad DAMT (id), Young-Ho Cha (ko), + Erdal Ronahi (ku), Žygimantas Beručka (lt), Michiel Sikkes (nl), + Guilherme de S. Pastore (pt_BR), Duarte Loreto (pt), Mugurel + Tudor (ro), Leonid Kanter (ru), Laurent Dhima (sq), Baris + Cicek (tr), Maxim Dziumanenko (uk), Clytie Siddall (vi), + Woodman Tuen (zh_TW) + + +Version 2.11.92 +-------------- + +- Threading bug fix from Ross Burton. +- New Ukraininian translation of the manual. +- Translation Updates: + Vladimir Petkov (bg), Jordi Mallach (ca), Miloslav Trmac (cs), + Kostas Papadimas (el), Gabor Kelemen (hu), Žygimantas Beručka (lt), + Guilherme de S. Pastore (pt_BR), Duarte Loreto (pt) , Mugurel + Tudor (ro), Leonid Kanter (ru), Laurent Dhima (sq), Maxim + Dziumanenko (uk), Woodman Tuen (zh_TW) + + +Version 2.11.90 +--------------- + +- Bug fixes for dual-screen/multi-monitor display. + (Davyd Madeley) +- ICC color profile support, requires the Little CMS library + available at http://www.littlecms.com/ (Ross Burton) +- The thumbnail list of images is now updated dynamically + based on filesystem changes. (Philip Van Hoof) +- Printing and print preview bugs have been fixed. (Philip Van Hoof) +- Many small bug fixes and UI changes. +- Translation Updates: + Abdulaziz Al-Arfaj (ar), Vladimir Petkov (bg), Jordi Mallach (ca), + Miloslav Trmac (cs), Martin Willemoes Hansen (da), Hendrik Richter + (de), Nikos Charonitakis (el), Adam Weinberger (en_CA), David Lodge + (en_GB), Francisco Javier F. Serrador (es), Priit Laes (et), Iñaki + Larrañaga Murgoitio (eu), Meelad Zakaria (fa), Ilkka Tuohela + (fi), Benoît Dejean (fr), Ignacio Casal Quinteiro (gl), Ankit + Patel (gu), Rajesh Ranjan (hi), Gabor Kelemen (hu), Mohammad DAMT + (id), Alessio Frusciante (it), Takeshi AIHANA (ja), Changwoo Ryu + (ko), Žygimantas Beručka (lt), Terance Edward Sola (nb), Pawan + Chitrakar (ne), Michiel Sikkes (nl), Åsmund Skjæveland (nn), + Terance Edward Sola (no), Zuza Software Foundation (nso), Bartosz + Kosiorek (pl), Guilherme de S. Pastore (pt_BR), Duarte Loreto + (pt), Mugurel Tudor (ro), Leonid Kanter (ru), Steve Murphy (rw), + Ivan Noris (sk), Laurent Dhima (sq), Игор Несторовић + (sr), Christian Rose (sv), (tamil), Theppitak Karoonboonyanan (th), + A. Alphan Bayazit (tr), Gheyret T.Kenji (ug), Maxim Dziumanenko + (uk), Clytie Siddall (vi), Canonical Ltd (xh), Funda Wang (zh_CN), + Woodman Tuen (zh_TW), Zuza Software Foundation (zu) + + +Version 2.11.0 +-------------- + +- The status bar code has been reworked (Paolo Borelli) +- Preferences and Help dialogs now launch centered on the + parent window. (Paolo Borelli) +- Some small fixes to the zoom UI (Paolo Borelli) +- Color picker button has been rewritten to use new Gtk API + (Paolo Borelli) +- More UI fixes (Paolo Borelli, Dennis Cranston, Murali K.) +- Many bug fixes (Kjartan Maraas, Behdad Esfahbod) +- Portable to the Microsoft Windows platform (Tor Lillqvist) +- Translation Updates: + Vladimir Petkov (bg), Martin Willemoes Hansen (da), + Francisco Javier F. Serrador (es), Ivar Smolin (et), + Ilkka Tuohela (fi), Ignacio Casal Quinteiro (gl), + Terance Edward Sola (nb), Michiel Sikkes (nl), + Terance Edward Sola (no), Ivan Noris (sk), + Theppitak Karoonboonyanan (th), Gheyret T.Kenji (ug), + Funda Wang (zh_CN), Woodman Tuen (zh_TW) + +Version 2.10.2 +-------------- +- Translation Updates: Vladimir Petkov (bg), Ivar Smolin (et) + Iñaki Larrañaga Murgoitio (eu), Ignacio Casal Quinteiro (gl) + Gabor Kelemen (hu), Žygimantas Beručka (lt), Steve Murphy (rw) + Clytie Siddall (vi), Canonical Ltd (xh), Woodman Tuen (zh_TW) + +Version 2.10.0 +-------------- +- Translation Updates: + Albanian (Laurent Dhima), Brazilian Portuguese (Guilherme de + S. Pastore), Bulgarian (Vladimir Petkov), Canadian English (Adam + Weinberger), Catalan (Jordi Mallach), Chinese Simplified (Funda + Wang), Chinese Traditional (Woodman Tuen), Czech (Miloslav Trmac), + Danish (Martin Willemoes Hansen), Dutch (Tino Meinen), English/GB + (David Lodge), Estonian (Ivar Smolin), Finnish (Ilkka Tuohela), + French (Benoît Dejean), German (Frank Arnold), Greek + (Nikos Charonitakis), Gujarati (Ankit Patel), Hungarian (Gabor + Kelemen), Indonesia (Mohammad DAMT), Italian (Alessio Frusciante), + Japanese (Takeshi AIHANA), Korean (Changwoo Ryu), Lithuanian + (Žygimantas Beručka), Macedonian (Tomislav Markovski), Norwegian + (Kjartan Maraas), Norwegian (Kjartan Maraas), Polish (Bartosz + Kosiorek), Portuguese (Duarte Loreto), Punjabi (Amanpreet Singh + Alam), Romanian (Mugurel Tudor), Russian (Leonid Kanter), Serbian + (Данило Шеган), Slovak (Ivan Noris), Spanish (Francisco Javier + F. Serrador), Swedish (Christian Rose), Thai (Theppitak + Karoonboonyanan), Turkish (A. Alphan Bayazit), Ukrainian (Maxim + Dziumanenko), Xhosa (Canonical Ltd) + +Version 2.9.0 +------------- +- Support for bug-buddy auto version completion (Christoffer Olsen) +- Some critical bug fixes (James Henstridge, Jens) +- Preferences help (Vinay M R) +- Removing of eel dependency (Paolo Borelli) +- Show/hide image info view +- Translation Updates: + Adam Weinberger (en_CA), Alexander Shopov (bg), David Lodge (en_GB), + Dwayne Bailey (nso), Francisco Javier F. Serrador (es), Hendrik Richter + (de), Kjartan Maraas (nb), Laurent Dhima (sq), Martin Willemoes Hansen + (da), Miloslav Trmac (cs), Mohammad DAMT (id), + +Version 2.8.1 +------------- +- Documentation update +- File/directory chooser fix +- Removed quit from menu for consistency +- Recent files update +- More statusbar information +- Improved slideshow navigation +- Translation Updates: + Abel Cheung (zh_TW, mk, de), Akagic Amila (bs), Alessio + Frusciante (it), Arafat Medini (ar), Changwoo Ryu (ko), + Danilo Šegan (sr), Jens Finke (cs), Jesus Bravo Alvarez (gl), + Nikos Charonitakis (el), Paisa Seeluangsawat (th), + Stanislav Visnovsky (sk) + +Version 2.8.0 +------------- +- Bug fixes +- Translation Updates: + Adam Weinberger (en_CA), Alexander Shopov (bg), Arafat Medini + (ar), Baris Cicek (tr), Changwoo Ryu (ko), Christian Rose (sv), + Christophe Merlet (fr), Dafydd Harries (cy), Danilo Šegan (sr), + David Lodge (en_GB), Estêvão Samuel Procópio (pt_BR), Francisco + Javier F. Serrador (es), Gora Mohanty (or), Ilkka Tuohela (fi), + Iñaki Larrañaga (eu), Jayaradha (ta), Jordi Mallach (ca), + Kjartan Maraas (nb, no), Kostas Papadimas (el), Laszlo Dvornik (hu), + Laurent Dhima (sq), Leonid Kanter (ru), Martin Willemoes Hansen (da), + Miloslav Trmac (cs), Mugurel Tudor (ro), Peteris Krisjanis (lv), + Roozbeh Pournader (fa), Takeshi AIHANA (ja), Vincent van Adrighem (nl), + Åsmund Skjæveland (nn) + +Version 2.7.1 +------------- +- eom.desktop fix (Ray Strode) +- About icon added (Mason Kidd) +- Removed bonob dependencies +- Compile with new libexif (Grzegorz Golawski) +- Multiple string translation fixes +- Multiple bug fixes (slideshow, crasher) +- Translation Updates: + Adam Weinberger (en_CA), Alexander Shopov (bg), Ankit Patel (gu), + Artur Flinta (pl), Changwoo Ryu (ko), Christian Rose (bs, or), + Danilo Šegan (sr), David Lodge (en_GB), Duarte Loreto (pt), + Francisco Javier F. Serrador (es), Funda Wang (zh_CN), Gareth Owen + (en_GB), Gora Mohanty (or), Guntupalli Karunakar (hi), Gustavo Maciel + Dias Vieira (pt_BR), Hasbullah Bin Pit (ms), Jens Finke (de), + Kjartan Maraas (nb, no), Laszlo Dvornik (hu), Laurent Dhima (sq), + Martin Willemoes Hansen (da), Maxim Dziumanenko (uk), Miloslav + Trmac (cs), Takeshi AIHANA (ja), Telsa Gwynne (cy), Tommi Vainikainen + (fi), Vincent van Adrighem (nl), Åsmund Skjæveland (nn), + Žygimantas Beručka (lt) + +Version 2.7.0 +------------- +- Kicked matecomponent components. Eom is a monolithic program again. +- Display image info for single and collection view. +- Better metadata reader +- Speed improvements +- Use new GtkUIManager +- New icons for flipping transformations +- "Save As" function in collection view +- "Delete" function +- Translation Updates: + Adam Weinberger (en_CA), Alexander Shopov (bg), Alexander Winston (en_CA), + Christian Rose (tk), Christophe Merlet (fr), Est Samuel Proc io (pt_BR), + Francisco Javier F. Serrador (es), Gareth Owen (en_GB), Gil Osher (he), + Gustavo Maciel Dias Vieira (pt_BR), Jens Finke (de), Laurent Dhima (sq), + Miloslav Trmac (cs), Pablo Saratxaga (wa), Pawan Chitrakar (ne), + Vincent van Adrighem (nl) + +Version 2.6.1 +------------- +* General: + - Fullscreen fixes for Xinerama (#137137) +* Translation Updates: + Abel Cheung (zh_TW), Andras Timar (hu), Christian Rose (af), + Guntupalli Karunakar (gu), Iñaki Larrañaga (eu), Pablo Saratxaga (wa), + Samúel Jón Gunnarsson (is) + +Version 2.6.0 +------------- +* General: + - Fileselector opens non local URIs (Seth Nickell) + - Italian documentation update (Lucca Feretti) +* Translation Updates: + Andras Timar (hu), Arafat Medini (ar), Baris Cicek (tr), Dmitry G. + Mastrukov (ru), Gareth Owen (en_GB), Guntupalli Karunakar (pa), + Stanislav Visnovsky (sk), Telsa Gwynne (cy) + +Version 2.5.91 +-------------- +* Translation Updates: + Abel Cheung (zh_TW), Alastair McKinstry (ga), + Alexander Winston (en_CA), Dafydd Harries (cy), Dinesh Nadarajah (ta), + Francisco Javier F. Serrador (es), Gustavo Maciel Dias Vieira (pt_BR), + Leonid Kanter (ru), Maxim Dziumanenko (uk), Miloslav Trmac (cs), + Robert Sedak (hr), Sanlig Badral (mn), Sayamindu Dasgupta (bn) + +Version 2.5.90 +-------------- +* General: + - Documentation updates (Breda McColgan) + - Translation markup fix (Ole Laursen) - #119170 + - File Selection fixes (Jan Arne Peterson, Jonathan Blandford, + Jens) - #128396, #135816 +* Collection: + - New busy icon, borrowed from caja. - #134981 + - Thumbnail layout fixes. +* Translation Updates: + Alastair McKinstry (ga), Ales Nyakhaychyk (be), + Alessio Frusciante (it), Changwoo Ryu (ko), Christophe Merlet (fr), + Duarte Loreto (pt), Francisco Javier F. Serrador (es), Guntupalli + Karunakar (hi), Jarkko Ranta (fi), Jordi Mallach (ca), + Kjartan Maraas (no), Kostas Papadimas (el), Miloslav Trmac (cs), + Mugurel Tudor (ro), Mətin Əmirov (az), Ole Laursen (da), + Paisa Seeluangsawat (th), Priit Laes (et), Takeshi AIHANA (ja), + Vincent van Adrighem (nl), Yuriy Syrota (uk), Žygimantas Beručka (lt) + +Version 2.5.6 +------------- +* General: + - Updated documentation (Breda McColgan) + - Typo fixes (Alessio Frusciante) + - AIX compilation fixes + - Recent files update +* Collection: + - Marked forgotten string for translation (Danilo Šegan) +* Translation Updates: + Artur Flinta (pl), Christian Rose (sv), Danilo Šegan (sr), + Francisco Javier F. Serrador (es), Hasbullah Bin Pit (ms), + Jarkko Ranta (fi), Jens Finke (de), Kostas Papadimas (el), + Laurent Dhima (sq), Miloslav Trmac (cs), Takeshi AIHANA (ja), + Åsmund Skjæveland (nn) + +Versino 2.5.5 +------------- +* General: + - Don't force file selector window size. +* Collection: + - Save scroll position in exif data, when switching images. + Fixes #123463. +* Translation Updates: + Alastair McKinstry (ga), Arafat Medini (ar), Changwoo Ryu (ko), + Christian Rose (sv), Danilo Šegan (sr, sr@Latn), Francisco + Javier F. Serrador (es), Hasbullah Bin Pit (ms), Laurent Dhima (sq), + Mətin Əmirov (az), Nikos Charonitakis (el), Takeshi AIHANA (ja), + Vincent van Adrighem (nl) + +Version 2.5.4 +------------- +* General: + - Recent files update (Jason Leach) + - Compile fixes - #131766 (German Poo Caaman~o) + - Crash fix for filenames with ':' - #130726 + - Close file dialog on cancel in all cases - #131654 + (Balamurali Viswanathan) +* Collection: + - Display name of the directory shown - #132263 + - Fixed memory leaks. + - Mnemonic for "View as Image Collection" in Caja - #128796 + (Christian Neumair) +* Translation Updates: + Changwoo Ryu (ko), Laurent Dhima (sq), Christophe Merlet (fr), + Miloslav Trmac (cs), Takeshi AIHANA (ja), Kostas Papadimas (el), + Robert Sedak (hr), Sanlig Badral (mn), Jens Finke (de), + Artur Flinta (pl), Vincent van Adrighem (nl), Francisco Javier F. + Serrador (es), Žygimantas Beručka (lt), Duarte Loreto (pt), + Ole Laursen (da), Hasbullah Bin Pit (ms), Kjartan Maraas (no), + Andras Timar (hu), Mətin Əmirov (az), Åsmund Skjæveland (nn), + Danilo Šegan (sr) + +Version 2.5.3 +------------- +* General: + - Preview of images in the fileselector if an thumbnail + already exists. + - 'eom *.jpg' works again and give you a nice collection view + - Handle spaces in filenames. +* Translation Updates: + Žygimantas Beručka (lt), Miloslav Trmac (cs), Francisco Javier + F. Serrador (es), Taneem Ahmed (bn), Danilo Šegan (sr, sr@Latn), + Robert Sedak (hr), Duarte Loreto (pt), Christophe Merlet (fr), + Åsmund Skjæveland (nn), Laurent Dhima (sq), Jordi + Mallach (ca), Roozbeh Pournader (fa), Kjartan Maraas (no), + Artur Flinta (pl), Arafat Medini (ar) + +Version 2.5.2.1 +--------------- +* General: + - Intltool build fix (#130062) +* Collection: + - Indicate modified images by bold caption + - Better caption wrapping +* Translation Updates: + Laurent Dhima (sq), Gustavo Noronha Silva (pt_BR), + Takeshi AIHANA (ja), Miloslav Trmac (cs), + Åsmund Skjæveland (nn), Duarte Loreto (pt), + Artur Flinta (pl) + +Version 2.5.2 +------------- +* General: + - Use new GTK file chooser (Jan Arne Petersen) + - Compilation fixes (Kaushal Kumar) + - Build fix (Thomas Vander Stichele) + - Multiple save-issues fixed + - Fullscreen mode crash fixed + - 0-byte file issue fixed +* Collection: + - Show only image files, which can actully loaded by GdkPixbuf +* Translation Updates: + Jens Finke (de), Danilo Šegan (sr, sr@Latn), Francisco Javier + F. Serrador (sp), Miloslav Trmac (cs), Kjartan Maraas (no), + Changwoo Ryu (ko), Takeshi AIHANA (jp), Arafat Medini (ar), + Vincent van Adrighem (nl), Laurent Dhima (sq), Kjartan Maraas (no) + +Version 2.5.1 +------------- +* General: + - Support lossless saving of jpeg files (Jens) +* Collection: + - Select last viewed slideshow image when returning from fullscreen + (Jens) - #118617 +* Viewer: + - Display image file size (Jens) + - Ask user before overwriting files ([email protected]) + #119469 +* Translation Updates: + Laurent Dhima (sq), Paisa Seeluangsawat (th), Vincent van Adrighem + (nl), Miloslav Trmac (cs), Žygimantas Beručka (lt), Danilo Šegan + Šegan (sr), Ole Laursen (da), Jordi Mallach (ca), Kostas Papadimas + (el), Francisco Javier F. Serrador (es) + +Version 2.5.0.1 +--------------- +* General: + - Cache recently loaded images. + - Use exif loader from libexif >= 0.5.12. + - Reworked image loading status cycle + - Made fullscreen shortcut key F11 work on Solaris (Shivaram + Upadhyayula, Jens) - #104805 + - Updated help (Breda McColgan) +* Collection: + - Don't include auto-generated files in tarball - #125118 + - New model implementation (EomImageList) + - Mem leak fix + - Slideshow: automatic switching after user determined timeout. + - Slideshow: determine upscale status for small images by config + key. +* Shell: + - Consider mateconf key 'open_new_window' - #91189 + - Tool-/statusbar hiding (Kaushal Kumar, Jens) - #114231 + +* Translation Updates: + Danilo Šegan (sr, sr@Latn), Åsmund Skjæveland (nn), Kostas Papadimas (el), + KAMAGASAKO Masatoshi (ja), Jordi Mallach (ca), Vincent van Adrighem (nl), + Hasbullah Bin Pit (ms) + +Version 2.5.0 (changes since 2.4.0) +------------- +* General: + - Better filename -> UTF-8 translation - #122671, #117838 (Jens, + Hidetoshi Tajima) + - configure switch to disable libexif support + - Added X-MATE-DocPath to .desktop file - #124196 +* Collection: + - Fixed crash on shutdown + - Fixed crash when libexif is not available + - Fixed duplicate size entries in info view + - Update image infos on modification + - Much better thumbnail layout + - Mark status message for translation + - Don't show frame around temporary icons +* Translation Updates: + Pablo Saratxaga (wa), Gustavo Maciel Dias Vieira (pt_BR), + Žygimantas Beručka (lt), [email protected] (et), Jordi Mallach (ca), + Christian Rose (sv), Pablo Gonzalo del Campo (es), + Vincent van Adrighem (nl), Danilo Šegan (sr), Jens Finke (de) + +==== mate-2-4 branch ==== + +Version 2.4.0 +------------- +* General: + - User documentation updates (Irene Ryan) +* Collection View: + - Crash fixed on startup when not linking against libexif. (Jens) +* Translation Updates: + Mugurel Tudor (ro), Jarkko Ranta (fi), Ivan Stojmirov (mk), + Guntupalli Karunakar (hi), Pablo Saratxaga (vi) + +Version 2.3.90 +-------------- +* Build fix - #120871 (William Jon McCann +* Translation Updates: + Dafydd Harries (cy), Vincent van Adrighem (nl), Stanislav Visnovsky (sk), + Pablo Gonzalo del Campo (es), Yuriy Syrota (uk) + +Version 2.3.6 +------------- +* General: + - HIG dialog fixes - #117799 (Martin Kretzschmar) + - Menu layout fixes - #117270 (Andreas Köhler) + - Removal of debug messages/code (Jens) + - Destroy "file does not exsit" dialog #117673 - (Andreas Köhler) +* Controls: + - Wait until timeout before destroying control on last reference + #118204 - (Gustavo Carneiro, Jens) +* Translation Updates: + Vincent van Adrighem (nl), Duarte Loreto (pt), Kostas Papadimas + (el), Francisco Javier Fernandez (es), Takeshi AIHANA (jp), Changwoo Ryu (ko), + Dafydd Harries (cy), Pablo Saratxaga (vi), Christophe Merlet (fr), + Laurent Dhima (sq), Evandro Fernandes Giovanini (pt_BR), + Hasbullah Bin Pit (ms), Alessio Frusciante (it), Dmitry G. Mastrukov (be), + Ole Laursen (da), Funda Wang (zh_CN), Metin Amiroff (az), Danilo + Šegan (sr, sr@Latn), Jarkko Ranta (fi), Metin Amiroff (az), + Kjartan Maraas (no), Abel Cheung (zh_TW), Samúel Jón Gunnarsson (is), + Sanlig Badral (mn) + +Version 2.3.5 +------------- +* General: + - UI polishing + - Documentation build fixes (John Fleck) + - Don't show title on error dialogs + - Unified copyright string - #101726 (Christian Neumair) + - eom.desktop fixes (Jordi Mallach) +* Collection View: + - Hide side panes on splitter mouse click + - Draw frame around thumbnails + - Arrange thumbnails better + - Show scrollbars only if required (Andreas Köhler) +* Image View: + - Window should be adapted to image size in all cases now - #114189 + - Show error dialog on I/O errors +* Translation Updates: + Valek Filippov (ru), Andras Timar (hu), Vincent van Adrighem (nl), + Dmitry G. Mastrukov (b), Pablo Saratxaga (wa), Metin Amiroff (az), + Owain Green & Dafydd Harries (cy), Jens Finke (de), Christian Rose + (sv), Jordi Mallach (ca), Miloslav Trmac (cs), Gil "Dolfin" Osher + (he), Artur Flinta (pl) + +Version 2.3.4 +------------- +* SVG mime type fixes (Christian Schaller) +* Special support for JPEG images on save (preserves EXIF data, + requires libjpeg) +* Function for saving modified images in a collection. +* Collection thumbnail creation/update fixes. +* Code cleanup +* GUI cleanup (before the freeze) +* Gconf keys cleanup +* Translation Updates: + Christian Rose (sv), Jordi Mallach (ca), Takeshi AIHANA (ja), + Christophe Merlet (fr), Sam?el J?n Gunnarsson (is), Dmitry + G. Mastrukov (ru), Laurent Dhima (sq), Hasbullah Bin Pit (ms), + Miloslav Trmac (cs), Vincent van Adrighem (nl), Taneem Ahmed (bn), + Mohammad DAMT (id), Jens Finke (de), Gil "Dolfin" Osher (he), Ole + Laursen (da), Artur Flinta (pl), Pauli Virtanen (fi). + +Version 2.3.3 +------------- +* Printing of images in image viewer (Lutz Müller) +* Image Collection View: + - Layout computation fix (Federico) + - image rotation/flipping (Jens) + - drag'n'drop source (Jens) +* Load/transform progress indication (Jens) +* Scheme type fixes (Abel Cheung) +* Build fix (Art Haas) +* Translation Updates: + Christophe Merlet (fr), Takeshi AIHANA (ja), Paul Duffy (ga), + Pablo Gonzalo del Campo (es), Danilo Danilo Šegan (sr@Latn), + Paisa Seeluangsawat (th), Hasbullah Bin Pit (ms), + Duarte Loreto (pt), Abel Cheung (zh_TW), Christian Rose (sv), + Dmitry G. Mastrukov (be), Laurent Dhima (sq), Miloslav Trmac (cs), + Christian Neumair (de), Jordi Mallach (ca), Kostas Papadimas (el), + Vincent van Adrighem (nl), Evandro Fernandes Giovanini (pt_BR), + +Version 2.3.2 +------------- +Release skipped. + +Version 2.3.1 +------------- +* TIFF loading fixes - #109139 (Jens) +* Consider theme background (Jens) +* Code cleanup (Federico) +* List collection view in caja only if there are images in + the directory (Alexander Larsson) +* Hide mouse cursor in fullscreen mode - #92184 (Jens) +* Added menu mnemonics - #107831 (Jens) +* More international help docs (Mike Lei) +* Collection view supports zoom interface (Jens) +* Recent files support (Jens) +* Scheme installation fixes (Bobby Kashani, Jens) +* Fullscreen image pre-load improvements (Jens) +* Translation updates: + Jens Finke (de), Fatih Demir (ta), Laurent Dhima (sq), Miloslav + Trmac (cs), Changwoo Ryu (ko) + +Version 2.3.0 +------------- +* Architectual changes (Jens) +* Build image collection component always + (this is also usable in Caja as photo collection view) (Jens) +* Collection view shows the selected image in the top + half of the window (Jens) +* Support for thumbnail management spec (Jens) +* Adaption to content size works better (Jens) +* Sticky zoom to fit (if you resize the window the image zoom will be + adapted automatically) (Jens) +* Progressive image loading for remote or large files - #89831 (Jens) +* EXIF support in collection view (requires optional libexif) (Jens) +* Correct filename escaping - #105192, #95561, #104961 (Federico) +* Session recovery fixes - #108829 (Shivaram Upadhyayula) +* File selector improvements - #101888, #102116, #90767, #102117 (Jens) +* More HIG compatible - #106169, #100206 (Jens) +* Use 'Image Viewer' in .desktop entry - #100205 (Elle Uca) +* Require libeel (Federico) +* Compiler warning fixes - #108342 (Kelledin, Jens) +* Don't close preferences on ESC - #105720 (Jens) +* Updates of strings to translate - #99572 (Jens) +* MateConf configure fixes - #106130 (Julio Merino) +* Translation Updates: + Roozbeh Pournader (fa), FSF-India (ml), + Metin Amiroff (az), Paul Duffy (ga), + Belarusian team (be), Christophe Merlet (fr) + +=============== Branch for Mate 2.4 ================ + +Version 2.2.0 +------------- +* Translation updates. + +Version 1.1.4 +------------- +* Translation updates. + +Version 1.1.3 +------------- +* Toolbar fix (Christian Neumaier) +* Translation updates. + +Version 1.1.2 +------------- + +* Typo fixes. (Kjartan Maraas) +* Translation updates. + +Version 1.1.1 +------------- + +* Typo fixes. (Kjartan Maraas) +* Documentation updates. - #91027 (Irene Ryan) +* URI handling fixes. (Jens) +* Don't depend on libmateprint until printing is working again. (Jens) +* Translation updates. + +Version 1.1.0 +------------- + +* We don't crash anymore if the user doesn't have permissions to read + a file - #85263 (Federico). +* The window is correctly sized upon startup, and you can shrink it + again - #72352, #75713 (Jens). +* Caja will now display "Display as Image", which is better than + "Display as EOM Image" - #73651 (Federico). +* Images now have a simple context menu - #75889 (Federico). +* We do the right thing to destroy the window list on File/Exit - + #86469 (Federico). +* Filenames with percent signs in them are now handled correctly - +* #89372 (Federico). +* The File/Open dialog now displays a list of the supported image + types - #85690 (Jens). +* Removed Tiles interpolation as it does not make sense for EOM. (Federico) +* Reworked preferences dialog and droped View menu settings. (Jens) +* Components are installed in $(libexec) (Michael). +* Restarted work on the collection component, currently disabled + by default (Jens). +* No distorted view anymore when resizing an empty window. - + #85927 (Jens) +* DnD into an empty window doesn't open a new window. (Jens) +* Load control ui xml file correctly (Ross Burton). +* Fullscreen now uses the whole screen again. (Jens) +* Better HIG compliance. (Jens) +* Rotating and flipping images - #68340 (Jens). +* New Latvian translation (Peteris Krisjanis). +* New Bulgarian translation (Borislav Aleksandrov). +* New Albanian translation (Laurent Dhima, Christian Rose). +* Lots of updated translations. + +=========== Branch for Mate 2.2 ================= + +Version 1.0.1 +------------- + +* We now display error dialogs if files that do not exist get passed + through the command line - #84890 (Federico). +* Fixed a stupid bug that affected session management - #85216 + (Federico). +* Translation Updates + +Version 1.0.0 +------------- + +* Fixed installation of locale files on Solaris - #83642 (Hidetoshi + Tajima) +* Translation Updates + +Version 0.119 +------------- + +* Updated the scrolling engine for GTK+ 2.0; it is nice and fast again - + #82417 (Federico) +* EOM doesn't crash on exit anymore if you bring up the preferences + dialog - #82426 (Federico) +* Session is saved and discarded correctly - #82603 (Federico) +* Re-added scroll wheel support - #79351 (Federico) +* Fixes for installation prefix - #83399 (Ross Burton) +* Opening an image in a window that already contains one will not screw + up the image view size - #83233 (Federico) +* Prettified the About dialog (Federico) +* Misc. code cleanup (Federico) + +Version 0.118 +------------- + +* include dir fix (Ronald Bultje, me) +* fix for save-session crash (me) +* reduced debug output (Michael) +* accessibility support (Muktha Narayan, Federico) +* support for loading svg images (Jacob Berkman) +* zoom to fit does fit, #76406 (Federico) +* image saving fix, #76239 (Federico) +* preference dialog has help (Satyajit Kanungo, Federico) +* Updated translations: + Pablo Saratxaga (vi, ca, wa),Duarte Loreto (pt), Kjartan Maraas (no), + Stanislav Visnovsky (sk), Hector Garcia Alvarez (es), + Christophe Merlet (fr), Ole Laursen (da), Abel Cheung (zh_TW), + Zbigniew Chyla (pl), Christian Rose (sv), Hasbullah Bin Pit (ms) + + +Version 0.117 +------------- + +* no re-rendering on mouse moves, bug #72351 (fix has been in 0.116.1 already + but wasn't announced yet) (Michael Meeks) +* session management fixes (Federico) +* image saving fixes, bug #77173 (Federico) +* matecomponent_window_new adaptions (Murray Cumming) +* build fixes regarding broken libjpeg, bug #79010 (Federico) +* help topic menuitem added (Satyajit Kanungo) +* fullscreen fix, bug #73606 (Federico) +* Updated translations: + Jarkko Ranta (fi), Ole Laursen (da), Changwoo Ryu (ko), + Zbigniew Chyla (pl), Hasbullah Bin Pit (ms) + + +Version 0.116.0 +--------------- + +* added mnemonics to preference dialog +* menu rearrangements to fit HIG better +* bigger default window size +* session management +* build fixes +* removed remaining uses of deprecated API +* fixed memory leak with preference dialog +* beautified preference dialog +* Updated translations: + Christian Rose (sv), Jarkko Ranta (fi), Stanislav Visnovsky (sk), + Abel Cheung (zh_TW), Duarte Loreto (pt), Kjartan Maraas (no), + Fatih Demir (ta), Christophe Merlet (fr), Changwoo Ryu (ko), + Zbigniew Chyla (pl), Hasbullah Bin Pit (ms), Jens Finke (de) + + +Version 0.115.0 +--------------- + +* reworked user dialog when opening multiple files concurrently +* report loading errors to the user through a dialog +* reworked preferences dialog +* Updated translations: + Ole Laursen (da), Zbigniew Chyla (pl), Hasbullah Bin Pit (ms), + Jens Finke (de), Roy-Magne Mo (nn), Wang Jian (zh_CN), + Valek Filippov (ru), Jarkko Ranta (fi) + +Version 0.114.0 +--------------- + +* zooming fixes +* memory leak fixes +* documentation fixes (John Fleck) +* don't ask for collection component when there are + multiple files on the command line +* link with popt explicitly (Laszlo Peter) +* save preference settings through mateconf +* updated translations: + Valek Filippov (ru), Stanislav Visnovsky (sk), Zbigniew Chyla (pl), + Hasbullah Bin Pit (ms), Ole Laursen (da), Takayuki KUSANO (ja), + Kjartan Maraas (no), Jarkko Ranta (fi) + +Version 0.113.0 +--------------- + +* fixed statusbar updates +* merged most of the ChangeLogs into a single one (Federico) +* check for required library versions on configure +* don't crash on non-image files (bug #72228) +* integrate smoothly with caja (bug #72069) +* use gtk stock icons +* updated translations: + Ole Laursen (da), Kjartan Maraas (no), Jens Finke (de), + Wan Jian (zh_CN) + +Version 0.112.0 +--------------- + +* fixed display flickering when zooming (Jens) +* removed features which won't be ready + within the Mate2 timeframe: (Jens) + - evolution & gnocam configure options + - printing support +* eom.desktop updates for Mate2 (Jens) +* build fixes for Forte CC (Laszlo Peter) +* disable properites menu item when + no component is loaded (Jens) +* fixed all remaining places where + strings aren't marked as translatable (Jens) +* some code cleanup (Jens) +* Updated translations: + Zbigniew Chyla (pl), Cristian Rose (sv), Duarte Loreto (pt) + Ole Laursen (da) + +Version 0.111.0 +--------------- + +* setup eom-image-viewer component for translation (Jens) +* removed decorations on fullscreen mode (Jens) +* fixed image saving (Jens) +* fixed all the remaining issues where strings don't get translated (Jens +* Updated translations: + Abel Cheung (zh_TW), Takayuki KUSANO (ja) + +Version 0.110.0 +--------------- + +* Better integration with Caja (Michael Meeks) +* autoconf 2.5x build fix (Havoc Pennington) +* bind_textdomain fixes (Shingo Akagaki) +* MateComponent reference leak fixes (Jens) +* Resize window to image on opening (Jens) +* Drag'n'drop fixes (Jens) +* Re-enabled preference settings (Jens) +* mateconf schema installation fixes (Jens) +* Code cleanup & compile warning fixes (Jens) +* New/updated translations: + Christophe Merlet (fr), Ole Laursen (da), Duarte Loreto (pt), + Zbigniew Chyla (pl),Stanislav Visnovsky (sk), Roy-Magne Mo (nn), + Jarko Ranta (fi), Vincent van Adrighem (nl), Kjartan Maraas (no), + Chrisitan Rose (sv), Hasbullah Bin Pit (ms) + + +=========== 0.11x.0 versions are for Mate 2 ====================== + +Version 0.6 +----------- + +* There's a totally new MateComponent component which uses the core EOM + code to display things (Martin, Michael). The old component has + been moved into Caja. + +* Requires MateComponent 0.35, MateConf 0.12, mate-print 0.25 and OAF 0.6.2. + +Version 0.5 +----------- + +* You can now drag a bunch of filenames into a window and EOM will + open them for you (patch from Juan Pablo Mendoza). + +* Introduced a maximum zoom factor so that the gdk-pixbuf scaling + functions are happy (Federico). + +* Fixes to the documentation installation procedure (Federico). + +Version 0.4 +----------- + +* Requires libglade stable and MateConf 0.8. + +* We now have a wonderful user's manual courtesy of Eliot Landrum. + This guy deserves a beer. + +* Greatly enhanced the scrolling engine. Now it is fast and nice. It + also supports a two-pass scrolling mode which is useful for slow + machines when scrolling zoomed images (Federico). + +* New full screen viewing mode. Look at your images on the big + screen! (Federico) + +* We support wheel mice; you can use the wheel for zooming (Federico). + +* Windows can adjust their size and zoom factor automatically when + opening new images (Federico). + +* New preferences dialog and a slew of options to tinker + with (Arik, Federico). + +* The MateComponent part can now use OAF instead of GOAD (Maciej). + +* Plenty of MateComponent work (Michael, Iain, Maciej). + +* Miscellaneous UI polishing (Federico). + +* New and updated translations (Fatih, Pablo, Rasta, Kjartan, Jesús, + Zbigniew, Yukihiro, Christopher, Andreas, Jarkko, Valek, Gergo, + Ville, Yuri, Kusano, Kenny, Kai, George, Matthias, Federico). + +Version 0.3 +----------- + +* Requires gdk-pixbuf 0.7, mate-print 0.18, matecomponent > 0.9. + +* The old canvas-based rendering engine is gone. We now have a custom + rendering engine using gdk-pixbuf's fast scaling functions (right + now only bilinear interpolation is supported, but that will change). + Zooming and scrolling can be interrupted by the user at any time, + leading to a smoother user interface experience (Federico). + + Scrolling is not finished, look at the TODO list to see what is + missing. The final scrolling support will be in the next version. + +* Image windows now display the filename and image size in the title + (Miguel, Federico). + +* Many enhancements to the MateComponent component (Michael). + +* RGBA print support for the MateComponent component (Michael). + +* We now install an eom.desktop file and a cool icon (Tuomas). + +* Many new and updated translations (Ville, Jarkko, Pablo, Dan, Gergo, + Alastair, Tomasz, Richard, Yuri, Matthias, Sergey, Fatih, Dennis, + Christopher, George, Lauris, Vincent, Simos, Kjartan). + +Version 0.2 +----------- + +* Requires gdk-pixbuf-0.3. Uses the new gdk-pixbuf API. + +* Added "hand" scrolling. Performance sucks due to limitations in + GtkLayout and the MATE canvas. These will be fixed shortly. + + +Version 0.1 +----------- + +This is the first public release of the Eye of Mate. It is *far* +from complete, but is stable and usable enough to work as a small and +fast image viewer. + +Features in this release: + +- Opening multiple images at once in different windows. + +- Fast zooming and scrolling, while keeping memory usage constant. + +- Opening multiple images from the command line. @@ -0,0 +1,89 @@ +Eye of MATE: an image viewing and cataloging program +----------------------------------------------------- + +Perfect vision soup: + + - 1 cauldron of snake broth + - 2 vampire ears + - 4 legs of tarantula + - 1 eye of mate + + +Description +----------- + +This is the Eye of MATE, an image viewer program. It is meant to be +a fast and functional image viewer. + +Requirements +------------ + +This package requires the following modules to be installed: glib, +GTK+, libmateui, libglade, mateconf, mate-desktop, gio, gdk-pixbuf, +mate-icon-theme, shared-mime-info, libart, and libglade. + +You can get these packages from your favourite MATE FTP mirror or at +http://download.gnome.org/sources or from other sources where MATE +packages are distributed. shared-mime-info can be downloaded +from the freedesktop.org website. + + +Optional Libraries +------------------ + +'Eye of MATE' supports the reading of EXIF information stored in +images by digital cameras. To get this working, you need the optional +libexif library. It is available at http://libexif.sourceforge.net. +If you also want to preserve your EXIF data on save make sure you have +libjpeg installed, including the development files. + +In order to make 'Eye of MATE' work as a single instance application you'll +need D-Bus installed in your system. You can get it from +http://www.freedesktop.org/wiki/Software/dbus . + +Other optional dependencies include Little cms for color management, +Python, pygtk, and mate-python for python plugins support, and +Exempi for XMP metadata reading. + +Availability +------------ + +The bleeding-edge version of this package is always available from the MATE +SVN repository (instructions at http://developer.gnome.org/tools/svn.html). +Released versions are available at http://download.gnome.org/sources/eom. + +Webpage +------- + +You can find screenshots and the latest news about 'Eye of MATE' in +http://www.gnome.org/projects/eom. + + +Reporting bugs +-------------- + +Please use the MATE bug tracking system to report bugs. You can +reach it at http://bugzilla.gnome.org. + + +License +------- + +This program is released under the terms of the GNU General Public +License. Please see the file COPYING for details. + + +Authors +------- + +Maintainer: Lucas Rocha ([email protected]) + +Felix Riemann ([email protected]) +Claudio Saaevedra ([email protected]) +Tim Gerla ([email protected]) +Arik Devens ([email protected]) +Federico Mena-Quintero ([email protected]) +Jens Finke ([email protected]) +Lutz Müller ([email protected]) +Martin Baulig ([email protected]) +Michael Meeks ([email protected]) @@ -0,0 +1,38 @@ +Many kudos, thanks, beers, and brownie points to: + + Mark Crichton <[email protected]> - Wrote the initial versions + of GdkPixbuf, and bravely maintained Imlib for MATE's + purposes. And rode us around in the minivan of death. + + Arik Devens <[email protected]> - Wrote the preferences code + for EOM and provided many interesting conversations. And lent + me his comic books, which are insanely cool. + + Damien Diederen <[email protected]> - Wrote the original fast + scaling code that was the inspiration for EOM. + + Tuomas Kuosmanen <[email protected]> - Created the cute icon for + EOM, as well as lots of nice artwork. That artwork was + proudly viewed in EOM as well. + + Raph Levien <[email protected]> - Wrote libart, microtile arrays, + GdkRGB, and some awesome code for doing imaging *fast*. + Provided a botomless pit of knowledge. + + Michael Meeks <[email protected]> - Wrote the initial MateComponent + stuff for EOM, and provided good feedback all along. + + Maciej Stachowiak <[email protected]> - All-around super hacker, + and provided excellent feedback for EOM. + + Owen Taylor <[email protected]> - Wrote the awesome scaling + and compositing functions for GdkPixbuf. Also provided a + really bottomless pit of knowledge. + + Carsten "The Rasterman" Haitzler <[email protected]> - + Provided many interesting discussions about classification of + images and other imaging stuff. He also throws the best + parties. + + The MATE translation team - For letting us use EOM in a + zillion languages. @@ -0,0 +1,19 @@ + +Please see also bugzilla for a more accurate list of open bugs, things todo: + +http://bugzilla.gnome.org/buglist.cgi?product=EOM&bug_status=NEW&bug_status=REOPENED&bug_status=UNCONFIRMED + +================================================================ + +This is more or less an up-to-date (2005-05-29) list of things need to +be done on the code in the HEAD branch: + + +* Check for outdated thumbnails in .thumbnails directory (according to +freedesktop.org thumbnail specification). + +* Remember the inner window layout in collection mode (window size and +position is already implemented) + +* libeom/eom-job-manager.c: More tests required. + diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..e468651 --- /dev/null +++ b/autogen.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +PKG_NAME=mate-image-viewer + +(test -f $srcdir/configure.ac \ + && test -f $srcdir/autogen.sh \ + && test -d $srcdir/src \ + && test -f $srcdir/src/eom-application.c) || { + echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" + echo " top-level $PKG_NAME directory" + exit 1 +} + +which mate-autogen.sh || { + echo "You need to install mate-common from the MATE CVS" + exit 1 +} + +REQUIRED_AUTOMAKE_VERSION=1.9 MATE_DATADIR="$mate_datadir" . mate-autogen.sh diff --git a/bindings/Makefile.am b/bindings/Makefile.am new file mode 100644 index 0000000..8f1fc83 --- /dev/null +++ b/bindings/Makefile.am @@ -0,0 +1,7 @@ +SUBDIRS = + +if ENABLE_PYTHON +SUBDIRS += python +endif + +-include $(top_srcdir)/git.mk diff --git a/bindings/Makefile.in b/bindings/Makefile.in new file mode 100644 index 0000000..657e3ca --- /dev/null +++ b/bindings/Makefile.in @@ -0,0 +1,656 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@ENABLE_PYTHON_TRUE@am__append_1 = python +subdir = bindings +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = python +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DBUS_BINDING_TOOL = @DBUS_BINDING_TOOL@ +DBUS_CFLAGS = @DBUS_CFLAGS@ +DBUS_LIBS = @DBUS_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISABLE_DEPRECATED = @DISABLE_DEPRECATED@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ +DLLTOOL = @DLLTOOL@ +DOC_USER_FORMATS = @DOC_USER_FORMATS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EOM_API_VERSION = @EOM_API_VERSION@ +EOM_CFLAGS = @EOM_CFLAGS@ +EOM_DOC_EXIF_START = @EOM_DOC_EXIF_START@ +EOM_DOC_EXIF_STOP = @EOM_DOC_EXIF_STOP@ +EOM_LIBS = @EOM_LIBS@ +EOM_MAJOR_VERSION = @EOM_MAJOR_VERSION@ +EOM_MICRO_VERSION = @EOM_MICRO_VERSION@ +EOM_MINOR_VERSION = @EOM_MINOR_VERSION@ +EXEEXT = @EXEEXT@ +EXEMPI_CFLAGS = @EXEMPI_CFLAGS@ +EXEMPI_LIBS = @EXEMPI_LIBS@ +EXIF_CFLAGS = @EXIF_CFLAGS@ +EXIF_LIBS = @EXIF_LIBS@ +FGREP = @FGREP@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HELP_DIR = @HELP_DIR@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +LCMS_CFLAGS = @LCMS_CFLAGS@ +LCMS_LIBS = @LCMS_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBJPEG = @LIBJPEG@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ +LIBXML2_LIBS = @LIBXML2_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATECONFTOOL = @MATECONFTOOL@ +MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@ +MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OMF_DIR = @OMF_DIR@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYGOBJECT_CODEGEN = @PYGOBJECT_CODEGEN@ +PYGOBJECT_DEFSDIR = @PYGOBJECT_DEFSDIR@ +PYGOBJECT_H2DEF = @PYGOBJECT_H2DEF@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_DEFSDIR = @PYGTK_DEFSDIR@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYTHON = @PYTHON@ +PYTHON_CFLAGS = @PYTHON_CFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RSVG_CFLAGS = @RSVG_CFLAGS@ +RSVG_LIBS = @RSVG_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XGETTEXT = @XGETTEXT@ +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 = $(am__append_1) +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bindings/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign bindings/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +-include $(top_srcdir)/git.mk + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/bindings/python/Makefile.am b/bindings/python/Makefile.am new file mode 100644 index 0000000..9841596 --- /dev/null +++ b/bindings/python/Makefile.am @@ -0,0 +1,77 @@ +noinst_LTLIBRARIES = \ + eom.la + +nodist_eom_la_SOURCES = \ + eom.c + +eom_la_LDFLAGS = \ + -module -avoid-version + +eom_la_LIBADD = \ + $(PYTHON_LIB_LOC) \ + $(PYTHON_LIBS) \ + $(PYTHON_EXTRA_LIBS) \ + $(PYGTK_LIBS) + +eom_la_CFLAGS = \ + -I$(top_srcdir) \ + -I$(top_builddir) \ + -I$(top_srcdir)/src \ + -I$(top_builddir)/src \ + -I$(top_srcdir)/cut-n-paste/toolbar-editor \ + $(EOM_CFLAGS) \ + $(NO_STRICT_ALIASING_CFLAGS) \ + $(PYGTK_CFLAGS) \ + $(PYTHON_CFLAGS) \ + $(AM_CFLAGS) + +$(top_builddir)/src/eom-enum-types.h: + $(AM_V_GEN)cd $(top_builddir)/src && $(MAKE) eom-enum-types.h + +eom.c: eom.defs eom.override $(top_builddir)/src/eom-enum-types.h + $(AM_V_GEN)( cd $(srcdir) && $(PYGOBJECT_CODEGEN) \ + --register $(PYGOBJECT_DEFSDIR)/gio-types.defs \ + --register $(PYGTK_DEFSDIR)/pango-types.defs \ + --register $(PYGTK_DEFSDIR)/gdk-types.defs \ + --register $(PYGTK_DEFSDIR)/gtk-types.defs \ + --override $*.override \ + --prefix py$* $(<F) ) > $@ + +BINDING_EOM_HEADERS_SRCDIR_IN = \ + src/eom-application.h \ + src/eom-window.h \ + src/eom-dialog.h \ + src/eom-properties-dialog.h \ + src/eom-message-area.h \ + src/eom-statusbar.h \ + src/eom-thumb-nav.h \ + src/eom-image.h \ + src/eom-scroll-view.h \ + src/eom-thumb-view.h \ + src/eom-list-store.h \ + src/eom-job-queue.h \ + src/eom-jobs.h \ + src/eom-plugin.h + +BINDING_HEADERS_BUILDDIR_IN = + +BINDING_EOM_HEADERS_SRCDIR := $(addprefix $(top_srcdir)/,$(BINDING_EOM_HEADERS_SRCDIR_IN)) + +BINDING_HEADERS_BUILDDIR := $(addprefix $(top_builddir)/,$(BINDING_HEADERS_BUILDDIR_IN)) + +regenerate-python-binding: + $(PYGTK_H2DEF) $(sort $(BINDING_EOM_HEADERS_SRCDIR) $(BINDING_HEADERS_BUILDDIR)) > eom.defs.new + +BUILT_SOURCES = \ + eom.c + +EXTRA_DIST = \ + eom.override \ + eom.defs + +CLEANFILES = $(BUILT_SOURCES) + +dist-hook: + cd $(distdir); rm -f $(BUILT_SOURCES) + +-include $(top_srcdir)/git.mk diff --git a/bindings/python/Makefile.in b/bindings/python/Makefile.in new file mode 100644 index 0000000..441d9b3 --- /dev/null +++ b/bindings/python/Makefile.in @@ -0,0 +1,673 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = bindings/python +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +am__DEPENDENCIES_1 = +eom_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +nodist_eom_la_OBJECTS = eom_la-eom.lo +eom_la_OBJECTS = $(nodist_eom_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +eom_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(eom_la_CFLAGS) $(CFLAGS) \ + $(eom_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(nodist_eom_la_SOURCES) +DIST_SOURCES = +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DBUS_BINDING_TOOL = @DBUS_BINDING_TOOL@ +DBUS_CFLAGS = @DBUS_CFLAGS@ +DBUS_LIBS = @DBUS_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISABLE_DEPRECATED = @DISABLE_DEPRECATED@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ +DLLTOOL = @DLLTOOL@ +DOC_USER_FORMATS = @DOC_USER_FORMATS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EOM_API_VERSION = @EOM_API_VERSION@ +EOM_CFLAGS = @EOM_CFLAGS@ +EOM_DOC_EXIF_START = @EOM_DOC_EXIF_START@ +EOM_DOC_EXIF_STOP = @EOM_DOC_EXIF_STOP@ +EOM_LIBS = @EOM_LIBS@ +EOM_MAJOR_VERSION = @EOM_MAJOR_VERSION@ +EOM_MICRO_VERSION = @EOM_MICRO_VERSION@ +EOM_MINOR_VERSION = @EOM_MINOR_VERSION@ +EXEEXT = @EXEEXT@ +EXEMPI_CFLAGS = @EXEMPI_CFLAGS@ +EXEMPI_LIBS = @EXEMPI_LIBS@ +EXIF_CFLAGS = @EXIF_CFLAGS@ +EXIF_LIBS = @EXIF_LIBS@ +FGREP = @FGREP@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HELP_DIR = @HELP_DIR@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +LCMS_CFLAGS = @LCMS_CFLAGS@ +LCMS_LIBS = @LCMS_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBJPEG = @LIBJPEG@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ +LIBXML2_LIBS = @LIBXML2_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATECONFTOOL = @MATECONFTOOL@ +MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@ +MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OMF_DIR = @OMF_DIR@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYGOBJECT_CODEGEN = @PYGOBJECT_CODEGEN@ +PYGOBJECT_DEFSDIR = @PYGOBJECT_DEFSDIR@ +PYGOBJECT_H2DEF = @PYGOBJECT_H2DEF@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_DEFSDIR = @PYGTK_DEFSDIR@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYTHON = @PYTHON@ +PYTHON_CFLAGS = @PYTHON_CFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RSVG_CFLAGS = @RSVG_CFLAGS@ +RSVG_LIBS = @RSVG_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XGETTEXT = @XGETTEXT@ +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_LTLIBRARIES = \ + eom.la + +nodist_eom_la_SOURCES = \ + eom.c + +eom_la_LDFLAGS = \ + -module -avoid-version + +eom_la_LIBADD = \ + $(PYTHON_LIB_LOC) \ + $(PYTHON_LIBS) \ + $(PYTHON_EXTRA_LIBS) \ + $(PYGTK_LIBS) + +eom_la_CFLAGS = \ + -I$(top_srcdir) \ + -I$(top_builddir) \ + -I$(top_srcdir)/src \ + -I$(top_builddir)/src \ + -I$(top_srcdir)/cut-n-paste/toolbar-editor \ + $(EOM_CFLAGS) \ + $(NO_STRICT_ALIASING_CFLAGS) \ + $(PYGTK_CFLAGS) \ + $(PYTHON_CFLAGS) \ + $(AM_CFLAGS) + +BINDING_EOM_HEADERS_SRCDIR_IN = \ + src/eom-application.h \ + src/eom-window.h \ + src/eom-dialog.h \ + src/eom-properties-dialog.h \ + src/eom-message-area.h \ + src/eom-statusbar.h \ + src/eom-thumb-nav.h \ + src/eom-image.h \ + src/eom-scroll-view.h \ + src/eom-thumb-view.h \ + src/eom-list-store.h \ + src/eom-job-queue.h \ + src/eom-jobs.h \ + src/eom-plugin.h + +BINDING_HEADERS_BUILDDIR_IN = +BINDING_EOM_HEADERS_SRCDIR := $(addprefix $(top_srcdir)/,$(BINDING_EOM_HEADERS_SRCDIR_IN)) +BINDING_HEADERS_BUILDDIR := $(addprefix $(top_builddir)/,$(BINDING_HEADERS_BUILDDIR_IN)) +BUILT_SOURCES = \ + eom.c + +EXTRA_DIST = \ + eom.override \ + eom.defs + +CLEANFILES = $(BUILT_SOURCES) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bindings/python/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign bindings/python/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +eom.la: $(eom_la_OBJECTS) $(eom_la_DEPENDENCIES) + $(AM_V_CCLD)$(eom_la_LINK) $(eom_la_OBJECTS) $(eom_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eom_la-eom.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +eom_la-eom.lo: eom.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) $(eom_la_CFLAGS) $(CFLAGS) -MT eom_la-eom.lo -MD -MP -MF $(DEPDIR)/eom_la-eom.Tpo -c -o eom_la-eom.lo `test -f 'eom.c' || echo '$(srcdir)/'`eom.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/eom_la-eom.Tpo $(DEPDIR)/eom_la-eom.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eom.c' object='eom_la-eom.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(eom_la_CFLAGS) $(CFLAGS) -c -o eom_la-eom.lo `test -f 'eom.c' || echo '$(srcdir)/'`eom.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-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 -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags dist-hook \ + 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 uninstall uninstall-am + + +$(top_builddir)/src/eom-enum-types.h: + $(AM_V_GEN)cd $(top_builddir)/src && $(MAKE) eom-enum-types.h + +eom.c: eom.defs eom.override $(top_builddir)/src/eom-enum-types.h + $(AM_V_GEN)( cd $(srcdir) && $(PYGOBJECT_CODEGEN) \ + --register $(PYGOBJECT_DEFSDIR)/gio-types.defs \ + --register $(PYGTK_DEFSDIR)/pango-types.defs \ + --register $(PYGTK_DEFSDIR)/gdk-types.defs \ + --register $(PYGTK_DEFSDIR)/gtk-types.defs \ + --override $*.override \ + --prefix py$* $(<F) ) > $@ + +regenerate-python-binding: + $(PYGTK_H2DEF) $(sort $(BINDING_EOM_HEADERS_SRCDIR) $(BINDING_HEADERS_BUILDDIR)) > eom.defs.new + +dist-hook: + cd $(distdir); rm -f $(BUILT_SOURCES) + +-include $(top_srcdir)/git.mk + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/bindings/python/eom.defs b/bindings/python/eom.defs new file mode 100644 index 0000000..d2b37c0 --- /dev/null +++ b/bindings/python/eom.defs @@ -0,0 +1,1222 @@ +;; -*- scheme -*- +; object definitions ... +(define-object Application + (in-module "Eom") + (parent "GObject") + (c-name "EomApplication") + (gtype-id "EOM_TYPE_APPLICATION") +) + +(define-object Dialog + (in-module "Eom") + (parent "GObject") + (c-name "EomDialog") + (gtype-id "EOM_TYPE_DIALOG") +) + +(define-object Image + (in-module "Eom") + (parent "GObject") + (c-name "EomImage") + (gtype-id "EOM_TYPE_IMAGE") +) + +(define-object Job + (in-module "Eom") + (parent "GObject") + (c-name "EomJob") + (gtype-id "EOM_TYPE_JOB") +) + +(define-object JobLoad + (in-module "Eom") + (parent "EomJob") + (c-name "EomJobLoad") + (gtype-id "EOM_TYPE_JOB_LOAD") +) + +(define-object JobModel + (in-module "Eom") + (parent "EomJob") + (c-name "EomJobModel") + (gtype-id "EOM_TYPE_JOB_MODEL") +) + +(define-object JobSave + (in-module "Eom") + (parent "EomJob") + (c-name "EomJobSave") + (gtype-id "EOM_TYPE_JOB_SAVE") +) + +(define-object JobSaveAs + (in-module "Eom") + (parent "EomJobSave") + (c-name "EomJobSaveAs") + (gtype-id "EOM_TYPE_JOB_SAVE_AS") +) + +(define-object JobThumbnail + (in-module "Eom") + (parent "EomJob") + (c-name "EomJobThumbnail") + (gtype-id "EOM_TYPE_JOB_THUMBNAIL") +) + +(define-object JobTransform + (in-module "Eom") + (parent "EomJob") + (c-name "EomJobTransform") + (gtype-id "EOM_TYPE_JOB_TRANSFORM") +) + +(define-object ListStore + (in-module "Eom") + (parent "GtkListStore") + (c-name "EomListStore") + (gtype-id "EOM_TYPE_LIST_STORE") +) + +(define-object Plugin + (in-module "Eom") + (parent "GObject") + (c-name "EomPlugin") + (gtype-id "EOM_TYPE_PLUGIN") +) + +(define-object PropertiesDialog + (in-module "Eom") + (parent "EomDialog") + (c-name "EomPropertiesDialog") + (gtype-id "EOM_TYPE_PROPERTIES_DIALOG") +) + +(define-object ScrollView + (in-module "Eom") + (parent "GtkTable") + (c-name "EomScrollView") + (gtype-id "EOM_TYPE_SCROLL_VIEW") +) + +(define-object Sidebar + (in-module "Eom") + (parent "GtkVBox") + (c-name "EomSidebar") + (gtype-id "EOM_TYPE_SIDEBAR") +) + +(define-object Statusbar + (in-module "Eom") + (parent "GtkStatusbar") + (c-name "EomStatusbar") + (gtype-id "EOM_TYPE_STATUSBAR") +) + +(define-object ThumbNav + (in-module "Eom") + (parent "GtkHBox") + (c-name "EomThumbNav") + (gtype-id "EOM_TYPE_THUMB_NAV") +) + +(define-object ThumbView + (in-module "Eom") + (parent "GtkIconView") + (c-name "EomThumbView") + (gtype-id "EOM_TYPE_THUMB_VIEW") +) + +(define-object Window + (in-module "Eom") + (parent "GtkWindow") + (c-name "EomWindow") + (gtype-id "EOM_TYPE_WINDOW") +) + +;; Enumerations and flags ... + +(define-flags ImageData + (in-module "Eom") + (c-name "EomImageData") + (gtype-id "EOM_TYPE_IMAGE_DATA") + (values + '("image" "EOM_IMAGE_DATA_IMAGE") + '("dimension" "EOM_IMAGE_DATA_DIMENSION") + '("exif" "EOM_IMAGE_DATA_EXIF") + ) +) + +(define-enum ImageError + (in-module "Eom") + (c-name "EomImageError") + (gtype-id "EOM_TYPE_IMAGE_ERROR") + (values + '("save-not-local" "EOM_IMAGE_ERROR_SAVE_NOT_LOCAL") + '("not-loaded" "EOM_IMAGE_ERROR_NOT_LOADED") + '("vfs" "EOM_IMAGE_ERROR_VFS") + '("file-exists" "EOM_IMAGE_ERROR_FILE_EXISTS") + '("tmp-file-failed" "EOM_IMAGE_ERROR_TMP_FILE_FAILED") + '("generic" "EOM_IMAGE_ERROR_GENERIC") + '("unknown" "EOM_IMAGE_ERROR_UNKNOWN") + ) +) + +(define-enum ImageStatus + (in-module "Eom") + (c-name "EomImageStatus") + (gtype-id "EOM_TYPE_IMAGE_STATUS") + (values + '("unknown" "EOM_IMAGE_STATUS_UNKNOWN") + '("loading" "EOM_IMAGE_STATUS_LOADING") + '("loaded" "EOM_IMAGE_STATUS_LOADED") + '("failed" "EOM_IMAGE_STATUS_FAILED") + ) +) + +(define-enum JobSaveResponse + (in-module "Eom") + (c-name "EomJobSaveResponse") + (gtype-id "EOM_TYPE_JOB_SAVE_RESPONSE") + (values + '("none" "EOM_SAVE_RESPONSE_NONE") + '("retry" "EOM_SAVE_RESPONSE_RETRY") + '("skip" "EOM_SAVE_RESPONSE_SKIP") + '("overwrite" "EOM_SAVE_RESPONSE_OVERWRITE") + '("cancel" "EOM_SAVE_RESPONSE_CANCEL") + '("last" "EOM_SAVE_RESPONSE_LAST") + ) +) + +(define-enum ListStoreColumn + (in-module "Eom") + (c-name "EomListStoreColumn") + (gtype-id "EOM_TYPE_LIST_STORE_COLUMN") + (values + '("thumbnail" "EOM_LIST_STORE_THUMBNAIL") + '("thumb-set" "EOM_LIST_STORE_THUMB_SET") + '("eom-image" "EOM_LIST_STORE_EOM_IMAGE") + '("eom-job" "EOM_LIST_STORE_EOM_JOB") + '("num-columns" "EOM_LIST_STORE_NUM_COLUMNS") + ) +) + +(define-enum PropertiesDialogPage + (in-module "Eom") + (c-name "EomPropertiesDialogPage") + (gtype-id "EOM_TYPE_PROPERTIES_DIALOG_PAGE") + (values + '("general" "EOM_PROPERTIES_DIALOG_PAGE_GENERAL") + '("exif" "EOM_PROPERTIES_DIALOG_PAGE_EXIF") + ) +) + +(define-enum TransparencyStyle + (in-module "Eom") + (c-name "EomTransparencyStyle") + (gtype-id "EOM_TYPE_TRANSPARENCY_STYLE") + (values + '("background" "EOM_TRANSP_BACKGROUND") + '("checked" "EOM_TRANSP_CHECKED") + '("color" "EOM_TRANSP_COLOR") + ) +) + +(define-enum ThumbNavMode + (in-module "Eom") + (c-name "EomThumbNavMode") + (gtype-id "EOM_TYPE_THUMB_NAV_MODE") + (values + '("one-row" "EOM_THUMB_NAV_MODE_ONE_ROW") + '("one-column" "EOM_THUMB_NAV_MODE_ONE_COLUMN") + '("multiple-rows" "EOM_THUMB_NAV_MODE_MULTIPLE_ROWS") + '("multiple-columns" "EOM_THUMB_NAV_MODE_MULTIPLE_COLUMNS") + ) +) + +(define-enum ThumbViewSelectionChange + (in-module "Eom") + (c-name "EomThumbViewSelectionChange") + (gtype-id "EOM_TYPE_THUMB_VIEW_SELECTION_CHANGE") + (values + '("left" "EOM_THUMB_VIEW_SELECT_LEFT") + '("right" "EOM_THUMB_VIEW_SELECT_RIGHT") + '("first" "EOM_THUMB_VIEW_SELECT_FIRST") + '("last" "EOM_THUMB_VIEW_SELECT_LAST") + ) +) + +(define-enum WindowMode + (in-module "Eom") + (c-name "EomWindowMode") + (gtype-id "EOM_TYPE_WINDOW_MODE") + (values + '("unknown" "EOM_WINDOW_MODE_UNKNOWN") + '("normal" "EOM_WINDOW_MODE_NORMAL") + '("fullscreen" "EOM_WINDOW_MODE_FULLSCREEN") + '("slideshow" "EOM_WINDOW_MODE_SLIDESHOW") + ) +) + +(define-enum WindowError + (in-module "Eom") + (c-name "EomWindowError") + (gtype-id "EOM_TYPE_WINDOW_ERROR") + (values + '("control-not-found" "EOM_WINDOW_ERROR_CONTROL_NOT_FOUND") + '("ui-not-found" "EOM_WINDOW_ERROR_UI_NOT_FOUND") + '("no-persist-file-interface" "EOM_WINDOW_ERROR_NO_PERSIST_FILE_INTERFACE") + '("io" "EOM_WINDOW_ERROR_IO") + '("trash-not-found" "EOM_WINDOW_ERROR_TRASH_NOT_FOUND") + '("generic" "EOM_WINDOW_ERROR_GENERIC") + '("unknown" "EOM_WINDOW_ERROR_UNKNOWN") + ) +) + +(define-flags StartupFlags + (in-module "Eom") + (c-name "EomStartupFlags") + (gtype-id "EOM_TYPE_STARTUP_FLAGS") + (values + '("fullscreen" "EOM_STARTUP_FULLSCREEN") + '("slide-show" "EOM_STARTUP_SLIDE_SHOW") + '("disable-collection" "EOM_STARTUP_DISABLE_COLLECTION") + ) +) + + +;; From eom-application.h + +(define-function eom_application_get_type + (c-name "eom_application_get_type") + (return-type "GType") +) + +(define-function eom_application_get_instance + (c-name "eom_application_get_instance") + (return-type "EomApplication*") +) + +(define-method shutdown + (of-object "EomApplication") + (c-name "eom_application_shutdown") + (return-type "none") +) + +(define-method open_window + (of-object "EomApplication") + (c-name "eom_application_open_window") + (return-type "gboolean") + (parameters + '("guint" "timestamp") + '("EomStartupFlags" "flags") + '("GError**" "error") + ) +) + +(define-method open_uri_list + (of-object "EomApplication") + (c-name "eom_application_open_uri_list") + (return-type "gboolean") + (parameters + '("GSList*" "uri_list") + '("guint" "timestamp") + '("EomStartupFlags" "flags") + '("GError**" "error") + ) +) + +(define-method get_windows + (of-object "EomApplication") + (c-name "eom_application_get_windows") + (return-type "GList*") +) + + + + +;; From eom-dialog.h + +(define-function eom_dialog_get_type + (c-name "eom_dialog_get_type") + (return-type "GType") +) + +(define-method construct + (of-object "EomDialog") + (c-name "eom_dialog_construct") + (return-type "none") + (parameters + '("const-gchar*" "glade_file") + '("const-gchar*" "dlg_node") + ) +) + +(define-method show + (of-object "EomDialog") + (c-name "eom_dialog_show") + (return-type "none") +) + +(define-method hide + (of-object "EomDialog") + (c-name "eom_dialog_hide") + (return-type "none") +) + +(define-method get_controls + (of-object "EomDialog") + (c-name "eom_dialog_get_controls") + (return-type "none") + (parameters + '("const-gchar*" "property_id") + ) + (varargs #t) +) + + + +;; From eom-image.h + +(define-function eom_image_get_type + (c-name "eom_image_get_type") + (return-type "GType") +) + +(define-function eom_image_new + (c-name "eom_image_new") + (is-constructor-of "EomImage") + (return-type "EomImage*") + (parameters + '("const-char*" "txt_uri") + ) +) + +(define-function eom_image_new_file + (c-name "eom_image_new_file") + (return-type "EomImage*") + (parameters + '("GFile*" "file") + ) +) + +(define-method has_data + (of-object "EomImage") + (c-name "eom_image_has_data") + (return-type "gboolean") + (parameters + '("EomImageData" "data") + ) +) + +(define-method load + (of-object "EomImage") + (c-name "eom_image_load") + (return-type "gboolean") + (parameters + '("EomImageData" "data2read") + '("EomJob*" "job" (null-ok)) + '("GError**" "error") + ) +) + +(define-method set_thumbnail + (of-object "EomImage") + (c-name "eom_image_set_thumbnail") + (return-type "none") + (parameters + '("GdkPixbuf*" "pixbuf") + ) +) + +(define-method get_pixbuf + (of-object "EomImage") + (c-name "eom_image_get_pixbuf") + (return-type "GdkPixbuf*") +) + +(define-method get_thumbnail + (of-object "EomImage") + (c-name "eom_image_get_thumbnail") + (return-type "GdkPixbuf*") +) + +(define-method get_size + (of-object "EomImage") + (c-name "eom_image_get_size") + (return-type "none") + (parameters + '("gint*" "width") + '("gint*" "height") + ) +) + +(define-method get_bytes + (of-object "EomImage") + (c-name "eom_image_get_bytes") + (return-type "goffset") +) + +(define-method is_modified + (of-object "EomImage") + (c-name "eom_image_is_modified") + (return-type "gboolean") +) + +(define-method modified + (of-object "EomImage") + (c-name "eom_image_modified") + (return-type "none") +) + +(define-method get_caption + (of-object "EomImage") + (c-name "eom_image_get_caption") + (return-type "const-gchar*") +) + +(define-method get_exif_info + (of-object "EomImage") + (c-name "eom_image_get_exif_info") + (return-type "gpointer") +) + +(define-method get_file + (of-object "EomImage") + (c-name "eom_image_get_file") + (return-type "GFile*") +) + +(define-method get_uri_for_display + (of-object "EomImage") + (c-name "eom_image_get_uri_for_display") + (return-type "gchar*") +) + +(define-method undo + (of-object "EomImage") + (c-name "eom_image_undo") + (return-type "none") +) + + + +;; From eom-job-queue.h + +(define-method queue_add_job + (of-object "EomJob") + (c-name "eom_job_queue_add_job") + (return-type "none") +) + +(define-method queue_remove_job + (of-object "EomJob") + (c-name "eom_job_queue_remove_job") + (return-type "gboolean") +) + + + +;; From eom-jobs.h + +(define-function eom_job_get_type + (c-name "eom_job_get_type") + (return-type "GType") +) + +(define-method finished + (of-object "EomJob") + (c-name "eom_job_finished") + (return-type "none") +) + +(define-method run + (of-object "EomJob") + (c-name "eom_job_run") + (return-type "none") +) + +(define-method set_progress + (of-object "EomJob") + (c-name "eom_job_set_progress") + (return-type "none") + (parameters + '("float" "progress") + ) +) + +(define-function eom_job_thumbnail_get_type + (c-name "eom_job_thumbnail_get_type") + (return-type "GType") +) + +(define-function eom_job_thumbnail_new + (c-name "eom_job_thumbnail_new") + (is-constructor-of "EomJobThumbnail") + (return-type "EomJob*") + (parameters + '("EomImage*" "image") + ) +) + +(define-function eom_job_load_get_type + (c-name "eom_job_load_get_type") + (return-type "GType") +) + +(define-function eom_job_load_new + (c-name "eom_job_load_new") + (is-constructor-of "EomJobLoad") + (return-type "EomJob*") + (parameters + '("EomImage*" "image") + '("EomImageData" "data") + ) +) + +(define-function eom_job_model_get_type + (c-name "eom_job_model_get_type") + (return-type "GType") +) + +(define-function eom_job_model_new + (c-name "eom_job_model_new") + (is-constructor-of "EomJobModel") + (return-type "EomJob*") + (parameters + '("GSList*" "uri_list") + ) +) + +(define-function eom_job_transform_get_type + (c-name "eom_job_transform_get_type") + (return-type "GType") +) + +(define-function eom_job_transform_new + (c-name "eom_job_transform_new") + (is-constructor-of "EomJobTransform") + (return-type "EomJob*") + (parameters + '("GList*" "images") + '("EomTransform*" "trans") + ) +) + +;; From eom-list-store.h + +(define-function eom_list_store_get_type + (c-name "eom_list_store_get_type") + (return-type "GType") +) + +(define-function eom_list_store_new + (c-name "eom_list_store_new") + (is-constructor-of "EomListStore") + (return-type "GtkListStore*") +) + +(define-method append_image + (of-object "EomListStore") + (c-name "eom_list_store_append_image") + (return-type "none") + (parameters + '("EomImage*" "image") + ) +) + +(define-method add_uris + (of-object "EomListStore") + (c-name "eom_list_store_add_uris") + (return-type "none") + (parameters + '("GList*" "uri_list") + ) +) + +(define-method remove_image + (of-object "EomListStore") + (c-name "eom_list_store_remove_image") + (return-type "none") + (parameters + '("EomImage*" "image") + ) +) + +(define-method get_pos_by_image + (of-object "EomListStore") + (c-name "eom_list_store_get_pos_by_image") + (return-type "gint") + (parameters + '("EomImage*" "image") + ) +) + +(define-method get_image_by_pos + (of-object "EomListStore") + (c-name "eom_list_store_get_image_by_pos") + (return-type "EomImage*") + (parameters + '("gint" "pos") + ) +) + +(define-method get_pos_by_iter + (of-object "EomListStore") + (c-name "eom_list_store_get_pos_by_iter") + (return-type "gint") + (parameters + '("GtkTreeIter*" "iter") + ) +) + +(define-method length + (of-object "EomListStore") + (c-name "eom_list_store_length") + (return-type "gint") +) + +(define-method get_initial_pos + (of-object "EomListStore") + (c-name "eom_list_store_get_initial_pos") + (return-type "gint") +) + +;; From eom-plugin.h + +(define-function eom_plugin_get_type + (c-name "eom_plugin_get_type") + (return-type "GType") +) + +(define-method activate + (of-object "EomPlugin") + (c-name "eom_plugin_activate") + (return-type "none") + (parameters + '("EomWindow*" "window") + ) +) + +(define-method deactivate + (of-object "EomPlugin") + (c-name "eom_plugin_deactivate") + (return-type "none") + (parameters + '("EomWindow*" "window") + ) +) + +(define-method update_ui + (of-object "EomPlugin") + (c-name "eom_plugin_update_ui") + (return-type "none") + (parameters + '("EomWindow*" "window") + ) +) + +(define-method is_configurable + (of-object "EomPlugin") + (c-name "eom_plugin_is_configurable") + (return-type "gboolean") +) + +(define-method create_configure_dialog + (of-object "EomPlugin") + (c-name "eom_plugin_create_configure_dialog") + (return-type "GtkWidget*") +) + + + +;; From eom-properties-dialog.h + +(define-function eom_properties_dialog_get_type + (c-name "eom_properties_dialog_get_type") + (return-type "GType") +) + +(define-function eom_properties_dialog_new + (c-name "eom_properties_dialog_new") + (is-constructor-of "EomPropertiesDialog") + (return-type "GObject*") + (parameters + '("GtkWindow*" "parent") + '("EomThumbView*" "thumbview") + '("GtkAction*" "next_image_action") + '("GtkAction*" "previous_image_action") + ) +) + +(define-method update + (of-object "EomPropertiesDialog") + (c-name "eom_properties_dialog_update") + (return-type "none") + (parameters + '("EomImage*" "image") + ) +) + +(define-method set_page + (of-object "EomPropertiesDialog") + (c-name "eom_properties_dialog_set_page") + (return-type "none") + (parameters + '("EomPropertiesDialogPage" "page") + ) +) + + + +;; From eom-scroll-view.h + +(define-function eom_scroll_view_get_type + (c-name "eom_scroll_view_get_type") + (return-type "GType") +) + +(define-function eom_scroll_view_new + (c-name "eom_scroll_view_new") + (is-constructor-of "EomScrollView") + (return-type "GtkWidget*") +) + +(define-method set_image + (of-object "EomScrollView") + (c-name "eom_scroll_view_set_image") + (return-type "none") + (parameters + '("EomImage*" "image") + ) +) + +(define-method set_zoom_upscale + (of-object "EomScrollView") + (c-name "eom_scroll_view_set_zoom_upscale") + (return-type "none") + (parameters + '("gboolean" "upscale") + ) +) + +(define-method set_zoom_multiplier + (of-object "EomScrollView") + (c-name "eom_scroll_view_set_zoom_multiplier") + (return-type "none") + (parameters + '("gdouble" "multiplier") + ) +) + +(define-method set_antialiasing_in + (of-object "EomScrollView") + (c-name "eom_scroll_view_set_antialiasing_in") + (return-type "none") + (parameters + '("gboolean" "state") + ) +) + +(define-method set_antialiasing_out + (of-object "EomScrollView") + (c-name "eom_scroll_view_set_antialiasing_out") + (return-type "none") + (parameters + '("gboolean" "state") + ) +) + +(define-method set_transparency + (of-object "EomScrollView") + (c-name "eom_scroll_view_set_transparency") + (return-type "none") + (parameters + '("EomTransparencyStyle" "style") + '("GdkColor*" "color") + ) +) + +(define-method scrollbars_visible + (of-object "EomScrollView") + (c-name "eom_scroll_view_scrollbars_visible") + (return-type "gboolean") +) + +(define-method zoom_in + (of-object "EomScrollView") + (c-name "eom_scroll_view_zoom_in") + (return-type "none") + (parameters + '("gboolean" "smooth") + ) +) + +(define-method zoom_out + (of-object "EomScrollView") + (c-name "eom_scroll_view_zoom_out") + (return-type "none") + (parameters + '("gboolean" "smooth") + ) +) + +(define-method zoom_fit + (of-object "EomScrollView") + (c-name "eom_scroll_view_zoom_fit") + (return-type "none") +) + +(define-method set_zoom + (of-object "EomScrollView") + (c-name "eom_scroll_view_set_zoom") + (return-type "none") + (parameters + '("double" "zoom") + ) +) + +(define-method get_zoom + (of-object "EomScrollView") + (c-name "eom_scroll_view_get_zoom") + (return-type "double") +) + +(define-method get_zoom_is_min + (of-object "EomScrollView") + (c-name "eom_scroll_view_get_zoom_is_min") + (return-type "gboolean") +) + +(define-method get_zoom_is_max + (of-object "EomScrollView") + (c-name "eom_scroll_view_get_zoom_is_max") + (return-type "gboolean") +) + +(define-method show_cursor + (of-object "EomScrollView") + (c-name "eom_scroll_view_show_cursor") + (return-type "none") +) + +(define-method hide_cursor + (of-object "EomScrollView") + (c-name "eom_scroll_view_hide_cursor") + (return-type "none") +) + + + +;; From eom-sidebar.h + +(define-function eom_sidebar_get_type + (c-name "eom_sidebar_get_type") + (return-type "GType") +) + +(define-function eom_sidebar_new + (c-name "eom_sidebar_new") + (is-constructor-of "EomSidebar") + (return-type "GtkWidget*") +) + +(define-method add_page + (of-object "EomSidebar") + (c-name "eom_sidebar_add_page") + (return-type "none") + (parameters + '("const-gchar*" "title") + '("GtkWidget*" "main_widget") + ) +) + +(define-method remove_page + (of-object "EomSidebar") + (c-name "eom_sidebar_remove_page") + (return-type "none") + (parameters + '("GtkWidget*" "main_widget") + ) +) + +(define-method set_page + (of-object "EomSidebar") + (c-name "eom_sidebar_set_page") + (return-type "none") + (parameters + '("GtkWidget*" "main_widget") + ) +) + +(define-method get_n_pages + (of-object "EomSidebar") + (c-name "eom_sidebar_get_n_pages") + (return-type "gint") +) + +(define-method is_empty + (of-object "EomSidebar") + (c-name "eom_sidebar_is_empty") + (return-type "gboolean") +) + + + +;; From eom-statusbar.h + +(define-function eom_statusbar_get_type + (c-name "eom_statusbar_get_type") + (return-type "GType") +) + +(define-function eom_statusbar_new + (c-name "eom_statusbar_new") + (is-constructor-of "EomStatusbar") + (return-type "GtkWidget*") +) + +(define-method set_image_number + (of-object "EomStatusbar") + (c-name "eom_statusbar_set_image_number") + (return-type "none") + (parameters + '("gint" "num") + '("gint" "tot") + ) +) + +(define-method set_progress + (of-object "EomStatusbar") + (c-name "eom_statusbar_set_progress") + (return-type "none") + (parameters + '("gdouble" "progress") + ) +) + + + +;; From eom-thumb-nav.h + +(define-function eom_thumb_nav_get_type + (c-name "eom_thumb_nav_get_type") + (return-type "GType") +) + +(define-function eom_thumb_nav_new + (c-name "eom_thumb_nav_new") + (is-constructor-of "EomThumbNav") + (return-type "GtkWidget*") + (parameters + '("GtkWidget*" "thumbview") + '("EomThumbNavMode" "mode") + '("gboolean" "show_buttons") + ) +) + +(define-method get_show_buttons + (of-object "EomThumbNav") + (c-name "eom_thumb_nav_get_show_buttons") + (return-type "gboolean") +) + +(define-method set_show_buttons + (of-object "EomThumbNav") + (c-name "eom_thumb_nav_set_show_buttons") + (return-type "none") + (parameters + '("gboolean" "show_buttons") + ) +) + +(define-method get_mode + (of-object "EomThumbNav") + (c-name "eom_thumb_nav_get_mode") + (return-type "EomThumbNavMode") +) + +(define-method set_mode + (of-object "EomThumbNav") + (c-name "eom_thumb_nav_set_mode") + (return-type "none") + (parameters + '("EomThumbNavMode" "mode") + ) +) + + + +;; From eom-thumb-view.h + +(define-function eom_thumb_view_get_type + (c-name "eom_thumb_view_get_type") + (return-type "GType") +) + +(define-function eom_thumb_view_new + (c-name "eom_thumb_view_new") + (is-constructor-of "EomThumbView") + (return-type "GtkWidget*") +) + +(define-method set_model + (of-object "EomThumbView") + (c-name "eom_thumb_view_set_model") + (return-type "none") + (parameters + '("EomListStore*" "store") + ) +) + +(define-method set_item_height + (of-object "EomThumbView") + (c-name "eom_thumb_view_set_item_height") + (return-type "none") + (parameters + '("gint" "height") + ) +) + +(define-method get_n_selected + (of-object "EomThumbView") + (c-name "eom_thumb_view_get_n_selected") + (return-type "guint") +) + +(define-method get_first_selected_image + (of-object "EomThumbView") + (c-name "eom_thumb_view_get_first_selected_image") + (return-type "EomImage*") +) + +(define-method get_selected_images + (of-object "EomThumbView") + (c-name "eom_thumb_view_get_selected_images") + (return-type "GList*") +) + +(define-method select_single + (of-object "EomThumbView") + (c-name "eom_thumb_view_select_single") + (return-type "none") + (parameters + '("EomThumbViewSelectionChange" "change") + ) +) + +(define-method set_current_image + (of-object "EomThumbView") + (c-name "eom_thumb_view_set_current_image") + (return-type "none") + (parameters + '("EomImage*" "image") + '("gboolean" "deselect_other") + ) +) + +(define-method set_thumbnail_popup + (of-object "EomThumbView") + (c-name "eom_thumb_view_set_thumbnail_popup") + (return-type "none") + (parameters + '("GtkMenu*" "menu") + ) +) + + + +;; From eom-window.h + +(define-function eom_window_get_type + (c-name "eom_window_get_type") + (return-type "GType") +) + +(define-function eom_window_new + (c-name "eom_window_new") + (is-constructor-of "EomWindow") + (return-type "GtkWidget*") + (parameters + '("EomStartupFlags" "flags") + ) +) + +(define-method get_mode + (of-object "EomWindow") + (c-name "eom_window_get_mode") + (return-type "EomWindowMode") +) + +(define-method set_mode + (of-object "EomWindow") + (c-name "eom_window_set_mode") + (return-type "none") + (parameters + '("EomWindowMode" "mode") + ) +) + +(define-method get_ui_manager + (of-object "EomWindow") + (c-name "eom_window_get_ui_manager") + (return-type "GtkUIManager*") +) + +(define-method get_store + (of-object "EomWindow") + (c-name "eom_window_get_store") + (return-type "EomListStore*") +) + +(define-method get_view + (of-object "EomWindow") + (c-name "eom_window_get_view") + (return-type "GtkWidget*") +) + +(define-method get_sidebar + (of-object "EomWindow") + (c-name "eom_window_get_sidebar") + (return-type "GtkWidget*") +) + +(define-method get_thumb_view + (of-object "EomWindow") + (c-name "eom_window_get_thumb_view") + (return-type "GtkWidget*") +) + +(define-method get_thumb_nav + (of-object "EomWindow") + (c-name "eom_window_get_thumb_nav") + (return-type "GtkWidget*") +) + +(define-method get_statusbar + (of-object "EomWindow") + (c-name "eom_window_get_statusbar") + (return-type "GtkWidget*") +) + +(define-method get_image + (of-object "EomWindow") + (c-name "eom_window_get_image") + (return-type "EomImage*") +) + +(define-method open_uri_list + (of-object "EomWindow") + (c-name "eom_window_open_uri_list") + (return-type "none") + (parameters + '("GSList*" "uri_list") + ) +) + +(define-method is_empty + (of-object "EomWindow") + (c-name "eom_window_is_empty") + (return-type "gboolean") +) + + diff --git a/bindings/python/eom.override b/bindings/python/eom.override new file mode 100644 index 0000000..d95cf36 --- /dev/null +++ b/bindings/python/eom.override @@ -0,0 +1,126 @@ +%% +headers +#define NO_IMPORT +#include "pygobject.h" +#include <pygtk/pygtk.h> + +#include "eom-enum-types.h" +#include "eom-application.h" +#include "eom-window.h" +#include "eom-dialog.h" +#include "eom-properties-dialog.h" +#include "eom-statusbar.h" +#include "eom-sidebar.h" +#include "eom-thumb-nav.h" +#include "eom-image.h" +#include "eom-scroll-view.h" +#include "eom-thumb-view.h" +#include "eom-list-store.h" +#include "eom-job-queue.h" +#include "eom-jobs.h" +#include "eom-plugin.h" + +void pyeom_register_classes (PyObject *d); +void pyeom_add_constants (PyObject *module, const gchar *strip_prefix); + +static PyObject * +_helper_wrap_gobject_glist (const GList *list) +{ + PyObject *py_list; + const GList *tmp; + + if ((py_list = PyList_New(0)) == NULL) { + return NULL; + } + for (tmp = list; tmp != NULL; tmp = tmp->next) { + PyObject *py_obj = pygobject_new(G_OBJECT(tmp->data)); + + if (py_obj == NULL) { + Py_DECREF(py_list); + return NULL; + } + PyList_Append(py_list, py_obj); + Py_DECREF(py_obj); + } + return py_list; +} +%% +modulename eom +%% +import gtk.Widget as PyGtkWidget_Type +import gobject.GObject as PyGObject_Type +import gtk.Window as PyGtkWindow_Type +import gtk.Action as PyGtkAction_Type +import gtk.Statusbar as PyGtkStatusbar_Type +import gtk.Menu as PyGtkMenu_Type +import gtk.gdk.Pixbuf as PyGdkPixbuf_Type +import gtk.FileChooserDialog as PyGtkFileChooserDialog_Type +import gtk.ListStore as PyGtkListStore_Type +import gtk.HBox as PyGtkHBox_Type +import gtk.VBox as PyGtkVBox_Type +import gtk.Table as PyGtkTable_Type +import gtk.IconView as PyGtkIconView_Type +import gio.File as PyGFile_Type +%% +ignore-glob + *_get_type +%% +override eom_application_get_windows +static PyObject * +_wrap_eom_application_get_windows(PyGObject *self) +{ + const GList *list; + PyObject *py_list; + + list = eom_application_get_windows (EOM_APPLICATION (self->obj)); + + py_list = _helper_wrap_gobject_glist (list); + + return py_list; +} +%% +override eom_application_open_uri_list kwargs +static PyObject * +_wrap_eom_application_open_uri_list (PyGObject *self, + PyObject *args, + PyObject *kwargs) +{ + static char *kwlist[] = { "uri_list", NULL }; + PyObject *list, *item; + GSList *glist = NULL; + int len, i; + + if (!PyArg_ParseTupleAndKeywords (args, kwargs, + "O:EomApplication.open_uri_list", kwlist, + &list)) + return NULL; + + if (!PySequence_Check (list)) { + PyErr_SetString (PyExc_TypeError, + "first argument must be a sequence"); + return NULL; + } + + len = PySequence_Length (list); + + for (i = 0; i < len; i++) + { + item = PySequence_GetItem (list, i); + Py_DECREF(item); + + if (!PyString_Check (item)) { + PyErr_SetString (PyExc_TypeError, + "sequence item not a string"); + g_slist_free (glist); + return NULL; + } + + glist = g_slist_append (glist, g_strdup (PyString_AsString (item))); + } + + eom_application_open_uri_list (EOM_APPLICATION (self->obj), glist, GDK_CURRENT_TIME, 0, NULL); + + g_slist_free (glist); + Py_INCREF (Py_None); + return Py_None; +} diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..c06d286 --- /dev/null +++ b/configure.ac @@ -0,0 +1,500 @@ +AC_PREREQ(2.59) + +m4_define(eom_major_version, 2011) +m4_define(eom_minor_version, 11) +m4_define(eom_micro_version, 09) +m4_define(eom_version, eom_major_version.eom_minor_version.eom_micro_version) + +AC_INIT([eom], eom_version, [http://bugzilla.gnome.org/enter_bug.cgi?product=eom], [eom]) +AM_INIT_AUTOMAKE([1.9 foreign no-dist-gzip dist-bzip2]) + +# Support silencing the build output if supported (automake-1.11+) +m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) + +AC_DEFINE(EOM_MAJOR_VERSION, eom_major_version, [EOM major version]) +AC_SUBST(EOM_MAJOR_VERSION, eom_major_version) +AC_DEFINE(EOM_MINOR_VERSION, eom_minor_version, [EOM minor version]) +AC_SUBST(EOM_MINOR_VERSION, eom_minor_version) +AC_DEFINE(EOM_MICRO_VERSION, eom_micro_version, [EOM micro version]) +AC_SUBST(EOM_MICRO_VERSION, eom_micro_version) + +EOM_API_VERSION=2.20 +AC_SUBST(EOM_API_VERSION) + +AC_CONFIG_HEADERS([config.h]) + +AM_MAINTAINER_MODE + +MATE_COMMON_INIT +MATE_MAINTAINER_MODE_DEFINES +MATE_COMPILE_WARNINGS +MATE_DEBUG_CHECK + +# Disable building static archives by default +AC_DISABLE_STATIC +AC_PROG_LIBTOOL + +AC_ISC_POSIX +AC_PROG_CC +AM_PROG_CC_C_O +AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal]) +AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums]) + +GTK_DOC_CHECK(1.9) + +AC_CHECK_FUNCS(strptime) + +# **************************************************************** +# Support for nl_langinfo (_NL_MEASUREMENT_MEASUREMENT) (optional) +# **************************************************************** +AC_MSG_CHECKING([for _NL_MEASUREMENT_MEASUREMENT]) +AC_TRY_LINK([#include <langinfo.h>], [ +char c; +c = *((unsigned char *) nl_langinfo(_NL_MEASUREMENT_MEASUREMENT)); +], have_langinfo_measurement=yes, have_langinfo_measurement=no) +AC_MSG_RESULT($have_langinfo_measurement) +if test "$have_langinfo_measurement" = "yes"; then + AC_DEFINE([HAVE__NL_MEASUREMENT_MEASUREMENT], [1], + [Define if _NL_MEASUREMENT_MEASUREMENT is available]) +fi + +# *********** +# Translation +# *********** + +AM_GLIB_GNU_GETTEXT +IT_PROG_INTLTOOL([0.40.0]) + +GETTEXT_PACKAGE=AC_PACKAGE_NAME +AC_SUBST(GETTEXT_PACKAGE) +AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext package.]) + +AC_SUBST(CFLAGS) +AC_SUBST(LDFLAGS) + +# *************** +# mate-doc-utils +# *************** + +PKG_PROG_PKG_CONFIG +MATE_DOC_INIT + +# ********** +# MATE Libs +# ********** + +GTK_REQUIRED=2.18.0 +GLIB_REQUIRED=2.25.9 +MATE_DESKTOP_REQUIRED=2.25.1 +GDKPIXBUF_REQUIRED=2.4.0 +MATECONF_REQUIRED=2.5.90 +GTK_PRINT_REQUIRED=2.10.0 +MATE_ICON_THEME_REQUIRED=2.19.1 +SHARED_MIME_INFO_REQUIRED=0.20 +EXEMPI_REQUIRED=1.99.5 + +EOM_MODULES="gtk+-2.0 >= $GTK_REQUIRED \ + glib-2.0 >= $GLIB_REQUIRED \ + gio-2.0 >= $GLIB_REQUIRED \ + gthread-2.0 >= $GLIB_REQUIRED \ + mate-desktop-2.0 >= $MATE_DESKTOP_REQUIRED \ + gdk-pixbuf-2.0 >= $GDKPIXBUF_REQUIRED \ + mateconf-2.0 >= $MATECONF_REQUIRED \ + gtk+-unix-print-2.0 >= $GTK_PRINT_REQUIRED \ + mate-icon-theme >= $MATE_ICON_THEME_REQUIRED \ + shared-mime-info >= $SHARED_MIME_INFO_REQUIRED" + +# *************** +# ZLIB (required) +# *************** + +have_zlib=yes +AC_CHECK_HEADERS([zlib.h], + [AC_CHECK_LIB([z], [inflate], + [AC_CHECK_LIB([z], [crc32], [], [have_zlib=no])], + [have_zlib=no])], + [have_zlib=no]) + +if test x$have_zlib = xno; then + AC_MSG_ERROR([No sufficient zlib library found on your system.]) +fi + +# *************** +# EXIF (optional) +# *************** + +LIBEXIF_REQUIRED=0.6.14 + +AC_ARG_WITH([libexif], AC_HELP_STRING([--without-libexif], [disable EXIF support])) +have_exif=no +if test x$with_libexif != xno; then + PKG_CHECK_MODULES(EXIF, libexif >= $LIBEXIF_REQUIRED, have_exif=yes, have_exif=no) + if test "x$have_exif" = "xyes"; then + AC_CHECK_HEADER([libexif/exif-data.h],[],[have_exif=no]) + fi +fi +if test "x$have_exif" = "xyes"; then + AC_DEFINE(HAVE_EXIF, 1, [EXIF Support.]) + EOM_MODULES="$EOM_MODULES libexif >= $LIBEXIF_REQUIRED" +fi + +AM_CONDITIONAL([HAVE_EXIF], [test "x$have_exif" = "xyes"]) + +# ********************* +# Little CMS (optional) +# ********************* + +AC_ARG_WITH([cms], AC_HELP_STRING([--without-cms], [disable colour management support])) +have_lcms=no +if test x$with_cms != xno; then + PKG_CHECK_MODULES(LCMS, lcms, have_lcms=yes, have_lcms=no) +fi +if test "x$have_lcms" = "xyes"; then + AC_DEFINE(HAVE_LCMS, 1, [Little CMS Support.]) + EOM_MODULES="$EOM_MODULES lcms" +fi + +AM_CONDITIONAL([HAVE_LCMS], [test "x$have_lcms" = "xyes"]) + +# ********************* +# Exempi (optional) +# ********************* +AC_ARG_WITH(xmp, AC_HELP_STRING([--without-xmp], [disable special XMP support])) +have_exempi=no +if test x$with_xmp != xno; then + PKG_CHECK_MODULES(EXEMPI, exempi-2.0 >= $EXEMPI_REQUIRED, have_exempi=yes, have_exempi=no) +fi +if test "x$have_exempi" = "xyes"; then + AC_DEFINE(HAVE_EXEMPI,1, [XMP support.]) + EOM_MODULES="$EOM_MODULES exempi-2.0 >= $EXEMPI_REQUIRED" +fi + +AM_CONDITIONAL([HAVE_EXEMPI], [test "x$have_exempi" = "xyes"]) + +# Build EXIF-related documentation if we really have support for it +if test "x$have_exif" = "xyes" || test "x$have_exempi" = "xyes"; then + EOM_DOC_EXIF_START="" + EOM_DOC_EXIF_STOP="" +else + EOM_DOC_EXIF_START="<!--" + EOM_DOC_EXIF_STOP="-->" +fi + +AC_SUBST([EOM_DOC_EXIF_START]) +AC_SUBST([EOM_DOC_EXIF_STOP]) + +# ******************** +# Jpeg (semi-optional) +# ******************** + +AC_ARG_WITH(libjpeg, AC_HELP_STRING([--without-libjpeg], [disable special JPEG support])) + have_jpeg=no + have_libjpeg_80=no + if test x$with_libjpeg != xno && test -z "$LIBJPEG"; then + AC_CHECK_LIB(jpeg, jpeg_destroy_decompress, + have_jpeg=yes, + have_jpeg=no + AC_MSG_WARN(*** JPEG loader will not be built (JPEG library not found) ***)) + if test "$have_jpeg" = yes; then + AC_MSG_CHECKING([for jpeglib.h]) + AC_TRY_CPP( +[#include <stdio.h> +#undef PACKAGE +#undef VERSION +#undef HAVE_STDLIB_H +#include <jpeglib.h>], + have_jpeg=yes, + have_jpeg=no) + AC_MSG_RESULT($have_jpeg) + if test "$have_jpeg" = yes; then + LIBJPEG='-ljpeg' + AC_DEFINE(HAVE_JPEG, 1, [Jpeg Support.]) + AC_DEFINE(HAVE_LIBJPEG, 1, [libjpeg is Present.]) + AC_CHECK_LIB(jpeg, jpeg_simple_progression, + AC_DEFINE(HAVE_PROGRESSIVE_JPEG, 1, [Jpeg Progressive Saving Support.]), + AC_MSG_WARN(JPEG library does not support progressive saving.)) + AC_MSG_CHECKING([[libjpeg version is 8 or greater]]) + AC_PREPROC_IFELSE([ AC_LANG_SOURCE( + [[ +#include <stdio.h> +#include <jpeglib.h> +#if JPEG_LIB_VERSION < 80 +#error "wrong version" +#endif +int main(int c, char**v) { return 0; } + ]]) ], + [AC_MSG_RESULT(yes) + have_libjpeg_80=yes], + [AC_MSG_RESULT(no) + have_libjpeg_80=no]) + + else + AC_MSG_WARN(*** JPEG loader will not be built (JPEG header file not found) ***) + fi + fi + fi + + if test x$with_libjpeg != xno && test -z "$LIBJPEG"; then + AC_MSG_ERROR([ +*** Checks for JPEG loader failed. You can build without it by passing +*** --without-libjpeg to configure but some programs using GTK+ may +*** not work properly]) + fi +AC_SUBST(LIBJPEG) +AM_CONDITIONAL(ENABLE_JPEG, test x$have_jpeg = xyes) +AM_CONDITIONAL(HAVE_LIBJPEG_80, test "x$have_libjpeg_80" = xyes) + +# **************** +# D-Bus activation +# **************** + +DBUS_GLIB_REQUIRED=0.71 + +AC_ARG_WITH([dbus], AC_HELP_STRING([--without-dbus], [disable dbus based activation])) +have_dbus=no +if test x$with_dbus != xno; then + PKG_CHECK_MODULES([DBUS], [dbus-glib-1 >= $DBUS_GLIB_REQUIRED], have_dbus=yes, have_dbus=no) +fi +if test x$have_dbus = xyes; then + AC_PATH_PROG([DBUS_BINDING_TOOL], [dbus-binding-tool], [no]) + + if test x$DBUS_BINDING_TOOL = "xno" ; then + AC_MSG_ERROR([dbus-binding-tool executable not found in your path - should be installed with dbus glib bindings]) + fi + + AC_DEFINE(HAVE_DBUS, 1, [DBUS based activation.]) + EOM_MODULES="$EOM_MODULES dbus-glib-1 >= $DBUS_GLIB_REQUIRED" +fi + +AM_CONDITIONAL([HAVE_DBUS], [test "x$have_dbus" = "xyes"]) + +# ************************************ +# libXML2 (required for toolbareditor) +# ************************************ + +LIBXML2_REQUIRED=2.0 +PKG_CHECK_MODULES(LIBXML2, [libxml-2.0 >= $LIBXML2_REQUIRED]) + +# *************** +# RSVG (optional for scaling svg image) +# *************** + +LIBRSVG_REQUIRED=2.26.0 + +AC_ARG_WITH([librsvg], AC_HELP_STRING([--without-librsvg], [disable RSVG support])) +have_rsvg=no +if test x$with_librsvg != xno; then + PKG_CHECK_MODULES(RSVG, librsvg-2.0 >= $LIBRSVG_REQUIRED, have_rsvg=yes, have_rsvg=no) +fi +if test "x$have_rsvg" = "xyes"; then + AC_DEFINE(HAVE_RSVG, 1, [RSVG Support.]) + EOM_MODULES="$EOM_MODULES librsvg-2.0 >= $LIBRSVG_REQUIRED" +fi + +AM_CONDITIONAL([HAVE_RSVG], [test "x$have_rsvg" = "xyes"]) + +# **************** +# CFLAGS/LIBS init +# **************** + +PKG_CHECK_MODULES(EOM, $EOM_MODULES) +AC_SUBST(EOM_CFLAGS) +AC_SUBST(EOM_LIBS) + +# ******************************************************* +# libX11 (required for TotemScrSaver and Color Profiling) +# ******************************************************* + +# Check GDK rendering target +gdk_target=`$PKG_CONFIG --variable=target gdk-2.0` + +if test "x$have_lcms" = "xyes" || test "$gdk_target" = "x11"; then + PKG_CHECK_MODULES(X11, [x11], have_x11=yes, have_x11=no) + + if test "x$have_x11" != "xyes"; then + # Fallback for X11 releases without .pc-files + AC_PATH_XTRA + if test x$no_x = xyes ; then + AC_MSG_ERROR([X development libraries (libX11) not found]) + else + X11_LIBS="$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS" + AC_SUBST(X11_LIBS) + have_x11=yes + fi + fi +fi + +# ***** +# MateConf +# ***** + +AM_MATECONF_SOURCE_2 + +AC_PATH_PROG([MATECONFTOOL], [mateconftool-2], [no]) + +if test "$MATECONFTOOL" = "no"; then + AC_MSG_ERROR([mateconftool-2 not found]) +fi + +# ************ +# Sun Keyboard +# ************ + +AC_CHECK_HEADERS(X11/Sunkeysym.h, AC_DEFINE(HAVE_SUNKEYSYM_H, 1, [Sun Keyboard Support])) + +# ************** +# Python Support +# ************** + +AC_MSG_CHECKING([whether Python support is requested]) + +AC_ARG_ENABLE([python], + AS_HELP_STRING([--enable-python],[Enable python support]), + [enable_python=$enableval have_python=$enableval], + [enable_python=autodetect have_python=yes]) + +AC_MSG_RESULT([$enable_python]) + +if test "x$have_python" != "xno"; then + AM_PATH_PYTHON([2.3],[],[no]) + if test "x$PYTHON" = "x:"; then + have_python=no + fi +fi + +if test "x$have_python" != "xno"; then + PY_PREFIX=`$PYTHON -c 'import sys ; print sys.prefix'` + PY_EXEC_PREFIX=`$PYTHON -c 'import sys ; print sys.exec_prefix'` + PYTHON_LIBS="-lpython$PYTHON_VERSION" + PYTHON_LIB_LOC="-L$PY_EXEC_PREFIX/lib/python$PYTHON_VERSION/config" + PYTHON_CFLAGS="-I$PY_PREFIX/include/python$PYTHON_VERSION" + PYTHON_MAKEFILE="$PY_EXEC_PREFIX/lib/python$PYTHON_VERSION/config/Makefile" + PYTHON_BASEMODLIBS=`sed -n -e 's/^BASEMODLIBS=\(.*\)/\1/p' $PYTHON_MAKEFILE` + PYTHON_OTHER_LIBS=`sed -n -e 's/^LIBS=\(.*\)/\1/p' $PYTHON_MAKEFILE` + PYTHON_EXTRA_LIBS="$PYTHON_BASEMODLIBS $PYTHON_OTHER_LIBS" + AC_SUBST([PYTHON_LIBS]) + AC_SUBST([PYTHON_LIB_LOC]) + AC_SUBST([PYTHON_CFLAGS]) + AC_SUBST([PYTHON_EXTRA_LIBS]) +fi + +if test "x$have_python" != "xyes"; then + if test "x$enable_python" = "xyes"; then + AC_MSG_ERROR([Python not found]) + elif test "x$enable_python" = "xautodetect"; then + enable_python=no + AC_MSG_WARN([Python not found, disabling python support]) + fi +fi + +if test "x$have_python" != "xno"; then + PYGOBJECT_REQUIRED=2.15.1 + PYGTK_REQUIRED=2.13.0 + + PKG_CHECK_MODULES([PYGTK], [ + pygobject-2.0 >= $PYGOBJECT_REQUIRED + pygtk-2.0 >= $PYGTK_REQUIRED], + [], + [ + have_python=no + if test "x$enable_python" = "xyes"; then + AC_MSG_ERROR([$PYGTK_PKG_ERRORS]) + elif test "x$enable_python" = "xautodetect"; then + enable_python=no + AC_MSG_WARN([$PYGTK_PKG_ERRORS]) + AC_MSG_WARN([Disabling python support]) + fi + ]) + + AC_SUBST([PYGTK_CFLAGS]) + AC_SUBST([PYGTK_LIBS]) +fi + +if test "x$have_python" != "xno"; then + AC_MSG_CHECKING([for pygobject defs]) + PYGOBJECT_DEFSDIR=`$PKG_CONFIG --variable=defsdir pygobject-2.0` + AC_MSG_RESULT([$PYGOBJECT_DEFSDIR]) + + AC_MSG_CHECKING([for pygtk defs]) + PYGTK_DEFSDIR=`$PKG_CONFIG --variable=defsdir pygtk-2.0` + AC_MSG_RESULT([$PYGTK_DEFSDIR]) + + AC_MSG_CHECKING([for pygobject codegen]) + PYGOBJECT_CODEGEN="$PYTHON `$PKG_CONFIG --variable=codegendir pygobject-2.0`/codegen.py" + AC_MSG_RESULT([$PYGOBJECT_CODEGEN]) + + AC_MSG_CHECKING([for pygobject h2def]) + PYGOBJECT_H2DEF="$PYTHON `$PKG_CONFIG --variable=codegendir pygobject-2.0`/h2def.py" + AC_MSG_RESULT([$PYGOBJECT_H2DEF]) + + AC_SUBST([PYGOBJECT_DEFSDIR]) + AC_SUBST([PYGTK_DEFSDIR]) + AC_SUBST([PYGOBJECT_CODEGEN]) + AC_SUBST([PYGOBJECT_H2DEF]) + + dnl Check for -fno-strict-aliasing + FLAGS="-fno-strict-aliasing" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $FLAGS" + AC_MSG_CHECKING([whether [$]CC understands $FLAGS]) + AC_TRY_COMPILE([], [], [compiler_has_option=yes], [compiler_has_option=no]) + CFLAGS="$save_CFLAGS" + AC_MSG_RESULT($compiler_has_option) + if test $compiler_has_option = yes; then + NO_STRICT_ALIASING_CFLAGS="$FLAGS" + fi + AC_SUBST([NO_STRICT_ALIASING_CFLAGS]) +fi + +if test "x$have_python" != "xno" -a "x$enable_python" != "xno"; then + enable_python=yes + AC_DEFINE([ENABLE_PYTHON],[1],[Define to compile with python support]) +fi + +AM_CONDITIONAL([ENABLE_PYTHON],[test "x$enable_python" = "xyes"]) + +AC_CONFIG_FILES([ +Makefile +src/Makefile +jpegutils/Makefile +cut-n-paste/Makefile +cut-n-paste/toolbar-editor/Makefile +cut-n-paste/totem-screensaver/Makefile +help/Makefile +po/Makefile.in +data/Makefile +data/eom.pc +data/eom.desktop.in +data/pixmaps/Makefile +data/icons/Makefile +data/icons/16x16/Makefile +data/icons/22x22/Makefile +data/icons/24x24/Makefile +data/icons/32x32/Makefile +data/icons/48x48/Makefile +data/icons/scalable/Makefile +doc/Makefile +doc/reference/Makefile +doc/reference/version.xml +doc/reference/eom-docs.sgml +plugins/Makefile +bindings/Makefile +bindings/python/Makefile +]) + +AC_OUTPUT + +echo " +Configure summary: + + Source code location .......: ${srcdir} + Compiler ...................: ${CC} + Extra Compiler Warnings ....: ${WARN_CFLAGS} + + Python support .............: ${have_python} + EXIF support ...............: ${have_exif} + XMP support ................: ${have_exempi} + JPEG support ...............: ${have_jpeg} + Colour management support ..: ${have_lcms} + D-Bus activation............: ${have_dbus} +" diff --git a/cut-n-paste/Makefile.am b/cut-n-paste/Makefile.am new file mode 100644 index 0000000..177f5ef --- /dev/null +++ b/cut-n-paste/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS = toolbar-editor totem-screensaver + +-include $(top_srcdir)/git.mk diff --git a/cut-n-paste/Makefile.in b/cut-n-paste/Makefile.in new file mode 100644 index 0000000..2985db5 --- /dev/null +++ b/cut-n-paste/Makefile.in @@ -0,0 +1,655 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = cut-n-paste +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DBUS_BINDING_TOOL = @DBUS_BINDING_TOOL@ +DBUS_CFLAGS = @DBUS_CFLAGS@ +DBUS_LIBS = @DBUS_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISABLE_DEPRECATED = @DISABLE_DEPRECATED@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ +DLLTOOL = @DLLTOOL@ +DOC_USER_FORMATS = @DOC_USER_FORMATS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EOM_API_VERSION = @EOM_API_VERSION@ +EOM_CFLAGS = @EOM_CFLAGS@ +EOM_DOC_EXIF_START = @EOM_DOC_EXIF_START@ +EOM_DOC_EXIF_STOP = @EOM_DOC_EXIF_STOP@ +EOM_LIBS = @EOM_LIBS@ +EOM_MAJOR_VERSION = @EOM_MAJOR_VERSION@ +EOM_MICRO_VERSION = @EOM_MICRO_VERSION@ +EOM_MINOR_VERSION = @EOM_MINOR_VERSION@ +EXEEXT = @EXEEXT@ +EXEMPI_CFLAGS = @EXEMPI_CFLAGS@ +EXEMPI_LIBS = @EXEMPI_LIBS@ +EXIF_CFLAGS = @EXIF_CFLAGS@ +EXIF_LIBS = @EXIF_LIBS@ +FGREP = @FGREP@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HELP_DIR = @HELP_DIR@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +LCMS_CFLAGS = @LCMS_CFLAGS@ +LCMS_LIBS = @LCMS_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBJPEG = @LIBJPEG@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ +LIBXML2_LIBS = @LIBXML2_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATECONFTOOL = @MATECONFTOOL@ +MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@ +MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OMF_DIR = @OMF_DIR@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYGOBJECT_CODEGEN = @PYGOBJECT_CODEGEN@ +PYGOBJECT_DEFSDIR = @PYGOBJECT_DEFSDIR@ +PYGOBJECT_H2DEF = @PYGOBJECT_H2DEF@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_DEFSDIR = @PYGTK_DEFSDIR@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYTHON = @PYTHON@ +PYTHON_CFLAGS = @PYTHON_CFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RSVG_CFLAGS = @RSVG_CFLAGS@ +RSVG_LIBS = @RSVG_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XGETTEXT = @XGETTEXT@ +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 = toolbar-editor totem-screensaver +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign cut-n-paste/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign cut-n-paste/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +-include $(top_srcdir)/git.mk + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/cut-n-paste/toolbar-editor/Makefile.am b/cut-n-paste/toolbar-editor/Makefile.am new file mode 100644 index 0000000..0b2fb12 --- /dev/null +++ b/cut-n-paste/toolbar-editor/Makefile.am @@ -0,0 +1,109 @@ +EGGSOURCES = \ + egg-editable-toolbar.c \ + egg-toolbars-model.c \ + egg-toolbar-editor.c + +EGGHEADERS = \ + egg-editable-toolbar.h \ + egg-toolbars-model.h \ + egg-toolbar-editor.h + +noinst_HEADERS = \ + $(EGGHEADERS) \ + eggmarshalers.h + +noinst_LTLIBRARIES = libtoolbareditor.la + +libtoolbareditor_la_SOURCES = \ + $(BUILT_SOURCES) \ + $(EGGSOURCES) \ + $(EGGHEADERS) + +libtoolbareditor_la_CPPFLAGS = \ + -I$(top_builddir)/lib/egg \ + $(AM_CPPFLAGS) + +libtoolbareditor_la_LIBADD = $(LIBXML2_LIBS) + +libtoolbareditor_la_CFLAGS = \ + $(EOM_CFLAGS) \ + $(WARN_CFLAGS) \ + $(LIBXML2_CFLAGS) \ + -DCURSOR_DIR=\"$(pkgdatadir)\" + +BUILT_SOURCES = \ + eggmarshalers.c \ + eggmarshalers.h \ + eggtypebuiltins.c \ + eggtypebuiltins.h + +stamp_files = \ + stamp-eggmarshalers.c \ + stamp-eggmarshalers.h \ + stamp-eggtypebuiltins.c \ + stamp-eggtypebuiltins.h + +eggmarshalers.h: stamp-eggmarshalers.h + @true +stamp-eggmarshalers.h: eggmarshalers.list + $(AM_V_GEN)$(GLIB_GENMARSHAL) --internal --prefix=_egg_marshal $(srcdir)/eggmarshalers.list --header > eggmarshalers.h \ + && echo timestamp > $(@F) + +eggmarshalers.c: stamp-eggmarshalers.c + @true +stamp-eggmarshalers.c: eggmarshalers.list + $(AM_V_GEN)$(GLIB_GENMARSHAL) --prefix=_egg_marshal $(srcdir)/eggmarshalers.list --header --body > eggmarshalers.c \ + && echo timestamp > $(@F) + +eggtypebuiltins.c: stamp-eggtypebuiltins.c + @true +stamp-eggtypebuiltins.c: $(EGGHEADERS) + $(AM_V_GEN)( cd $(srcdir) && $(GLIB_MKENUMS) \ + --fhead "#include \"eggtypebuiltins.h\"\n\n" \ + --fprod "\n/* enumerations from \"@filename@\" */" \ + --fprod "\n#include \"@filename@\"" \ + --vhead "static const G@Type@Value _@enum_name@_values[] = {" \ + --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ + --vtail " { 0, NULL, NULL }\n};\n\n" \ + --vtail "G_GNUC_INTERNAL GType\n@enum_name@_get_type (void)\n{\n" \ + --vtail " static GType type = 0;\n\n" \ + --vtail " if (G_UNLIKELY (type == 0))\n" \ + --vtail " type = g_@type@_register_static (\"@EnumName@\", _@enum_name@_values);\n\n" \ + --vtail " return type;\n}\n\n" \ + $(^F) ) > xgen-$(@F) \ + && ( cmp -s xgen-$(@F) $(@F:stamp-%=%) || cp xgen-$(@F) $(@F:stamp-%=%) ) \ + && rm -f xgen-$(@F) \ + && echo timestamp > $(@F) + +eggtypebuiltins.h: stamp-eggtypebuiltins.h + @true +stamp-eggtypebuiltins.h: $(EGGHEADERS) + $(AM_V_GEN)( cd $(srcdir) && $(GLIB_MKENUMS) \ + --fhead "#ifndef __EGGTYPEBUILTINS_H__\n" \ + --fhead "#define __EGGTYPEBUILTINS_H__ 1\n\n" \ + --fhead "#include <glib-object.h>\n\n" \ + --fhead "G_BEGIN_DECLS\n\n" \ + --ftail "G_END_DECLS\n\n" \ + --ftail "#endif /* __EGGTYPEBUILTINS_H__ */\n" \ + --fprod "\n/* --- @filename@ --- */" \ + --eprod "#define EGG_TYPE_@ENUMSHORT@ @enum_name@_get_type()\n" \ + --eprod "G_GNUC_INTERNAL GType @enum_name@_get_type (void);\n" \ + $(^F) ) > xgen-$(@F) \ + && ( cmp -s xgen-$(@F) $(@F:stamp-%=%) || cp xgen-$(@F) $(@F:stamp-%=%) ) \ + && rm -f xgen-$(@F) \ + && echo timestamp > $(@F) + +EXTRA_DIST = \ + eggmarshalers.list + +EGGFILES=$(EGGSOURCES) $(EGGHEADERS) +EGGDIR=$(srcdir)/../../../libegg/libegg + +regenerate-built-sources: + EGGFILES="$(EGGFILES) eggmarshalers.list" EGGDIR="$(EGGDIR)" $(top_srcdir)/cut-n-paste/update-from-egg.sh + +CLEANFILES = $(stamp_files) $(BUILT_SOURCES) +DISTCLEANFILES = $(stamp_files) $(BUILT_SOURCES) +MAINTAINERCLEANFILES = $(stamp_files) $(BUILT_SOURCES) + +-include $(top_srcdir)/git.mk diff --git a/cut-n-paste/toolbar-editor/Makefile.in b/cut-n-paste/toolbar-editor/Makefile.in new file mode 100644 index 0000000..598e361 --- /dev/null +++ b/cut-n-paste/toolbar-editor/Makefile.in @@ -0,0 +1,749 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = cut-n-paste/toolbar-editor +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +am__DEPENDENCIES_1 = +libtoolbareditor_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am__objects_1 = libtoolbareditor_la-eggmarshalers.lo \ + libtoolbareditor_la-eggtypebuiltins.lo +am__objects_2 = libtoolbareditor_la-egg-editable-toolbar.lo \ + libtoolbareditor_la-egg-toolbars-model.lo \ + libtoolbareditor_la-egg-toolbar-editor.lo +am__objects_3 = +am_libtoolbareditor_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ + $(am__objects_3) +libtoolbareditor_la_OBJECTS = $(am_libtoolbareditor_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +libtoolbareditor_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(libtoolbareditor_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libtoolbareditor_la_SOURCES) +DIST_SOURCES = $(libtoolbareditor_la_SOURCES) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DBUS_BINDING_TOOL = @DBUS_BINDING_TOOL@ +DBUS_CFLAGS = @DBUS_CFLAGS@ +DBUS_LIBS = @DBUS_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISABLE_DEPRECATED = @DISABLE_DEPRECATED@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ +DLLTOOL = @DLLTOOL@ +DOC_USER_FORMATS = @DOC_USER_FORMATS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EOM_API_VERSION = @EOM_API_VERSION@ +EOM_CFLAGS = @EOM_CFLAGS@ +EOM_DOC_EXIF_START = @EOM_DOC_EXIF_START@ +EOM_DOC_EXIF_STOP = @EOM_DOC_EXIF_STOP@ +EOM_LIBS = @EOM_LIBS@ +EOM_MAJOR_VERSION = @EOM_MAJOR_VERSION@ +EOM_MICRO_VERSION = @EOM_MICRO_VERSION@ +EOM_MINOR_VERSION = @EOM_MINOR_VERSION@ +EXEEXT = @EXEEXT@ +EXEMPI_CFLAGS = @EXEMPI_CFLAGS@ +EXEMPI_LIBS = @EXEMPI_LIBS@ +EXIF_CFLAGS = @EXIF_CFLAGS@ +EXIF_LIBS = @EXIF_LIBS@ +FGREP = @FGREP@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HELP_DIR = @HELP_DIR@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +LCMS_CFLAGS = @LCMS_CFLAGS@ +LCMS_LIBS = @LCMS_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBJPEG = @LIBJPEG@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ +LIBXML2_LIBS = @LIBXML2_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATECONFTOOL = @MATECONFTOOL@ +MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@ +MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OMF_DIR = @OMF_DIR@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYGOBJECT_CODEGEN = @PYGOBJECT_CODEGEN@ +PYGOBJECT_DEFSDIR = @PYGOBJECT_DEFSDIR@ +PYGOBJECT_H2DEF = @PYGOBJECT_H2DEF@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_DEFSDIR = @PYGTK_DEFSDIR@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYTHON = @PYTHON@ +PYTHON_CFLAGS = @PYTHON_CFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RSVG_CFLAGS = @RSVG_CFLAGS@ +RSVG_LIBS = @RSVG_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XGETTEXT = @XGETTEXT@ +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@ +EGGSOURCES = \ + egg-editable-toolbar.c \ + egg-toolbars-model.c \ + egg-toolbar-editor.c + +EGGHEADERS = \ + egg-editable-toolbar.h \ + egg-toolbars-model.h \ + egg-toolbar-editor.h + +noinst_HEADERS = \ + $(EGGHEADERS) \ + eggmarshalers.h + +noinst_LTLIBRARIES = libtoolbareditor.la +libtoolbareditor_la_SOURCES = \ + $(BUILT_SOURCES) \ + $(EGGSOURCES) \ + $(EGGHEADERS) + +libtoolbareditor_la_CPPFLAGS = \ + -I$(top_builddir)/lib/egg \ + $(AM_CPPFLAGS) + +libtoolbareditor_la_LIBADD = $(LIBXML2_LIBS) +libtoolbareditor_la_CFLAGS = \ + $(EOM_CFLAGS) \ + $(WARN_CFLAGS) \ + $(LIBXML2_CFLAGS) \ + -DCURSOR_DIR=\"$(pkgdatadir)\" + +BUILT_SOURCES = \ + eggmarshalers.c \ + eggmarshalers.h \ + eggtypebuiltins.c \ + eggtypebuiltins.h + +stamp_files = \ + stamp-eggmarshalers.c \ + stamp-eggmarshalers.h \ + stamp-eggtypebuiltins.c \ + stamp-eggtypebuiltins.h + +EXTRA_DIST = \ + eggmarshalers.list + +EGGFILES = $(EGGSOURCES) $(EGGHEADERS) +EGGDIR = $(srcdir)/../../../libegg/libegg +CLEANFILES = $(stamp_files) $(BUILT_SOURCES) +DISTCLEANFILES = $(stamp_files) $(BUILT_SOURCES) +MAINTAINERCLEANFILES = $(stamp_files) $(BUILT_SOURCES) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign cut-n-paste/toolbar-editor/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign cut-n-paste/toolbar-editor/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libtoolbareditor.la: $(libtoolbareditor_la_OBJECTS) $(libtoolbareditor_la_DEPENDENCIES) + $(AM_V_CCLD)$(libtoolbareditor_la_LINK) $(libtoolbareditor_la_OBJECTS) $(libtoolbareditor_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtoolbareditor_la-egg-editable-toolbar.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtoolbareditor_la-egg-toolbar-editor.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtoolbareditor_la-egg-toolbars-model.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtoolbareditor_la-eggmarshalers.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtoolbareditor_la-eggtypebuiltins.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +libtoolbareditor_la-eggmarshalers.lo: eggmarshalers.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtoolbareditor_la_CPPFLAGS) $(CPPFLAGS) $(libtoolbareditor_la_CFLAGS) $(CFLAGS) -MT libtoolbareditor_la-eggmarshalers.lo -MD -MP -MF $(DEPDIR)/libtoolbareditor_la-eggmarshalers.Tpo -c -o libtoolbareditor_la-eggmarshalers.lo `test -f 'eggmarshalers.c' || echo '$(srcdir)/'`eggmarshalers.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtoolbareditor_la-eggmarshalers.Tpo $(DEPDIR)/libtoolbareditor_la-eggmarshalers.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eggmarshalers.c' object='libtoolbareditor_la-eggmarshalers.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtoolbareditor_la_CPPFLAGS) $(CPPFLAGS) $(libtoolbareditor_la_CFLAGS) $(CFLAGS) -c -o libtoolbareditor_la-eggmarshalers.lo `test -f 'eggmarshalers.c' || echo '$(srcdir)/'`eggmarshalers.c + +libtoolbareditor_la-eggtypebuiltins.lo: eggtypebuiltins.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtoolbareditor_la_CPPFLAGS) $(CPPFLAGS) $(libtoolbareditor_la_CFLAGS) $(CFLAGS) -MT libtoolbareditor_la-eggtypebuiltins.lo -MD -MP -MF $(DEPDIR)/libtoolbareditor_la-eggtypebuiltins.Tpo -c -o libtoolbareditor_la-eggtypebuiltins.lo `test -f 'eggtypebuiltins.c' || echo '$(srcdir)/'`eggtypebuiltins.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtoolbareditor_la-eggtypebuiltins.Tpo $(DEPDIR)/libtoolbareditor_la-eggtypebuiltins.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eggtypebuiltins.c' object='libtoolbareditor_la-eggtypebuiltins.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtoolbareditor_la_CPPFLAGS) $(CPPFLAGS) $(libtoolbareditor_la_CFLAGS) $(CFLAGS) -c -o libtoolbareditor_la-eggtypebuiltins.lo `test -f 'eggtypebuiltins.c' || echo '$(srcdir)/'`eggtypebuiltins.c + +libtoolbareditor_la-egg-editable-toolbar.lo: egg-editable-toolbar.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtoolbareditor_la_CPPFLAGS) $(CPPFLAGS) $(libtoolbareditor_la_CFLAGS) $(CFLAGS) -MT libtoolbareditor_la-egg-editable-toolbar.lo -MD -MP -MF $(DEPDIR)/libtoolbareditor_la-egg-editable-toolbar.Tpo -c -o libtoolbareditor_la-egg-editable-toolbar.lo `test -f 'egg-editable-toolbar.c' || echo '$(srcdir)/'`egg-editable-toolbar.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtoolbareditor_la-egg-editable-toolbar.Tpo $(DEPDIR)/libtoolbareditor_la-egg-editable-toolbar.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='egg-editable-toolbar.c' object='libtoolbareditor_la-egg-editable-toolbar.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtoolbareditor_la_CPPFLAGS) $(CPPFLAGS) $(libtoolbareditor_la_CFLAGS) $(CFLAGS) -c -o libtoolbareditor_la-egg-editable-toolbar.lo `test -f 'egg-editable-toolbar.c' || echo '$(srcdir)/'`egg-editable-toolbar.c + +libtoolbareditor_la-egg-toolbars-model.lo: egg-toolbars-model.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtoolbareditor_la_CPPFLAGS) $(CPPFLAGS) $(libtoolbareditor_la_CFLAGS) $(CFLAGS) -MT libtoolbareditor_la-egg-toolbars-model.lo -MD -MP -MF $(DEPDIR)/libtoolbareditor_la-egg-toolbars-model.Tpo -c -o libtoolbareditor_la-egg-toolbars-model.lo `test -f 'egg-toolbars-model.c' || echo '$(srcdir)/'`egg-toolbars-model.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtoolbareditor_la-egg-toolbars-model.Tpo $(DEPDIR)/libtoolbareditor_la-egg-toolbars-model.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='egg-toolbars-model.c' object='libtoolbareditor_la-egg-toolbars-model.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtoolbareditor_la_CPPFLAGS) $(CPPFLAGS) $(libtoolbareditor_la_CFLAGS) $(CFLAGS) -c -o libtoolbareditor_la-egg-toolbars-model.lo `test -f 'egg-toolbars-model.c' || echo '$(srcdir)/'`egg-toolbars-model.c + +libtoolbareditor_la-egg-toolbar-editor.lo: egg-toolbar-editor.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtoolbareditor_la_CPPFLAGS) $(CPPFLAGS) $(libtoolbareditor_la_CFLAGS) $(CFLAGS) -MT libtoolbareditor_la-egg-toolbar-editor.lo -MD -MP -MF $(DEPDIR)/libtoolbareditor_la-egg-toolbar-editor.Tpo -c -o libtoolbareditor_la-egg-toolbar-editor.lo `test -f 'egg-toolbar-editor.c' || echo '$(srcdir)/'`egg-toolbar-editor.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtoolbareditor_la-egg-toolbar-editor.Tpo $(DEPDIR)/libtoolbareditor_la-egg-toolbar-editor.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='egg-toolbar-editor.c' object='libtoolbareditor_la-egg-toolbar-editor.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtoolbareditor_la_CPPFLAGS) $(CPPFLAGS) $(libtoolbareditor_la_CFLAGS) $(CFLAGS) -c -o libtoolbareditor_la-egg-toolbar-editor.lo `test -f 'egg-toolbar-editor.c' || echo '$(srcdir)/'`egg-toolbar-editor.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-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 -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-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 uninstall uninstall-am + + +eggmarshalers.h: stamp-eggmarshalers.h + @true +stamp-eggmarshalers.h: eggmarshalers.list + $(AM_V_GEN)$(GLIB_GENMARSHAL) --internal --prefix=_egg_marshal $(srcdir)/eggmarshalers.list --header > eggmarshalers.h \ + && echo timestamp > $(@F) + +eggmarshalers.c: stamp-eggmarshalers.c + @true +stamp-eggmarshalers.c: eggmarshalers.list + $(AM_V_GEN)$(GLIB_GENMARSHAL) --prefix=_egg_marshal $(srcdir)/eggmarshalers.list --header --body > eggmarshalers.c \ + && echo timestamp > $(@F) + +eggtypebuiltins.c: stamp-eggtypebuiltins.c + @true +stamp-eggtypebuiltins.c: $(EGGHEADERS) + $(AM_V_GEN)( cd $(srcdir) && $(GLIB_MKENUMS) \ + --fhead "#include \"eggtypebuiltins.h\"\n\n" \ + --fprod "\n/* enumerations from \"@filename@\" */" \ + --fprod "\n#include \"@filename@\"" \ + --vhead "static const G@Type@Value _@enum_name@_values[] = {" \ + --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ + --vtail " { 0, NULL, NULL }\n};\n\n" \ + --vtail "G_GNUC_INTERNAL GType\n@enum_name@_get_type (void)\n{\n" \ + --vtail " static GType type = 0;\n\n" \ + --vtail " if (G_UNLIKELY (type == 0))\n" \ + --vtail " type = g_@type@_register_static (\"@EnumName@\", _@enum_name@_values);\n\n" \ + --vtail " return type;\n}\n\n" \ + $(^F) ) > xgen-$(@F) \ + && ( cmp -s xgen-$(@F) $(@F:stamp-%=%) || cp xgen-$(@F) $(@F:stamp-%=%) ) \ + && rm -f xgen-$(@F) \ + && echo timestamp > $(@F) + +eggtypebuiltins.h: stamp-eggtypebuiltins.h + @true +stamp-eggtypebuiltins.h: $(EGGHEADERS) + $(AM_V_GEN)( cd $(srcdir) && $(GLIB_MKENUMS) \ + --fhead "#ifndef __EGGTYPEBUILTINS_H__\n" \ + --fhead "#define __EGGTYPEBUILTINS_H__ 1\n\n" \ + --fhead "#include <glib-object.h>\n\n" \ + --fhead "G_BEGIN_DECLS\n\n" \ + --ftail "G_END_DECLS\n\n" \ + --ftail "#endif /* __EGGTYPEBUILTINS_H__ */\n" \ + --fprod "\n/* --- @filename@ --- */" \ + --eprod "#define EGG_TYPE_@ENUMSHORT@ @enum_name@_get_type()\n" \ + --eprod "G_GNUC_INTERNAL GType @enum_name@_get_type (void);\n" \ + $(^F) ) > xgen-$(@F) \ + && ( cmp -s xgen-$(@F) $(@F:stamp-%=%) || cp xgen-$(@F) $(@F:stamp-%=%) ) \ + && rm -f xgen-$(@F) \ + && echo timestamp > $(@F) + +regenerate-built-sources: + EGGFILES="$(EGGFILES) eggmarshalers.list" EGGDIR="$(EGGDIR)" $(top_srcdir)/cut-n-paste/update-from-egg.sh + +-include $(top_srcdir)/git.mk + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/cut-n-paste/toolbar-editor/egg-editable-toolbar.c b/cut-n-paste/toolbar-editor/egg-editable-toolbar.c new file mode 100644 index 0000000..ada3932 --- /dev/null +++ b/cut-n-paste/toolbar-editor/egg-editable-toolbar.c @@ -0,0 +1,1810 @@ +/* + * Copyright (C) 2003, 2004 Marco Pesenti Gritti + * Copyright (C) 2003, 2004, 2005 Christian Persch + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id: egg-editable-toolbar.c 937 2009-04-07 11:16:53Z friemann $ + */ + +#include "config.h" + +#include "egg-editable-toolbar.h" +#include "egg-toolbars-model.h" +#include "egg-toolbar-editor.h" + +#include <gtk/gtk.h> +#include <glib/gi18n.h> +#include <string.h> + +static GdkPixbuf * new_separator_pixbuf (void); + +#define MIN_TOOLBAR_HEIGHT 20 +#define EGG_ITEM_NAME "egg-item-name" +#define STOCK_DRAG_MODE "stock_drag-mode" + +static const GtkTargetEntry dest_drag_types[] = { + {EGG_TOOLBAR_ITEM_TYPE, GTK_TARGET_SAME_APP, 0}, +}; + +enum +{ + PROP_0, + PROP_TOOLBARS_MODEL, + PROP_UI_MANAGER, + PROP_POPUP_PATH, + PROP_SELECTED, + PROP_EDIT_MODE +}; + +enum +{ + ACTION_REQUEST, + LAST_SIGNAL +}; + +static guint egg_editable_toolbar_signals[LAST_SIGNAL] = { 0 }; + +#define EGG_EDITABLE_TOOLBAR_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EGG_TYPE_EDITABLE_TOOLBAR, EggEditableToolbarPrivate)) + +struct _EggEditableToolbarPrivate +{ + GtkUIManager *manager; + EggToolbarsModel *model; + guint edit_mode; + gboolean save_hidden; + GtkWidget *fixed_toolbar; + + GtkWidget *selected; + GtkActionGroup *actions; + + guint visibility_id; + GList *visibility_paths; + GPtrArray *visibility_actions; + + char *popup_path; + + guint dnd_pending; + GtkToolbar *dnd_toolbar; + GtkToolItem *dnd_toolitem; +}; + +G_DEFINE_TYPE (EggEditableToolbar, egg_editable_toolbar, GTK_TYPE_VBOX); + +static int +get_dock_position (EggEditableToolbar *etoolbar, + GtkWidget *dock) +{ + GList *l; + int result; + + l = gtk_container_get_children (GTK_CONTAINER (etoolbar)); + result = g_list_index (l, dock); + g_list_free (l); + + return result; +} + +static int +get_toolbar_position (EggEditableToolbar *etoolbar, GtkWidget *toolbar) +{ + return get_dock_position (etoolbar, gtk_widget_get_parent (toolbar)); +} + +static int +get_n_toolbars (EggEditableToolbar *etoolbar) +{ + GList *l; + int result; + + l = gtk_container_get_children (GTK_CONTAINER (etoolbar)); + result = g_list_length (l); + g_list_free (l); + + return result; +} + +static GtkWidget * +get_dock_nth (EggEditableToolbar *etoolbar, + int position) +{ + GList *l; + GtkWidget *result; + + l = gtk_container_get_children (GTK_CONTAINER (etoolbar)); + result = g_list_nth_data (l, position); + g_list_free (l); + + return result; +} + +static GtkWidget * +get_toolbar_nth (EggEditableToolbar *etoolbar, + int position) +{ + GList *l; + GtkWidget *dock; + GtkWidget *result; + + dock = get_dock_nth (etoolbar, position); + g_return_val_if_fail (dock != NULL, NULL); + + l = gtk_container_get_children (GTK_CONTAINER (dock)); + result = GTK_WIDGET (l->data); + g_list_free (l); + + return result; +} + +static GtkAction * +find_action (EggEditableToolbar *etoolbar, + const char *name) +{ + GList *l; + GtkAction *action = NULL; + + l = gtk_ui_manager_get_action_groups (etoolbar->priv->manager); + + g_return_val_if_fail (name != NULL, NULL); + + for (; l != NULL; l = l->next) + { + GtkAction *tmp; + + tmp = gtk_action_group_get_action (GTK_ACTION_GROUP (l->data), name); + if (tmp) + action = tmp; + } + + return action; +} + +static void +drag_data_delete_cb (GtkWidget *widget, + GdkDragContext *context, + EggEditableToolbar *etoolbar) +{ + int pos, toolbar_pos; + + widget = gtk_widget_get_ancestor (widget, GTK_TYPE_TOOL_ITEM); + g_return_if_fail (widget != NULL); + g_return_if_fail (EGG_IS_EDITABLE_TOOLBAR (etoolbar)); + + pos = gtk_toolbar_get_item_index (GTK_TOOLBAR (gtk_widget_get_parent (widget)), + GTK_TOOL_ITEM (widget)); + toolbar_pos = get_toolbar_position (etoolbar, gtk_widget_get_parent (widget)); + + egg_toolbars_model_remove_item (etoolbar->priv->model, + toolbar_pos, pos); +} + +static void +drag_begin_cb (GtkWidget *widget, + GdkDragContext *context, + EggEditableToolbar *etoolbar) +{ + GtkAction *action; + gint flags; + + gtk_widget_hide (widget); + +#if GTK_CHECK_VERSION (2, 16, 0) + action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (widget)); +#else + action = gtk_widget_get_action (widget); +#endif + + if (action == NULL) return; + + flags = egg_toolbars_model_get_name_flags (etoolbar->priv->model, + gtk_action_get_name (action)); + if (!(flags & EGG_TB_MODEL_NAME_INFINITE)) + { + flags &= ~EGG_TB_MODEL_NAME_USED; + egg_toolbars_model_set_name_flags (etoolbar->priv->model, + gtk_action_get_name (action), + flags); + } +} + +static void +drag_end_cb (GtkWidget *widget, + GdkDragContext *context, + EggEditableToolbar *etoolbar) +{ + GtkAction *action; + gint flags; + + if (gtk_widget_get_parent (widget) != NULL) + { + gtk_widget_show (widget); + +#if GTK_CHECK_VERSION (2, 16, 0) + action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (widget)); +#else + action = gtk_widget_get_action (widget); +#endif + + if (action == NULL) return; + + flags = egg_toolbars_model_get_name_flags (etoolbar->priv->model, + gtk_action_get_name (action)); + if (!(flags & EGG_TB_MODEL_NAME_INFINITE)) + { + flags |= EGG_TB_MODEL_NAME_USED; + egg_toolbars_model_set_name_flags (etoolbar->priv->model, + gtk_action_get_name (action), + flags); + } + } +} + +static void +drag_data_get_cb (GtkWidget *widget, + GdkDragContext *context, + GtkSelectionData *selection_data, + guint info, + guint32 time, + EggEditableToolbar *etoolbar) +{ + EggToolbarsModel *model; + const char *name; + char *data; + + g_return_if_fail (EGG_IS_EDITABLE_TOOLBAR (etoolbar)); + model = egg_editable_toolbar_get_model (etoolbar); + + name = g_object_get_data (G_OBJECT (widget), EGG_ITEM_NAME); + if (name == NULL) + { + name = g_object_get_data (G_OBJECT (gtk_widget_get_parent (widget)), EGG_ITEM_NAME); + g_return_if_fail (name != NULL); + } + + data = egg_toolbars_model_get_data (model, gtk_selection_data_get_target (selection_data), name); + if (data != NULL) + { + gtk_selection_data_set (selection_data, gtk_selection_data_get_target (selection_data), 8, (unsigned char *)data, strlen (data)); + g_free (data); + } +} + +static void +move_item_cb (GtkAction *action, + EggEditableToolbar *etoolbar) +{ + GtkWidget *toolitem = gtk_widget_get_ancestor (egg_editable_toolbar_get_selected (etoolbar), GTK_TYPE_TOOL_ITEM); + GtkTargetList *list = gtk_target_list_new (dest_drag_types, G_N_ELEMENTS (dest_drag_types)); + + GdkEvent *realevent = gtk_get_current_event(); + GdkEventMotion event; + event.type = GDK_MOTION_NOTIFY; + event.window = realevent->any.window; + event.send_event = FALSE; + event.axes = NULL; + event.time = gdk_event_get_time (realevent); + gdk_event_get_state (realevent, &event.state); + gdk_event_get_coords (realevent, &event.x, &event.y); + gdk_event_get_root_coords (realevent, &event.x_root, &event.y_root); + + gtk_drag_begin (toolitem, list, GDK_ACTION_MOVE, 1, (GdkEvent *)&event); + gtk_target_list_unref (list); +} + +static void +remove_item_cb (GtkAction *action, + EggEditableToolbar *etoolbar) +{ + GtkWidget *toolitem = gtk_widget_get_ancestor (egg_editable_toolbar_get_selected (etoolbar), GTK_TYPE_TOOL_ITEM); + int pos, toolbar_pos; + + toolbar_pos = get_toolbar_position (etoolbar, gtk_widget_get_parent (toolitem)); + pos = gtk_toolbar_get_item_index (GTK_TOOLBAR (gtk_widget_get_parent (toolitem)), + GTK_TOOL_ITEM (toolitem)); + + egg_toolbars_model_remove_item (etoolbar->priv->model, + toolbar_pos, pos); + + if (egg_toolbars_model_n_items (etoolbar->priv->model, toolbar_pos) == 0) + { + egg_toolbars_model_remove_toolbar (etoolbar->priv->model, toolbar_pos); + } +} + +static void +remove_toolbar_cb (GtkAction *action, + EggEditableToolbar *etoolbar) +{ + GtkWidget *selected = egg_editable_toolbar_get_selected (etoolbar); + GtkWidget *toolbar = gtk_widget_get_ancestor (selected, GTK_TYPE_TOOLBAR); + int toolbar_pos; + + toolbar_pos = get_toolbar_position (etoolbar, toolbar); + egg_toolbars_model_remove_toolbar (etoolbar->priv->model, toolbar_pos); +} + +static void +popup_context_deactivate (GtkMenuShell *menu, + EggEditableToolbar *etoolbar) +{ + egg_editable_toolbar_set_selected (etoolbar, NULL); + g_object_notify (G_OBJECT (etoolbar), "selected"); +} + +static void +popup_context_menu_cb (GtkWidget *toolbar, + gint x, + gint y, + gint button_number, + EggEditableToolbar *etoolbar) +{ + if (etoolbar->priv->popup_path != NULL) + { + GtkMenu *menu; + + egg_editable_toolbar_set_selected (etoolbar, toolbar); + g_object_notify (G_OBJECT (etoolbar), "selected"); + + menu = GTK_MENU (gtk_ui_manager_get_widget (etoolbar->priv->manager, + etoolbar->priv->popup_path)); + g_return_if_fail (menu != NULL); + gtk_menu_popup (menu, NULL, NULL, NULL, NULL, button_number, gtk_get_current_event_time ()); + g_signal_connect_object (menu, "selection-done", + G_CALLBACK (popup_context_deactivate), + etoolbar, 0); + } +} + +static gboolean +button_press_event_cb (GtkWidget *widget, + GdkEventButton *event, + EggEditableToolbar *etoolbar) +{ + if (event->button == 3 && etoolbar->priv->popup_path != NULL) + { + GtkMenu *menu; + + egg_editable_toolbar_set_selected (etoolbar, widget); + g_object_notify (G_OBJECT (etoolbar), "selected"); + + menu = GTK_MENU (gtk_ui_manager_get_widget (etoolbar->priv->manager, + etoolbar->priv->popup_path)); + g_return_val_if_fail (menu != NULL, FALSE); + gtk_menu_popup (menu, NULL, NULL, NULL, NULL, event->button, event->time); + g_signal_connect_object (menu, "selection-done", + G_CALLBACK (popup_context_deactivate), + etoolbar, 0); + + return TRUE; + } + + return FALSE; +} + +static void +configure_item_sensitivity (GtkToolItem *item, EggEditableToolbar *etoolbar) +{ + GtkAction *action; + char *name; + + name = g_object_get_data (G_OBJECT (item), EGG_ITEM_NAME); + action = name ? find_action (etoolbar, name) : NULL; + + if (action) + { + g_object_notify (G_OBJECT (action), "sensitive"); + } + + gtk_tool_item_set_use_drag_window (item, + (etoolbar->priv->edit_mode > 0) || + GTK_IS_SEPARATOR_TOOL_ITEM (item)); + +} + +static void +configure_item_cursor (GtkToolItem *item, + EggEditableToolbar *etoolbar) +{ + EggEditableToolbarPrivate *priv = etoolbar->priv; + GtkWidget *widget = GTK_WIDGET (item); + + if (gtk_widget_get_window (widget) != NULL) + { + if (priv->edit_mode > 0) + { + GdkCursor *cursor; + GdkScreen *screen; + GdkPixbuf *pixbuf = NULL; + + screen = gtk_widget_get_screen (GTK_WIDGET (etoolbar)); + + cursor = gdk_cursor_new_for_display (gdk_screen_get_display (screen), + GDK_HAND2); + gdk_window_set_cursor (gtk_widget_get_window (widget), cursor); + gdk_cursor_unref (cursor); + + gtk_drag_source_set (widget, GDK_BUTTON1_MASK, dest_drag_types, + G_N_ELEMENTS (dest_drag_types), GDK_ACTION_MOVE); + if (GTK_IS_SEPARATOR_TOOL_ITEM (item)) + { + pixbuf = new_separator_pixbuf (); + } + else + { + char *icon_name=NULL; + char *stock_id=NULL; + GtkAction *action; + char *name; + + name = g_object_get_data (G_OBJECT (widget), EGG_ITEM_NAME); + action = name ? find_action (etoolbar, name) : NULL; + + if (action) + { + g_object_get (action, + "icon-name", &icon_name, + "stock-id", &stock_id, + NULL); + } + if (icon_name) + { + GdkScreen *screen; + GtkIconTheme *icon_theme; + GtkSettings *settings; + gint width, height; + + screen = gtk_widget_get_screen (widget); + icon_theme = gtk_icon_theme_get_for_screen (screen); + settings = gtk_settings_get_for_screen (screen); + + if (!gtk_icon_size_lookup_for_settings (settings, + GTK_ICON_SIZE_LARGE_TOOLBAR, + &width, &height)) + { + width = height = 24; + } + + pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name, + MIN (width, height), 0, NULL); + } + else if (stock_id) + { + pixbuf = gtk_widget_render_icon (widget, stock_id, + GTK_ICON_SIZE_LARGE_TOOLBAR, NULL); + } + g_free (icon_name); + g_free (stock_id); + } + + if (G_UNLIKELY (!pixbuf)) + { + return; + } + gtk_drag_source_set_icon_pixbuf (widget, pixbuf); + g_object_unref (pixbuf); + + } + else + { + gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET(item)), NULL); + } + } +} + + +static void +configure_item_tooltip (GtkToolItem *item) +{ + GtkAction *action; + +#if GTK_CHECK_VERSION (2, 16, 0) + action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (item)); +#else + action = gtk_widget_get_action (GTK_WIDGET (item)); +#endif + + if (action != NULL) + { + g_object_notify (G_OBJECT (action), "tooltip"); + } +} + + +static void +connect_widget_signals (GtkWidget *proxy, EggEditableToolbar *etoolbar) +{ + if (GTK_IS_CONTAINER (proxy)) + { + gtk_container_forall (GTK_CONTAINER (proxy), + (GtkCallback) connect_widget_signals, + (gpointer) etoolbar); + } + + if (GTK_IS_TOOL_ITEM (proxy)) + { + g_signal_connect_object (proxy, "drag_begin", + G_CALLBACK (drag_begin_cb), + etoolbar, 0); + g_signal_connect_object (proxy, "drag_end", + G_CALLBACK (drag_end_cb), + etoolbar, 0); + g_signal_connect_object (proxy, "drag_data_get", + G_CALLBACK (drag_data_get_cb), + etoolbar, 0); + g_signal_connect_object (proxy, "drag_data_delete", + G_CALLBACK (drag_data_delete_cb), + etoolbar, 0); + } + + if (GTK_IS_BUTTON (proxy) || GTK_IS_TOOL_ITEM (proxy)) + { + g_signal_connect_object (proxy, "button-press-event", + G_CALLBACK (button_press_event_cb), + etoolbar, 0); + } +} + +static void +action_sensitive_cb (GtkAction *action, + GParamSpec *pspec, + GtkToolItem *item) +{ + EggEditableToolbar *etoolbar = EGG_EDITABLE_TOOLBAR + (gtk_widget_get_ancestor (GTK_WIDGET (item), EGG_TYPE_EDITABLE_TOOLBAR)); + + if (etoolbar->priv->edit_mode > 0) + { + gtk_widget_set_sensitive (GTK_WIDGET (item), TRUE); + } +} + +static GtkToolItem * +create_item_from_action (EggEditableToolbar *etoolbar, + const char *name) +{ + GtkToolItem *item; + + g_return_val_if_fail (name != NULL, NULL); + + if (strcmp (name, "_separator") == 0) + { + item = gtk_separator_tool_item_new (); + } + else + { + GtkAction *action = find_action (etoolbar, name); + if (action == NULL) return NULL; + + item = GTK_TOOL_ITEM (gtk_action_create_tool_item (action)); + + /* Normally done on-demand by the GtkUIManager, but no + * such demand may have been made yet, so do it ourselves. + */ + gtk_action_set_accel_group + (action, gtk_ui_manager_get_accel_group(etoolbar->priv->manager)); + + g_signal_connect_object (action, "notify::sensitive", + G_CALLBACK (action_sensitive_cb), item, 0); + } + + gtk_widget_show (GTK_WIDGET (item)); + + g_object_set_data_full (G_OBJECT (item), EGG_ITEM_NAME, + g_strdup (name), g_free); + + return item; +} + +static GtkToolItem * +create_item_from_position (EggEditableToolbar *etoolbar, + int toolbar_position, + int position) +{ + GtkToolItem *item; + const char *name; + + name = egg_toolbars_model_item_nth (etoolbar->priv->model, toolbar_position, position); + item = create_item_from_action (etoolbar, name); + + return item; +} + +static void +toolbar_drag_data_received_cb (GtkToolbar *toolbar, + GdkDragContext *context, + gint x, + gint y, + GtkSelectionData *selection_data, + guint info, + guint time, + EggEditableToolbar *etoolbar) +{ + /* This function can be called for two reasons + * + * (1) drag_motion() needs an item to pass to + * gtk_toolbar_set_drop_highlight_item(). We can + * recognize this case by etoolbar->priv->pending being TRUE + * We should just create an item and return. + * + * (2) The drag has finished, and drag_drop() wants us to + * actually add a new item to the toolbar. + */ + + GdkAtom type = gtk_selection_data_get_data_type (selection_data); + const char *data = (char *)gtk_selection_data_get_data (selection_data); + + int ipos = -1; + char *name = NULL; + gboolean used = FALSE; + + /* Find out where the drop is occuring, and the name of what is being dropped. */ + if (gtk_selection_data_get_length (selection_data) >= 0) + { + ipos = gtk_toolbar_get_drop_index (toolbar, x, y); + name = egg_toolbars_model_get_name (etoolbar->priv->model, type, data, FALSE); + if (name != NULL) + { + used = ((egg_toolbars_model_get_name_flags (etoolbar->priv->model, name) & EGG_TB_MODEL_NAME_USED) != 0); + } + } + + /* If we just want a highlight item, then . */ + if (etoolbar->priv->dnd_pending > 0) + { + etoolbar->priv->dnd_pending--; + + if (name != NULL && etoolbar->priv->dnd_toolbar == toolbar && !used) + { + etoolbar->priv->dnd_toolitem = create_item_from_action (etoolbar, name); + gtk_toolbar_set_drop_highlight_item (etoolbar->priv->dnd_toolbar, + etoolbar->priv->dnd_toolitem, ipos); + } + } + else + { + gtk_toolbar_set_drop_highlight_item (toolbar, NULL, 0); + etoolbar->priv->dnd_toolbar = NULL; + etoolbar->priv->dnd_toolitem = NULL; + + /* If we don't have a name to use yet, try to create one. */ + if (name == NULL && gtk_selection_data_get_length (selection_data) >= 0) + { + name = egg_toolbars_model_get_name (etoolbar->priv->model, type, data, TRUE); + } + + if (name != NULL && !used) + { + gint tpos = get_toolbar_position (etoolbar, GTK_WIDGET (toolbar)); + egg_toolbars_model_add_item (etoolbar->priv->model, tpos, ipos, name); + gtk_drag_finish (context, TRUE, context->action == GDK_ACTION_MOVE, time); + } + else + { + gtk_drag_finish (context, FALSE, context->action == GDK_ACTION_MOVE, time); + } + } + + g_free (name); +} + +static gboolean +toolbar_drag_drop_cb (GtkToolbar *toolbar, + GdkDragContext *context, + gint x, + gint y, + guint time, + EggEditableToolbar *etoolbar) +{ + GdkAtom target; + + target = gtk_drag_dest_find_target (GTK_WIDGET (toolbar), context, NULL); + if (target != GDK_NONE) + { + gtk_drag_get_data (GTK_WIDGET (toolbar), context, target, time); + return TRUE; + } + + return FALSE; +} + +static gboolean +toolbar_drag_motion_cb (GtkToolbar *toolbar, + GdkDragContext *context, + gint x, + gint y, + guint time, + EggEditableToolbar *etoolbar) +{ + GdkAtom target = gtk_drag_dest_find_target (GTK_WIDGET (toolbar), context, NULL); + if (target == GDK_NONE) + { + gdk_drag_status (context, 0, time); + return FALSE; + } + + /* Make ourselves the current dnd toolbar, and request a highlight item. */ + if (etoolbar->priv->dnd_toolbar != toolbar) + { + etoolbar->priv->dnd_toolbar = toolbar; + etoolbar->priv->dnd_toolitem = NULL; + etoolbar->priv->dnd_pending++; + gtk_drag_get_data (GTK_WIDGET (toolbar), context, target, time); + } + + /* If a highlight item is available, use it. */ + else if (etoolbar->priv->dnd_toolitem) + { + gint ipos = gtk_toolbar_get_drop_index (etoolbar->priv->dnd_toolbar, x, y); + gtk_toolbar_set_drop_highlight_item (etoolbar->priv->dnd_toolbar, + etoolbar->priv->dnd_toolitem, ipos); + } + + gdk_drag_status (context, context->suggested_action, time); + + return TRUE; +} + +static void +toolbar_drag_leave_cb (GtkToolbar *toolbar, + GdkDragContext *context, + guint time, + EggEditableToolbar *etoolbar) +{ + gtk_toolbar_set_drop_highlight_item (toolbar, NULL, 0); + + /* If we were the current dnd toolbar target, remove the item. */ + if (etoolbar->priv->dnd_toolbar == toolbar) + { + etoolbar->priv->dnd_toolbar = NULL; + etoolbar->priv->dnd_toolitem = NULL; + } +} + +static void +configure_drag_dest (EggEditableToolbar *etoolbar, + GtkToolbar *toolbar) +{ + EggToolbarsItemType *type; + GtkTargetList *targets; + GList *list; + + /* Make every toolbar able to receive drag-drops. */ + gtk_drag_dest_set (GTK_WIDGET (toolbar), 0, + dest_drag_types, G_N_ELEMENTS (dest_drag_types), + GDK_ACTION_MOVE | GDK_ACTION_COPY); + + /* Add any specialist drag-drop abilities. */ + targets = gtk_drag_dest_get_target_list (GTK_WIDGET (toolbar)); + list = egg_toolbars_model_get_types (etoolbar->priv->model); + while (list) + { + type = list->data; + if (type->new_name != NULL || type->get_name != NULL) + gtk_target_list_add (targets, type->type, 0, 0); + list = list->next; + } +} + +static void +toggled_visibility_cb (GtkToggleAction *action, + EggEditableToolbar *etoolbar) +{ + EggEditableToolbarPrivate *priv = etoolbar->priv; + GtkWidget *dock; + EggTbModelFlags flags; + gboolean visible; + gint i; + + visible = gtk_toggle_action_get_active (action); + for (i = 0; i < priv->visibility_actions->len; i++) + if (g_ptr_array_index (priv->visibility_actions, i) == action) + break; + + g_return_if_fail (i < priv->visibility_actions->len); + + dock = get_dock_nth (etoolbar, i); + if (visible) + { + gtk_widget_show (dock); + } + else + { + gtk_widget_hide (dock); + } + + if (priv->save_hidden) + { + flags = egg_toolbars_model_get_flags (priv->model, i); + + if (visible) + { + flags &= ~(EGG_TB_MODEL_HIDDEN); + } + else + { + flags |= (EGG_TB_MODEL_HIDDEN); + } + + egg_toolbars_model_set_flags (priv->model, i, flags); + } +} + +static void +toolbar_visibility_refresh (EggEditableToolbar *etoolbar) +{ + EggEditableToolbarPrivate *priv = etoolbar->priv; + gint n_toolbars, n_items, i, j, k; + GtkToggleAction *action; + GList *list; + GString *string; + gboolean showing; + char action_name[40]; + char *action_label; + char *tmp; + + if (priv == NULL || priv->model == NULL || priv->manager == NULL || + priv->visibility_paths == NULL || priv->actions == NULL) + { + return; + } + + if (priv->visibility_actions == NULL) + { + priv->visibility_actions = g_ptr_array_new (); + } + + if (priv->visibility_id != 0) + { + gtk_ui_manager_remove_ui (priv->manager, priv->visibility_id); + } + + priv->visibility_id = gtk_ui_manager_new_merge_id (priv->manager); + + showing = gtk_widget_get_visible (GTK_WIDGET (etoolbar)); + + n_toolbars = egg_toolbars_model_n_toolbars (priv->model); + for (i = 0; i < n_toolbars; i++) + { + string = g_string_sized_new (0); + n_items = egg_toolbars_model_n_items (priv->model, i); + for (k = 0, j = 0; j < n_items; j++) + { + GValue value = { 0, }; + GtkAction *action; + const char *name; + + name = egg_toolbars_model_item_nth (priv->model, i, j); + if (name == NULL) continue; + action = find_action (etoolbar, name); + if (action == NULL) continue; + + g_value_init (&value, G_TYPE_STRING); + g_object_get_property (G_OBJECT (action), "label", &value); + name = g_value_get_string (&value); + if (name == NULL) + { + g_value_unset (&value); + continue; + } + k += g_utf8_strlen (name, -1) + 2; + if (j > 0) + { + g_string_append (string, ", "); + if (j > 1 && k > 25) + { + g_value_unset (&value); + break; + } + } + g_string_append (string, name); + g_value_unset (&value); + } + if (j < n_items) + { + g_string_append (string, " ..."); + } + + tmp = g_string_free (string, FALSE); + for (j = 0, k = 0; tmp[j]; j++) + { + if (tmp[j] == '_') continue; + tmp[k] = tmp[j]; + k++; + } + tmp[k] = 0; + /* Translaters: This string is for a toggle to display a toolbar. + * The name of the toolbar is automatically computed from the widgets + * on the toolbar, and is placed at the %s. Note the _ before the %s + * which is used to add mnemonics. We know that this is likely to + * produce duplicates, but don't worry about it. If your language + * normally has a mnemonic at the start, please use the _. If not, + * please remove. */ + action_label = g_strdup_printf (_("Show “_%s”"), tmp); + g_free (tmp); + + sprintf(action_name, "ToolbarToggle%d", i); + + if (i >= priv->visibility_actions->len) + { + action = gtk_toggle_action_new (action_name, action_label, NULL, NULL); + g_ptr_array_add (priv->visibility_actions, action); + g_signal_connect_object (action, "toggled", + G_CALLBACK (toggled_visibility_cb), + etoolbar, 0); + gtk_action_group_add_action (priv->actions, GTK_ACTION (action)); + } + else + { + action = g_ptr_array_index (priv->visibility_actions, i); + g_object_set (action, "label", action_label, NULL); + } + + gtk_action_set_visible (GTK_ACTION (action), (egg_toolbars_model_get_flags (priv->model, i) + & EGG_TB_MODEL_NOT_REMOVABLE) == 0); + gtk_action_set_sensitive (GTK_ACTION (action), showing); + gtk_toggle_action_set_active (action, gtk_widget_get_visible + (get_dock_nth (etoolbar, i))); + + for (list = priv->visibility_paths; list != NULL; list = g_list_next (list)) + { + gtk_ui_manager_add_ui (priv->manager, priv->visibility_id, + (const char *)list->data, action_name, action_name, + GTK_UI_MANAGER_MENUITEM, FALSE); + } + + g_free (action_label); + } + + gtk_ui_manager_ensure_update (priv->manager); + + while (i < priv->visibility_actions->len) + { + action = g_ptr_array_index (priv->visibility_actions, i); + g_ptr_array_remove_index_fast (priv->visibility_actions, i); + gtk_action_group_remove_action (priv->actions, GTK_ACTION (action)); + i++; + } +} + +static GtkWidget * +create_dock (EggEditableToolbar *etoolbar) +{ + GtkWidget *toolbar, *hbox; + + hbox = gtk_hbox_new (0, FALSE); + + toolbar = gtk_toolbar_new (); + gtk_toolbar_set_show_arrow (GTK_TOOLBAR (toolbar), TRUE); + gtk_widget_show (toolbar); + gtk_box_pack_start (GTK_BOX (hbox), toolbar, TRUE, TRUE, 0); + + g_signal_connect (toolbar, "drag_drop", + G_CALLBACK (toolbar_drag_drop_cb), etoolbar); + g_signal_connect (toolbar, "drag_motion", + G_CALLBACK (toolbar_drag_motion_cb), etoolbar); + g_signal_connect (toolbar, "drag_leave", + G_CALLBACK (toolbar_drag_leave_cb), etoolbar); + + g_signal_connect (toolbar, "drag_data_received", + G_CALLBACK (toolbar_drag_data_received_cb), etoolbar); + g_signal_connect (toolbar, "popup_context_menu", + G_CALLBACK (popup_context_menu_cb), etoolbar); + + configure_drag_dest (etoolbar, GTK_TOOLBAR (toolbar)); + + return hbox; +} + +static void +set_fixed_style (EggEditableToolbar *t, GtkToolbarStyle style) +{ + g_return_if_fail (GTK_IS_TOOLBAR (t->priv->fixed_toolbar)); + gtk_toolbar_set_style (GTK_TOOLBAR (t->priv->fixed_toolbar), + style == GTK_TOOLBAR_ICONS ? GTK_TOOLBAR_BOTH_HORIZ : style); +} + +static void +unset_fixed_style (EggEditableToolbar *t) +{ + g_return_if_fail (GTK_IS_TOOLBAR (t->priv->fixed_toolbar)); + gtk_toolbar_unset_style (GTK_TOOLBAR (t->priv->fixed_toolbar)); +} + +static void +toolbar_changed_cb (EggToolbarsModel *model, + int position, + EggEditableToolbar *etoolbar) +{ + GtkWidget *toolbar; + EggTbModelFlags flags; + GtkToolbarStyle style; + + flags = egg_toolbars_model_get_flags (model, position); + toolbar = get_toolbar_nth (etoolbar, position); + + if (flags & EGG_TB_MODEL_ICONS) + { + style = GTK_TOOLBAR_ICONS; + } + else if (flags & EGG_TB_MODEL_TEXT) + { + style = GTK_TOOLBAR_TEXT; + } + else if (flags & EGG_TB_MODEL_BOTH) + { + style = GTK_TOOLBAR_BOTH; + } + else if (flags & EGG_TB_MODEL_BOTH_HORIZ) + { + style = GTK_TOOLBAR_BOTH_HORIZ; + } + else + { + gtk_toolbar_unset_style (GTK_TOOLBAR (toolbar)); + if (position == 0 && etoolbar->priv->fixed_toolbar) + { + unset_fixed_style (etoolbar); + } + return; + } + + gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), style); + if (position == 0 && etoolbar->priv->fixed_toolbar) + { + set_fixed_style (etoolbar, style); + } + + toolbar_visibility_refresh (etoolbar); +} + +static void +unparent_fixed (EggEditableToolbar *etoolbar) +{ + GtkWidget *toolbar, *dock; + g_return_if_fail (GTK_IS_TOOLBAR (etoolbar->priv->fixed_toolbar)); + + toolbar = etoolbar->priv->fixed_toolbar; + dock = get_dock_nth (etoolbar, 0); + + if (dock && gtk_widget_get_parent (toolbar) != NULL) + { + gtk_container_remove (GTK_CONTAINER (dock), toolbar); + } +} + +static void +update_fixed (EggEditableToolbar *etoolbar) +{ + GtkWidget *toolbar, *dock; + if (!etoolbar->priv->fixed_toolbar) return; + + toolbar = etoolbar->priv->fixed_toolbar; + dock = get_dock_nth (etoolbar, 0); + + if (dock && toolbar && gtk_widget_get_parent (toolbar) == NULL) + { + gtk_box_pack_end (GTK_BOX (dock), toolbar, FALSE, TRUE, 0); + + gtk_widget_show (toolbar); + + gtk_widget_set_size_request (dock, -1, -1); + gtk_widget_queue_resize_no_redraw (dock); + } +} + +static void +toolbar_added_cb (EggToolbarsModel *model, + int position, + EggEditableToolbar *etoolbar) +{ + GtkWidget *dock; + + dock = create_dock (etoolbar); + if ((egg_toolbars_model_get_flags (model, position) & EGG_TB_MODEL_HIDDEN) == 0) + gtk_widget_show (dock); + + gtk_widget_set_size_request (dock, -1, MIN_TOOLBAR_HEIGHT); + + gtk_box_pack_start (GTK_BOX (etoolbar), dock, TRUE, TRUE, 0); + + gtk_box_reorder_child (GTK_BOX (etoolbar), dock, position); + + gtk_widget_show_all (dock); + + update_fixed (etoolbar); + + toolbar_visibility_refresh (etoolbar); +} + +static void +toolbar_removed_cb (EggToolbarsModel *model, + int position, + EggEditableToolbar *etoolbar) +{ + GtkWidget *dock; + + if (position == 0 && etoolbar->priv->fixed_toolbar != NULL) + { + unparent_fixed (etoolbar); + } + + dock = get_dock_nth (etoolbar, position); + gtk_widget_destroy (dock); + + update_fixed (etoolbar); + + toolbar_visibility_refresh (etoolbar); +} + +static void +item_added_cb (EggToolbarsModel *model, + int tpos, + int ipos, + EggEditableToolbar *etoolbar) +{ + GtkWidget *dock; + GtkWidget *toolbar; + GtkToolItem *item; + + toolbar = get_toolbar_nth (etoolbar, tpos); + item = create_item_from_position (etoolbar, tpos, ipos); + if (item == NULL) return; + + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, ipos); + + connect_widget_signals (GTK_WIDGET (item), etoolbar); + configure_item_tooltip (item); + configure_item_cursor (item, etoolbar); + configure_item_sensitivity (item, etoolbar); + + dock = get_dock_nth (etoolbar, tpos); + gtk_widget_set_size_request (dock, -1, -1); + gtk_widget_queue_resize_no_redraw (dock); + + toolbar_visibility_refresh (etoolbar); +} + +static void +item_removed_cb (EggToolbarsModel *model, + int toolbar_position, + int position, + EggEditableToolbar *etoolbar) +{ + EggEditableToolbarPrivate *priv = etoolbar->priv; + + GtkWidget *toolbar; + GtkWidget *item; + + toolbar = get_toolbar_nth (etoolbar, toolbar_position); + item = GTK_WIDGET (gtk_toolbar_get_nth_item + (GTK_TOOLBAR (toolbar), position)); + g_return_if_fail (item != NULL); + + if (item == priv->selected) + { + /* FIXME */ + } + + gtk_container_remove (GTK_CONTAINER (toolbar), item); + + toolbar_visibility_refresh (etoolbar); +} + +static void +egg_editable_toolbar_build (EggEditableToolbar *etoolbar) +{ + int i, l, n_items, n_toolbars; + EggToolbarsModel *model = etoolbar->priv->model; + + g_return_if_fail (model != NULL); + g_return_if_fail (etoolbar->priv->manager != NULL); + + n_toolbars = egg_toolbars_model_n_toolbars (model); + + for (i = 0; i < n_toolbars; i++) + { + GtkWidget *toolbar, *dock; + + dock = create_dock (etoolbar); + if ((egg_toolbars_model_get_flags (model, i) & EGG_TB_MODEL_HIDDEN) == 0) + gtk_widget_show (dock); + gtk_box_pack_start (GTK_BOX (etoolbar), dock, TRUE, TRUE, 0); + toolbar = get_toolbar_nth (etoolbar, i); + + n_items = egg_toolbars_model_n_items (model, i); + for (l = 0; l < n_items; l++) + { + GtkToolItem *item; + + item = create_item_from_position (etoolbar, i, l); + if (item) + { + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, l); + + connect_widget_signals (GTK_WIDGET (item), etoolbar); + configure_item_tooltip (item); + configure_item_sensitivity (item, etoolbar); + } + else + { + egg_toolbars_model_remove_item (model, i, l); + l--; + n_items--; + } + } + + if (n_items == 0) + { + gtk_widget_set_size_request (dock, -1, MIN_TOOLBAR_HEIGHT); + } + } + + update_fixed (etoolbar); + + /* apply styles */ + for (i = 0; i < n_toolbars; i ++) + { + toolbar_changed_cb (model, i, etoolbar); + } +} + +static void +egg_editable_toolbar_disconnect_model (EggEditableToolbar *toolbar) +{ + EggToolbarsModel *model = toolbar->priv->model; + + g_signal_handlers_disconnect_by_func + (model, G_CALLBACK (item_added_cb), toolbar); + g_signal_handlers_disconnect_by_func + (model, G_CALLBACK (item_removed_cb), toolbar); + g_signal_handlers_disconnect_by_func + (model, G_CALLBACK (toolbar_added_cb), toolbar); + g_signal_handlers_disconnect_by_func + (model, G_CALLBACK (toolbar_removed_cb), toolbar); + g_signal_handlers_disconnect_by_func + (model, G_CALLBACK (toolbar_changed_cb), toolbar); +} + +static void +egg_editable_toolbar_deconstruct (EggEditableToolbar *toolbar) +{ + EggToolbarsModel *model = toolbar->priv->model; + GList *children; + + g_return_if_fail (model != NULL); + + if (toolbar->priv->fixed_toolbar) + { + unset_fixed_style (toolbar); + unparent_fixed (toolbar); + } + + children = gtk_container_get_children (GTK_CONTAINER (toolbar)); + g_list_foreach (children, (GFunc) gtk_widget_destroy, NULL); + g_list_free (children); +} + +void +egg_editable_toolbar_set_model (EggEditableToolbar *etoolbar, + EggToolbarsModel *model) +{ + EggEditableToolbarPrivate *priv = etoolbar->priv; + + if (priv->model == model) return; + + if (priv->model) + { + egg_editable_toolbar_disconnect_model (etoolbar); + egg_editable_toolbar_deconstruct (etoolbar); + + g_object_unref (priv->model); + } + + priv->model = g_object_ref (model); + + egg_editable_toolbar_build (etoolbar); + + toolbar_visibility_refresh (etoolbar); + + g_signal_connect (model, "item_added", + G_CALLBACK (item_added_cb), etoolbar); + g_signal_connect (model, "item_removed", + G_CALLBACK (item_removed_cb), etoolbar); + g_signal_connect (model, "toolbar_added", + G_CALLBACK (toolbar_added_cb), etoolbar); + g_signal_connect (model, "toolbar_removed", + G_CALLBACK (toolbar_removed_cb), etoolbar); + g_signal_connect (model, "toolbar_changed", + G_CALLBACK (toolbar_changed_cb), etoolbar); +} + +static void +egg_editable_toolbar_init (EggEditableToolbar *etoolbar) +{ + EggEditableToolbarPrivate *priv; + + priv = etoolbar->priv = EGG_EDITABLE_TOOLBAR_GET_PRIVATE (etoolbar); + + priv->save_hidden = TRUE; + + g_signal_connect (etoolbar, "notify::visible", + G_CALLBACK (toolbar_visibility_refresh), NULL); +} + +static void +egg_editable_toolbar_dispose (GObject *object) +{ + EggEditableToolbar *etoolbar = EGG_EDITABLE_TOOLBAR (object); + EggEditableToolbarPrivate *priv = etoolbar->priv; + GList *children; + + if (priv->fixed_toolbar != NULL) + { + g_object_unref (priv->fixed_toolbar); + priv->fixed_toolbar = NULL; + } + + if (priv->visibility_paths) + { + children = priv->visibility_paths; + g_list_foreach (children, (GFunc) g_free, NULL); + g_list_free (children); + priv->visibility_paths = NULL; + } + + g_free (priv->popup_path); + priv->popup_path = NULL; + + if (priv->manager != NULL) + { + if (priv->visibility_id) + { + gtk_ui_manager_remove_ui (priv->manager, priv->visibility_id); + priv->visibility_id = 0; + } + + g_object_unref (priv->manager); + priv->manager = NULL; + } + + if (priv->model) + { + egg_editable_toolbar_disconnect_model (etoolbar); + g_object_unref (priv->model); + priv->model = NULL; + } + + G_OBJECT_CLASS (egg_editable_toolbar_parent_class)->dispose (object); +} + +static void +egg_editable_toolbar_set_ui_manager (EggEditableToolbar *etoolbar, + GtkUIManager *manager) +{ + static const GtkActionEntry actions[] = { + { "MoveToolItem", STOCK_DRAG_MODE, N_("_Move on Toolbar"), NULL, + N_("Move the selected item on the toolbar"), G_CALLBACK (move_item_cb) }, + { "RemoveToolItem", GTK_STOCK_REMOVE, N_("_Remove from Toolbar"), NULL, + N_("Remove the selected item from the toolbar"), G_CALLBACK (remove_item_cb) }, + { "RemoveToolbar", GTK_STOCK_DELETE, N_("_Delete Toolbar"), NULL, + N_("Remove the selected toolbar"), G_CALLBACK (remove_toolbar_cb) }, + }; + + etoolbar->priv->manager = g_object_ref (manager); + + etoolbar->priv->actions = gtk_action_group_new ("ToolbarActions"); + gtk_action_group_set_translation_domain (etoolbar->priv->actions, GETTEXT_PACKAGE); + gtk_action_group_add_actions (etoolbar->priv->actions, actions, + G_N_ELEMENTS (actions), etoolbar); + gtk_ui_manager_insert_action_group (manager, etoolbar->priv->actions, -1); + g_object_unref (etoolbar->priv->actions); + + toolbar_visibility_refresh (etoolbar); +} + +GtkWidget * egg_editable_toolbar_get_selected (EggEditableToolbar *etoolbar) +{ + return etoolbar->priv->selected; +} + +void +egg_editable_toolbar_set_selected (EggEditableToolbar *etoolbar, + GtkWidget *widget) +{ + GtkWidget *toolbar, *toolitem; + gboolean editable; + + etoolbar->priv->selected = widget; + + toolbar = (widget != NULL) ? gtk_widget_get_ancestor (widget, GTK_TYPE_TOOLBAR) : NULL; + toolitem = (widget != NULL) ? gtk_widget_get_ancestor (widget, GTK_TYPE_TOOL_ITEM) : NULL; + + if(toolbar != NULL) + { + gint tpos = get_toolbar_position (etoolbar, toolbar); + editable = ((egg_toolbars_model_get_flags (etoolbar->priv->model, tpos) & EGG_TB_MODEL_NOT_EDITABLE) == 0); + } + else + { + editable = FALSE; + } + + gtk_action_set_visible (find_action (etoolbar, "RemoveToolbar"), (toolbar != NULL) && (etoolbar->priv->edit_mode > 0)); + gtk_action_set_visible (find_action (etoolbar, "RemoveToolItem"), (toolitem != NULL) && editable); + gtk_action_set_visible (find_action (etoolbar, "MoveToolItem"), (toolitem != NULL) && editable); +} + +static void +set_edit_mode (EggEditableToolbar *etoolbar, + gboolean mode) +{ + EggEditableToolbarPrivate *priv = etoolbar->priv; + int i, l, n_items; + + i = priv->edit_mode; + if (mode) + { + priv->edit_mode++; + } + else + { + g_return_if_fail (priv->edit_mode > 0); + priv->edit_mode--; + } + i *= priv->edit_mode; + + if (i == 0) + { + for (i = get_n_toolbars (etoolbar)-1; i >= 0; i--) + { + GtkWidget *toolbar; + + toolbar = get_toolbar_nth (etoolbar, i); + n_items = gtk_toolbar_get_n_items (GTK_TOOLBAR (toolbar)); + + if (n_items == 0 && priv->edit_mode == 0) + { + egg_toolbars_model_remove_toolbar (priv->model, i); + } + else + { + for (l = 0; l < n_items; l++) + { + GtkToolItem *item; + + item = gtk_toolbar_get_nth_item (GTK_TOOLBAR (toolbar), l); + + configure_item_cursor (item, etoolbar); + configure_item_sensitivity (item, etoolbar); + } + } + } + } +} + +static void +egg_editable_toolbar_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + EggEditableToolbar *etoolbar = EGG_EDITABLE_TOOLBAR (object); + + switch (prop_id) + { + case PROP_UI_MANAGER: + egg_editable_toolbar_set_ui_manager (etoolbar, g_value_get_object (value)); + break; + case PROP_TOOLBARS_MODEL: + egg_editable_toolbar_set_model (etoolbar, g_value_get_object (value)); + break; + case PROP_SELECTED: + egg_editable_toolbar_set_selected (etoolbar, g_value_get_object (value)); + break; + case PROP_POPUP_PATH: + etoolbar->priv->popup_path = g_strdup (g_value_get_string (value)); + break; + case PROP_EDIT_MODE: + set_edit_mode (etoolbar, g_value_get_boolean (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +egg_editable_toolbar_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + EggEditableToolbar *etoolbar = EGG_EDITABLE_TOOLBAR (object); + + switch (prop_id) + { + case PROP_UI_MANAGER: + g_value_set_object (value, etoolbar->priv->manager); + break; + case PROP_TOOLBARS_MODEL: + g_value_set_object (value, etoolbar->priv->model); + break; + case PROP_SELECTED: + g_value_set_object (value, etoolbar->priv->selected); + break; + case PROP_EDIT_MODE: + g_value_set_boolean (value, etoolbar->priv->edit_mode>0); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +egg_editable_toolbar_class_init (EggEditableToolbarClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = egg_editable_toolbar_dispose; + object_class->set_property = egg_editable_toolbar_set_property; + object_class->get_property = egg_editable_toolbar_get_property; + + egg_editable_toolbar_signals[ACTION_REQUEST] = + g_signal_new ("action_request", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EggEditableToolbarClass, action_request), + NULL, NULL, g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, 1, G_TYPE_STRING); + + g_object_class_install_property (object_class, + PROP_UI_MANAGER, + g_param_spec_object ("ui-manager", + "UI-Mmanager", + "UI Manager", + GTK_TYPE_UI_MANAGER, + G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + g_object_class_install_property (object_class, + PROP_TOOLBARS_MODEL, + g_param_spec_object ("model", + "Model", + "Toolbars Model", + EGG_TYPE_TOOLBARS_MODEL, + G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + g_object_class_install_property (object_class, + PROP_SELECTED, + g_param_spec_object ("selected", + "Selected", + "Selected toolitem", + GTK_TYPE_TOOL_ITEM, + G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + + g_object_class_install_property (object_class, + PROP_POPUP_PATH, + g_param_spec_string ("popup-path", + "popup-path", + "popup-path", + NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + + g_object_class_install_property (object_class, + PROP_EDIT_MODE, + g_param_spec_boolean ("edit-mode", + "Edit-Mode", + "Edit Mode", + FALSE, + G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + + g_type_class_add_private (object_class, sizeof (EggEditableToolbarPrivate)); +} + +GtkWidget * +egg_editable_toolbar_new (GtkUIManager *manager, + const char *popup_path) +{ + return GTK_WIDGET (g_object_new (EGG_TYPE_EDITABLE_TOOLBAR, + "ui-manager", manager, + "popup-path", popup_path, + NULL)); +} + +GtkWidget * +egg_editable_toolbar_new_with_model (GtkUIManager *manager, + EggToolbarsModel *model, + const char *popup_path) +{ + return GTK_WIDGET (g_object_new (EGG_TYPE_EDITABLE_TOOLBAR, + "ui-manager", manager, + "model", model, + "popup-path", popup_path, + NULL)); +} + +gboolean +egg_editable_toolbar_get_edit_mode (EggEditableToolbar *etoolbar) +{ + EggEditableToolbarPrivate *priv = etoolbar->priv; + + return priv->edit_mode > 0; +} + +void +egg_editable_toolbar_set_edit_mode (EggEditableToolbar *etoolbar, + gboolean mode) +{ + set_edit_mode (etoolbar, mode); + g_object_notify (G_OBJECT (etoolbar), "edit-mode"); +} + +void +egg_editable_toolbar_add_visibility (EggEditableToolbar *etoolbar, + const char *path) +{ + etoolbar->priv->visibility_paths = g_list_prepend + (etoolbar->priv->visibility_paths, g_strdup (path)); +} + +void +egg_editable_toolbar_show (EggEditableToolbar *etoolbar, + const char *name) +{ + EggEditableToolbarPrivate *priv = etoolbar->priv; + EggToolbarsModel *model = priv->model; + int i, n_toolbars; + + n_toolbars = egg_toolbars_model_n_toolbars (model); + for (i = 0; i < n_toolbars; i++) + { + const char *toolbar_name; + + toolbar_name = egg_toolbars_model_toolbar_nth (model, i); + if (strcmp (toolbar_name, name) == 0) + { + gtk_widget_show (get_dock_nth (etoolbar, i)); + } + } +} + +void +egg_editable_toolbar_hide (EggEditableToolbar *etoolbar, + const char *name) +{ + EggEditableToolbarPrivate *priv = etoolbar->priv; + EggToolbarsModel *model = priv->model; + int i, n_toolbars; + + n_toolbars = egg_toolbars_model_n_toolbars (model); + for (i = 0; i < n_toolbars; i++) + { + const char *toolbar_name; + + toolbar_name = egg_toolbars_model_toolbar_nth (model, i); + if (strcmp (toolbar_name, name) == 0) + { + gtk_widget_hide (get_dock_nth (etoolbar, i)); + } + } +} + +void +egg_editable_toolbar_set_fixed (EggEditableToolbar *etoolbar, + GtkToolbar *toolbar) +{ + EggEditableToolbarPrivate *priv = etoolbar->priv; + + g_return_if_fail (!toolbar || GTK_IS_TOOLBAR (toolbar)); + + if (priv->fixed_toolbar) + { + unparent_fixed (etoolbar); + g_object_unref (priv->fixed_toolbar); + priv->fixed_toolbar = NULL; + } + + if (toolbar) + { + priv->fixed_toolbar = GTK_WIDGET (toolbar); + gtk_toolbar_set_show_arrow (toolbar, FALSE); + g_object_ref_sink (toolbar); + } + + update_fixed (etoolbar); +} + +#define DEFAULT_ICON_HEIGHT 20 + +/* We should probably experiment some more with this. + * Right now the rendered icon is pretty good for most + * themes. However, the icon is slightly large for themes + * with large toolbar icons. + */ +static GdkPixbuf * +new_pixbuf_from_widget (GtkWidget *widget) +{ + GtkWidget *window; + GdkPixbuf *pixbuf; + gint icon_height; + GdkScreen *screen; + + screen = gtk_widget_get_screen (widget); + + if (!gtk_icon_size_lookup_for_settings (gtk_settings_get_for_screen (screen), + GTK_ICON_SIZE_LARGE_TOOLBAR, + NULL, + &icon_height)) + { + icon_height = DEFAULT_ICON_HEIGHT; + } + + window = gtk_offscreen_window_new (); + /* Set the width to -1 as we want the separator to be as thin as possible. */ + gtk_widget_set_size_request (widget, -1, icon_height); + gtk_container_add (GTK_CONTAINER (window), widget); + gtk_widget_show_all (window); + + /* Process the waiting events to have the widget actually drawn */ + gdk_window_process_updates (gtk_widget_get_window (window), TRUE); + pixbuf = gtk_offscreen_window_get_pixbuf (GTK_OFFSCREEN_WINDOW (window)); + gtk_widget_destroy (window); + + return pixbuf; +} + +static GdkPixbuf * +new_separator_pixbuf (void) +{ + GtkWidget *separator; + GdkPixbuf *pixbuf; + + separator = gtk_vseparator_new (); + pixbuf = new_pixbuf_from_widget (separator); + return pixbuf; +} + +static void +update_separator_image (GtkImage *image) +{ + GdkPixbuf *pixbuf = new_separator_pixbuf (); + gtk_image_set_from_pixbuf (GTK_IMAGE (image), pixbuf); + g_object_unref (pixbuf); +} + +static gboolean +style_set_cb (GtkWidget *widget, + GtkStyle *previous_style, + GtkImage *image) +{ + + update_separator_image (image); + return FALSE; +} + +GtkWidget * +_egg_editable_toolbar_new_separator_image (void) +{ + GtkWidget *image = gtk_image_new (); + update_separator_image (GTK_IMAGE (image)); + g_signal_connect (G_OBJECT (image), "style_set", + G_CALLBACK (style_set_cb), GTK_IMAGE (image)); + + return image; +} + +EggToolbarsModel * +egg_editable_toolbar_get_model (EggEditableToolbar *etoolbar) +{ + return etoolbar->priv->model; +} diff --git a/cut-n-paste/toolbar-editor/egg-editable-toolbar.h b/cut-n-paste/toolbar-editor/egg-editable-toolbar.h new file mode 100644 index 0000000..12ce2aa --- /dev/null +++ b/cut-n-paste/toolbar-editor/egg-editable-toolbar.h @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2003, 2004 Marco Pesenti Gritti + * Copyright (C) 2003, 2004, 2005 Christian Persch + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id: egg-editable-toolbar.h 891 2008-08-08 21:14:52Z friemann $ + */ + +#ifndef EGG_EDITABLE_TOOLBAR_H +#define EGG_EDITABLE_TOOLBAR_H + +#include "egg-toolbars-model.h" + +#include <gtk/gtk.h> + +G_BEGIN_DECLS + +#define EGG_TYPE_EDITABLE_TOOLBAR (egg_editable_toolbar_get_type ()) +#define EGG_EDITABLE_TOOLBAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_EDITABLE_TOOLBAR, EggEditableToolbar)) +#define EGG_EDITABLE_TOOLBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_EDITABLE_TOOLBAR, EggEditableToolbarClass)) +#define EGG_IS_EDITABLE_TOOLBAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_EDITABLE_TOOLBAR)) +#define EGG_IS_EDITABLE_TOOLBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_EDITABLE_TOOLBAR)) +#define EGG_EDITABLE_TOOLBAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_EDITABLE_TOOLBAR, EggEditableToolbarClass)) + +typedef struct _EggEditableToolbar EggEditableToolbar; +typedef struct _EggEditableToolbarPrivate EggEditableToolbarPrivate; +typedef struct _EggEditableToolbarClass EggEditableToolbarClass; + +struct _EggEditableToolbar +{ + GtkVBox parent_object; + + /*< private >*/ + EggEditableToolbarPrivate *priv; +}; + +struct _EggEditableToolbarClass +{ + GtkVBoxClass parent_class; + + void (* action_request) (EggEditableToolbar *etoolbar, + const char *action_name); +}; + +GType egg_editable_toolbar_get_type (void); +GtkWidget *egg_editable_toolbar_new (GtkUIManager *manager, + const char *visibility_path); +GtkWidget *egg_editable_toolbar_new_with_model (GtkUIManager *manager, + EggToolbarsModel *model, + const char *visibility_path); +void egg_editable_toolbar_set_model (EggEditableToolbar *etoolbar, + EggToolbarsModel *model); +EggToolbarsModel *egg_editable_toolbar_get_model (EggEditableToolbar *etoolbar); +GtkUIManager *egg_editable_toolbar_get_manager (EggEditableToolbar *etoolbar); +void egg_editable_toolbar_set_edit_mode (EggEditableToolbar *etoolbar, + gboolean mode); +gboolean egg_editable_toolbar_get_edit_mode (EggEditableToolbar *etoolbar); +void egg_editable_toolbar_show (EggEditableToolbar *etoolbar, + const char *name); +void egg_editable_toolbar_hide (EggEditableToolbar *etoolbar, + const char *name); +void egg_editable_toolbar_set_fixed (EggEditableToolbar *etoolbar, + GtkToolbar *fixed_toolbar); + +GtkWidget * egg_editable_toolbar_get_selected (EggEditableToolbar *etoolbar); +void egg_editable_toolbar_set_selected (EggEditableToolbar *etoolbar, + GtkWidget *widget); + +void egg_editable_toolbar_add_visibility (EggEditableToolbar *etoolbar, + const char *path); + +/* Private Functions */ + +GtkWidget *_egg_editable_toolbar_new_separator_image (void); + +G_END_DECLS + +#endif diff --git a/cut-n-paste/toolbar-editor/egg-toolbar-editor.c b/cut-n-paste/toolbar-editor/egg-toolbar-editor.c new file mode 100644 index 0000000..7ee7f45 --- /dev/null +++ b/cut-n-paste/toolbar-editor/egg-toolbar-editor.c @@ -0,0 +1,671 @@ +/* + * Copyright (C) 2003 Marco Pesenti Gritti + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id: egg-toolbar-editor.c 929 2009-02-19 14:49:56Z friemann $ + */ + +#include "config.h" + +#include "egg-toolbar-editor.h" +#include "egg-editable-toolbar.h" + +#include <string.h> +#include <libxml/tree.h> +#include <gtk/gtk.h> +#include <glib/gi18n.h> + +static const GtkTargetEntry dest_drag_types[] = { + {EGG_TOOLBAR_ITEM_TYPE, GTK_TARGET_SAME_APP, 0}, +}; + +static const GtkTargetEntry source_drag_types[] = { + {EGG_TOOLBAR_ITEM_TYPE, GTK_TARGET_SAME_APP, 0}, +}; + + +static void egg_toolbar_editor_finalize (GObject *object); +static void update_editor_sheet (EggToolbarEditor *editor); + +enum +{ + PROP_0, + PROP_UI_MANAGER, + PROP_TOOLBARS_MODEL +}; + +enum +{ + SIGNAL_HANDLER_ITEM_ADDED, + SIGNAL_HANDLER_ITEM_REMOVED, + SIGNAL_HANDLER_TOOLBAR_REMOVED, + SIGNAL_HANDLER_LIST_SIZE /* Array size */ +}; + +#define EGG_TOOLBAR_EDITOR_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EGG_TYPE_TOOLBAR_EDITOR, EggToolbarEditorPrivate)) + +struct EggToolbarEditorPrivate +{ + GtkUIManager *manager; + EggToolbarsModel *model; + + GtkWidget *table; + GtkWidget *scrolled_window; + GList *actions_list; + GList *factory_list; + + /* These handlers need to be sanely disconnected when switching models */ + gulong sig_handlers[SIGNAL_HANDLER_LIST_SIZE]; +}; + +G_DEFINE_TYPE (EggToolbarEditor, egg_toolbar_editor, GTK_TYPE_VBOX); + +static gint +compare_items (gconstpointer a, + gconstpointer b) +{ + const GtkWidget *item1 = a; + const GtkWidget *item2 = b; + + char *key1 = g_object_get_data (G_OBJECT (item1), + "egg-collate-key"); + char *key2 = g_object_get_data (G_OBJECT (item2), + "egg-collate-key"); + + return strcmp (key1, key2); +} + +static GtkAction * +find_action (EggToolbarEditor *t, + const char *name) +{ + GList *l; + GtkAction *action = NULL; + + l = gtk_ui_manager_get_action_groups (t->priv->manager); + + g_return_val_if_fail (EGG_IS_TOOLBAR_EDITOR (t), NULL); + g_return_val_if_fail (name != NULL, NULL); + + for (; l != NULL; l = l->next) + { + GtkAction *tmp; + + tmp = gtk_action_group_get_action (GTK_ACTION_GROUP (l->data), name); + if (tmp) + action = tmp; + } + + return action; +} + +static void +egg_toolbar_editor_set_ui_manager (EggToolbarEditor *t, + GtkUIManager *manager) +{ + g_return_if_fail (GTK_IS_UI_MANAGER (manager)); + + t->priv->manager = g_object_ref (manager); +} + +static void +item_added_or_removed_cb (EggToolbarsModel *model, + int tpos, + int ipos, + EggToolbarEditor *editor) +{ + update_editor_sheet (editor); +} + +static void +toolbar_removed_cb (EggToolbarsModel *model, + int position, + EggToolbarEditor *editor) +{ + update_editor_sheet (editor); +} + +static void +egg_toolbar_editor_disconnect_model (EggToolbarEditor *t) +{ + EggToolbarEditorPrivate *priv = t->priv; + EggToolbarsModel *model = priv->model; + gulong handler; + int i; + + for (i = 0; i < SIGNAL_HANDLER_LIST_SIZE; i++) + { + handler = priv->sig_handlers[i]; + + if (handler != 0) + { + if (g_signal_handler_is_connected (model, handler)) + { + g_signal_handler_disconnect (model, handler); + } + + priv->sig_handlers[i] = 0; + } + } +} + +void +egg_toolbar_editor_set_model (EggToolbarEditor *t, + EggToolbarsModel *model) +{ + EggToolbarEditorPrivate *priv; + + g_return_if_fail (EGG_IS_TOOLBAR_EDITOR (t)); + g_return_if_fail (model != NULL); + + priv = t->priv; + + if (priv->model) + { + if (G_UNLIKELY (priv->model == model)) return; + + egg_toolbar_editor_disconnect_model (t); + g_object_unref (priv->model); + } + + priv->model = g_object_ref (model); + + update_editor_sheet (t); + + priv->sig_handlers[SIGNAL_HANDLER_ITEM_ADDED] = + g_signal_connect_object (model, "item_added", + G_CALLBACK (item_added_or_removed_cb), t, 0); + priv->sig_handlers[SIGNAL_HANDLER_ITEM_REMOVED] = + g_signal_connect_object (model, "item_removed", + G_CALLBACK (item_added_or_removed_cb), t, 0); + priv->sig_handlers[SIGNAL_HANDLER_TOOLBAR_REMOVED] = + g_signal_connect_object (model, "toolbar_removed", + G_CALLBACK (toolbar_removed_cb), t, 0); +} + +static void +egg_toolbar_editor_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + EggToolbarEditor *t = EGG_TOOLBAR_EDITOR (object); + + switch (prop_id) + { + case PROP_UI_MANAGER: + egg_toolbar_editor_set_ui_manager (t, g_value_get_object (value)); + break; + case PROP_TOOLBARS_MODEL: + egg_toolbar_editor_set_model (t, g_value_get_object (value)); + break; + } +} + +static void +egg_toolbar_editor_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + EggToolbarEditor *t = EGG_TOOLBAR_EDITOR (object); + + switch (prop_id) + { + case PROP_UI_MANAGER: + g_value_set_object (value, t->priv->manager); + break; + case PROP_TOOLBARS_MODEL: + g_value_set_object (value, t->priv->model); + break; + } +} + +static void +egg_toolbar_editor_class_init (EggToolbarEditorClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = egg_toolbar_editor_finalize; + object_class->set_property = egg_toolbar_editor_set_property; + object_class->get_property = egg_toolbar_editor_get_property; + + g_object_class_install_property (object_class, + PROP_UI_MANAGER, + g_param_spec_object ("ui-manager", + "UI-Manager", + "UI Manager", + GTK_TYPE_UI_MANAGER, + G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (object_class, + PROP_TOOLBARS_MODEL, + g_param_spec_object ("model", + "Model", + "Toolbars Model", + EGG_TYPE_TOOLBARS_MODEL, + G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | + G_PARAM_CONSTRUCT)); + + g_type_class_add_private (object_class, sizeof (EggToolbarEditorPrivate)); +} + +static void +egg_toolbar_editor_finalize (GObject *object) +{ + EggToolbarEditor *editor = EGG_TOOLBAR_EDITOR (object); + + if (editor->priv->manager) + { + g_object_unref (editor->priv->manager); + } + + if (editor->priv->model) + { + egg_toolbar_editor_disconnect_model (editor); + g_object_unref (editor->priv->model); + } + + g_list_free (editor->priv->actions_list); + g_list_free (editor->priv->factory_list); + + G_OBJECT_CLASS (egg_toolbar_editor_parent_class)->finalize (object); +} + +GtkWidget * +egg_toolbar_editor_new (GtkUIManager *manager, + EggToolbarsModel *model) +{ + return GTK_WIDGET (g_object_new (EGG_TYPE_TOOLBAR_EDITOR, + "ui-manager", manager, + "model", model, + NULL)); +} + +static void +drag_begin_cb (GtkWidget *widget, + GdkDragContext *context) +{ + gtk_widget_hide (widget); +} + +static void +drag_end_cb (GtkWidget *widget, + GdkDragContext *context) +{ + gtk_widget_show (widget); +} + +static void +drag_data_get_cb (GtkWidget *widget, + GdkDragContext *context, + GtkSelectionData *selection_data, + guint info, + guint32 time, + EggToolbarEditor *editor) +{ + const char *target; + + target = g_object_get_data (G_OBJECT (widget), "egg-item-name"); + g_return_if_fail (target != NULL); + + gtk_selection_data_set (selection_data, gtk_selection_data_get_target (selection_data), 8, + (const guchar *) target, strlen (target)); +} + +static gchar * +elide_underscores (const gchar *original) +{ + gchar *q, *result; + const gchar *p; + gboolean last_underscore; + + q = result = g_malloc (strlen (original) + 1); + last_underscore = FALSE; + + for (p = original; *p; p++) + { + if (!last_underscore && *p == '_') + last_underscore = TRUE; + else + { + last_underscore = FALSE; + *q++ = *p; + } + } + + *q = '\0'; + + return result; +} + +static void +set_drag_cursor (GtkWidget *widget) +{ + GdkCursor *cursor; + GdkScreen *screen; + + screen = gtk_widget_get_screen (widget); + + cursor = gdk_cursor_new_for_display (gdk_screen_get_display (screen), + GDK_HAND2); + gdk_window_set_cursor (gtk_widget_get_window (widget), cursor); + gdk_cursor_unref (cursor); +} + +static void +event_box_realize_cb (GtkWidget *widget, GtkImage *icon) +{ + GtkImageType type; + + set_drag_cursor (widget); + + type = gtk_image_get_storage_type (icon); + if (type == GTK_IMAGE_STOCK) + { + gchar *stock_id; + GdkPixbuf *pixbuf; + + gtk_image_get_stock (icon, &stock_id, NULL); + pixbuf = gtk_widget_render_icon (widget, stock_id, + GTK_ICON_SIZE_LARGE_TOOLBAR, NULL); + gtk_drag_source_set_icon_pixbuf (widget, pixbuf); + g_object_unref (pixbuf); + } + else if (type == GTK_IMAGE_ICON_NAME) + { + const gchar *icon_name; + GdkScreen *screen; + GtkIconTheme *icon_theme; + GtkSettings *settings; + gint width, height; + GdkPixbuf *pixbuf; + + gtk_image_get_icon_name (icon, &icon_name, NULL); + screen = gtk_widget_get_screen (widget); + icon_theme = gtk_icon_theme_get_for_screen (screen); + settings = gtk_settings_get_for_screen (screen); + + if (!gtk_icon_size_lookup_for_settings (settings, + GTK_ICON_SIZE_LARGE_TOOLBAR, + &width, &height)) + { + width = height = 24; + } + + pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name, + MIN (width, height), 0, NULL); + if (G_UNLIKELY (!pixbuf)) + return; + + gtk_drag_source_set_icon_pixbuf (widget, pixbuf); + g_object_unref (pixbuf); + + } + else if (type == GTK_IMAGE_PIXBUF) + { + GdkPixbuf *pixbuf = gtk_image_get_pixbuf (icon); + gtk_drag_source_set_icon_pixbuf (widget, pixbuf); + } +} + +static GtkWidget * +editor_create_item (EggToolbarEditor *editor, + GtkImage *icon, + const char *label_text, + GdkDragAction action) +{ + GtkWidget *event_box; + GtkWidget *vbox; + GtkWidget *label; + gchar *label_no_mnemonic = NULL; + + event_box = gtk_event_box_new (); + gtk_event_box_set_visible_window (GTK_EVENT_BOX (event_box), FALSE); + gtk_widget_show (event_box); + gtk_drag_source_set (event_box, + GDK_BUTTON1_MASK, + source_drag_types, G_N_ELEMENTS (source_drag_types), action); + g_signal_connect (event_box, "drag_data_get", + G_CALLBACK (drag_data_get_cb), editor); + g_signal_connect_after (event_box, "realize", + G_CALLBACK (event_box_realize_cb), icon); + + if (action == GDK_ACTION_MOVE) + { + g_signal_connect (event_box, "drag_begin", + G_CALLBACK (drag_begin_cb), NULL); + g_signal_connect (event_box, "drag_end", + G_CALLBACK (drag_end_cb), NULL); + } + + vbox = gtk_vbox_new (0, FALSE); + gtk_widget_show (vbox); + gtk_container_add (GTK_CONTAINER (event_box), vbox); + + gtk_widget_show (GTK_WIDGET (icon)); + gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (icon), FALSE, TRUE, 0); + label_no_mnemonic = elide_underscores (label_text); + label = gtk_label_new (label_no_mnemonic); + g_free (label_no_mnemonic); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0); + + return event_box; +} + +static GtkWidget * +editor_create_item_from_name (EggToolbarEditor *editor, + const char * name, + GdkDragAction drag_action) +{ + GtkWidget *item; + const char *item_name; + char *short_label; + const char *collate_key; + + if (strcmp (name, "_separator") == 0) + { + GtkWidget *icon; + + icon = _egg_editable_toolbar_new_separator_image (); + short_label = _("Separator"); + item_name = g_strdup (name); + collate_key = g_utf8_collate_key (short_label, -1); + item = editor_create_item (editor, GTK_IMAGE (icon), + short_label, drag_action); + } + else + { + GtkAction *action; + GtkWidget *icon; + char *stock_id, *icon_name = NULL; + + action = find_action (editor, name); + g_return_val_if_fail (action != NULL, NULL); + + g_object_get (action, + "icon-name", &icon_name, + "stock-id", &stock_id, + "short-label", &short_label, + NULL); + + /* This is a workaround to catch named icons. */ + if (icon_name) + icon = gtk_image_new_from_icon_name (icon_name, + GTK_ICON_SIZE_LARGE_TOOLBAR); + else + icon = gtk_image_new_from_stock (stock_id ? stock_id : GTK_STOCK_DND, + GTK_ICON_SIZE_LARGE_TOOLBAR); + + item_name = g_strdup (name); + collate_key = g_utf8_collate_key (short_label, -1); + item = editor_create_item (editor, GTK_IMAGE (icon), + short_label, drag_action); + + g_free (short_label); + g_free (stock_id); + g_free (icon_name); + } + + g_object_set_data_full (G_OBJECT (item), "egg-collate-key", + (gpointer) collate_key, g_free); + g_object_set_data_full (G_OBJECT (item), "egg-item-name", + (gpointer) item_name, g_free); + + return item; +} + +static gint +append_table (GtkTable *table, GList *items, gint y, gint width) +{ + if (items != NULL) + { + gint x = 0, height; + GtkWidget *alignment; + GtkWidget *item; + + height = g_list_length (items) / width + 1; + gtk_table_resize (table, height, width); + + if (y > 0) + { + item = gtk_hseparator_new (); + alignment = gtk_alignment_new (0.5, 0.5, 1.0, 0.0); + gtk_container_add (GTK_CONTAINER (alignment), item); + gtk_widget_show (alignment); + gtk_widget_show (item); + + gtk_table_attach_defaults (table, alignment, 0, width, y-1, y+1); + } + + for (; items != NULL; items = items->next) + { + item = items->data; + alignment = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + gtk_container_add (GTK_CONTAINER (alignment), item); + gtk_widget_show (alignment); + gtk_widget_show (item); + + if (x >= width) + { + x = 0; + y++; + } + gtk_table_attach_defaults (table, alignment, x, x+1, y, y+1); + x++; + } + + y++; + } + return y; +} + +static void +update_editor_sheet (EggToolbarEditor *editor) +{ + gint y; + GPtrArray *items; + GList *to_move = NULL, *to_copy = NULL; + GtkWidget *table; + GtkWidget *viewport; + + g_return_if_fail (EGG_IS_TOOLBAR_EDITOR (editor)); + + /* Create new table. */ + table = gtk_table_new (0, 0, TRUE); + editor->priv->table = table; + gtk_container_set_border_width (GTK_CONTAINER (table), 12); + gtk_table_set_row_spacings (GTK_TABLE (table), 24); + gtk_widget_show (table); + gtk_drag_dest_set (table, GTK_DEST_DEFAULT_ALL, + dest_drag_types, G_N_ELEMENTS (dest_drag_types), + GDK_ACTION_MOVE | GDK_ACTION_COPY); + + /* Build two lists of items (one for copying, one for moving). */ + items = egg_toolbars_model_get_name_avail (editor->priv->model); + while (items->len > 0) + { + GtkWidget *item; + const char *name; + gint flags; + + name = g_ptr_array_index (items, 0); + g_ptr_array_remove_index_fast (items, 0); + + flags = egg_toolbars_model_get_name_flags (editor->priv->model, name); + if ((flags & EGG_TB_MODEL_NAME_INFINITE) == 0) + { + item = editor_create_item_from_name (editor, name, GDK_ACTION_MOVE); + if (item != NULL) + to_move = g_list_insert_sorted (to_move, item, compare_items); + } + else + { + item = editor_create_item_from_name (editor, name, GDK_ACTION_COPY); + if (item != NULL) + to_copy = g_list_insert_sorted (to_copy, item, compare_items); + } + } + + /* Add them to the sheet. */ + y = 0; + y = append_table (GTK_TABLE (table), to_move, y, 4); + y = append_table (GTK_TABLE (table), to_copy, y, 4); + + g_list_free (to_move); + g_list_free (to_copy); + g_ptr_array_free (items, TRUE); + + /* Delete old table. */ + viewport = gtk_bin_get_child (GTK_BIN (editor->priv->scrolled_window)); + if (viewport) + { + gtk_container_remove (GTK_CONTAINER (viewport), + gtk_bin_get_child (GTK_BIN (viewport))); + } + + /* Add table to window. */ + gtk_scrolled_window_add_with_viewport + (GTK_SCROLLED_WINDOW (editor->priv->scrolled_window), table); + +} + +static void +setup_editor (EggToolbarEditor *editor) +{ + GtkWidget *scrolled_window; + + gtk_container_set_border_width (GTK_CONTAINER (editor), 12); + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + editor->priv->scrolled_window = scrolled_window; + gtk_widget_show (scrolled_window); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_box_pack_start (GTK_BOX (editor), scrolled_window, TRUE, TRUE, 0); +} + +static void +egg_toolbar_editor_init (EggToolbarEditor *t) +{ + t->priv = EGG_TOOLBAR_EDITOR_GET_PRIVATE (t); + + t->priv->manager = NULL; + t->priv->actions_list = NULL; + + setup_editor (t); +} + diff --git a/cut-n-paste/toolbar-editor/egg-toolbar-editor.h b/cut-n-paste/toolbar-editor/egg-toolbar-editor.h new file mode 100644 index 0000000..ba6e1a9 --- /dev/null +++ b/cut-n-paste/toolbar-editor/egg-toolbar-editor.h @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2003 Marco Pesenti Gritti + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef EGG_TOOLBAR_EDITOR_H +#define EGG_TOOLBAR_EDITOR_H + +#include <gtk/gtk.h> + +#include "egg-toolbars-model.h" + +G_BEGIN_DECLS + +typedef struct EggToolbarEditorClass EggToolbarEditorClass; + +#define EGG_TYPE_TOOLBAR_EDITOR (egg_toolbar_editor_get_type ()) +#define EGG_TOOLBAR_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_TOOLBAR_EDITOR, EggToolbarEditor)) +#define EGG_TOOLBAR_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_TOOLBAR_EDITOR, EggToolbarEditorClass)) +#define EGG_IS_TOOLBAR_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_TOOLBAR_EDITOR)) +#define EGG_IS_TOOLBAR_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_TOOLBAR_EDITOR)) +#define EGG_TOOLBAR_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_TOOLBAR_EDITOR, EggToolbarEditorClass)) + + +typedef struct EggToolbarEditor EggToolbarEditor; +typedef struct EggToolbarEditorPrivate EggToolbarEditorPrivate; + +struct EggToolbarEditor +{ + GtkVBox parent_object; + + /*< private >*/ + EggToolbarEditorPrivate *priv; +}; + +struct EggToolbarEditorClass +{ + GtkVBoxClass parent_class; +}; + + +GType egg_toolbar_editor_get_type (void); +GtkWidget *egg_toolbar_editor_new (GtkUIManager *manager, + EggToolbarsModel *model); +void egg_toolbar_editor_set_model (EggToolbarEditor *t, + EggToolbarsModel *model); + +G_END_DECLS + +#endif diff --git a/cut-n-paste/toolbar-editor/egg-toolbars-model.c b/cut-n-paste/toolbar-editor/egg-toolbars-model.c new file mode 100644 index 0000000..c2e8c17 --- /dev/null +++ b/cut-n-paste/toolbar-editor/egg-toolbars-model.c @@ -0,0 +1,987 @@ +/* + * Copyright (C) 2002-2004 Marco Pesenti Gritti + * Copyright (C) 2004 Christian Persch + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id: egg-toolbars-model.c 929 2009-02-19 14:49:56Z friemann $ + */ + +#include "config.h" + +#include "egg-toolbars-model.h" +#include "eggtypebuiltins.h" +#include "eggmarshalers.h" + +#include <unistd.h> +#include <string.h> +#include <libxml/tree.h> +#include <gdk/gdk.h> + +static void egg_toolbars_model_finalize (GObject *object); + +enum +{ + ITEM_ADDED, + ITEM_REMOVED, + TOOLBAR_ADDED, + TOOLBAR_CHANGED, + TOOLBAR_REMOVED, + LAST_SIGNAL +}; + +typedef struct +{ + char *name; + EggTbModelFlags flags; +} EggToolbarsToolbar; + +typedef struct +{ + char *name; +} EggToolbarsItem; + +static guint signals[LAST_SIGNAL] = { 0 }; + +#define EGG_TOOLBARS_MODEL_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EGG_TYPE_TOOLBARS_MODEL, EggToolbarsModelPrivate)) + +struct EggToolbarsModelPrivate +{ + GNode *toolbars; + GList *types; + GHashTable *flags; +}; + +G_DEFINE_TYPE (EggToolbarsModel, egg_toolbars_model, G_TYPE_OBJECT) + +static xmlDocPtr +egg_toolbars_model_to_xml (EggToolbarsModel *model) +{ + GNode *l1, *l2, *tl; + GList *l3; + xmlDocPtr doc; + + g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), NULL); + + tl = model->priv->toolbars; + + xmlIndentTreeOutput = TRUE; + doc = xmlNewDoc ((const xmlChar*) "1.0"); + doc->children = xmlNewDocNode (doc, NULL, (const xmlChar*) "toolbars", NULL); + + for (l1 = tl->children; l1 != NULL; l1 = l1->next) + { + xmlNodePtr tnode; + EggToolbarsToolbar *toolbar = l1->data; + + tnode = xmlNewChild (doc->children, NULL, (const xmlChar*) "toolbar", NULL); + xmlSetProp (tnode, (const xmlChar*) "name", (const xmlChar*) toolbar->name); + xmlSetProp (tnode, (const xmlChar*) "hidden", + (toolbar->flags&EGG_TB_MODEL_HIDDEN) ? (const xmlChar*) "true" : (const xmlChar*) "false"); + xmlSetProp (tnode, (const xmlChar*) "editable", + (toolbar->flags&EGG_TB_MODEL_NOT_EDITABLE) ? (const xmlChar*) "false" : (const xmlChar*) "true"); + + for (l2 = l1->children; l2 != NULL; l2 = l2->next) + { + xmlNodePtr node; + EggToolbarsItem *item = l2->data; + + if (strcmp (item->name, "_separator") == 0) + { + node = xmlNewChild (tnode, NULL, (const xmlChar*) "separator", NULL); + continue; + } + + node = xmlNewChild (tnode, NULL, (const xmlChar*) "toolitem", NULL); + xmlSetProp (node, (const xmlChar*) "name", (const xmlChar*) item->name); + + /* Add 'data' nodes for each data type which can be written out for this + * item. Only write types which can be used to restore the data. */ + for (l3 = model->priv->types; l3 != NULL; l3 = l3->next) + { + EggToolbarsItemType *type = l3->data; + if (type->get_name != NULL && type->get_data != NULL) + { + xmlNodePtr dnode; + char *tmp; + + tmp = type->get_data (type, item->name); + if (tmp != NULL) + { + dnode = xmlNewTextChild (node, NULL, (const xmlChar*) "data", (const xmlChar*) tmp); + g_free (tmp); + + tmp = gdk_atom_name (type->type); + xmlSetProp (dnode, (const xmlChar*) "type", (const xmlChar*) tmp); + g_free (tmp); + } + } + } + } + } + + return doc; +} + +static gboolean +safe_save_xml (const char *xml_file, xmlDocPtr doc) +{ + char *tmp_file; + char *old_file; + gboolean old_exist; + gboolean retval = TRUE; + + tmp_file = g_strconcat (xml_file, ".tmp", NULL); + old_file = g_strconcat (xml_file, ".old", NULL); + + if (xmlSaveFormatFile (tmp_file, doc, 1) <= 0) + { + g_warning ("Failed to write XML data to %s", tmp_file); + goto failed; + } + + old_exist = g_file_test (xml_file, G_FILE_TEST_EXISTS); + + if (old_exist) + { + if (rename (xml_file, old_file) < 0) + { + g_warning ("Failed to rename %s to %s", xml_file, old_file); + retval = FALSE; + goto failed; + } + } + + if (rename (tmp_file, xml_file) < 0) + { + g_warning ("Failed to rename %s to %s", tmp_file, xml_file); + + if (rename (old_file, xml_file) < 0) + { + g_warning ("Failed to restore %s from %s", xml_file, tmp_file); + } + retval = FALSE; + goto failed; + } + + if (old_exist) + { + if (unlink (old_file) < 0) + { + g_warning ("Failed to delete old file %s", old_file); + } + } + + failed: + g_free (old_file); + g_free (tmp_file); + + return retval; +} + +void +egg_toolbars_model_save_toolbars (EggToolbarsModel *model, + const char *xml_file, + const char *version) +{ + xmlDocPtr doc; + xmlNodePtr root; + + g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model)); + + doc = egg_toolbars_model_to_xml (model); + root = xmlDocGetRootElement (doc); + xmlSetProp (root, (const xmlChar*) "version", (const xmlChar*) version); + safe_save_xml (xml_file, doc); + xmlFreeDoc (doc); +} + +static gboolean +is_unique (EggToolbarsModel *model, + EggToolbarsItem *idata) +{ + EggToolbarsItem *idata2; + GNode *toolbar, *item; + + + for(toolbar = g_node_first_child (model->priv->toolbars); + toolbar != NULL; toolbar = g_node_next_sibling (toolbar)) + { + for(item = g_node_first_child (toolbar); + item != NULL; item = g_node_next_sibling (item)) + { + idata2 = item->data; + + if (idata != idata2 && strcmp (idata->name, idata2->name) == 0) + { + return FALSE; + } + } + } + + return TRUE; +} + +static GNode * +toolbar_node_new (const char *name) +{ + EggToolbarsToolbar *toolbar; + + toolbar = g_new (EggToolbarsToolbar, 1); + toolbar->name = g_strdup (name); + toolbar->flags = 0; + + return g_node_new (toolbar); +} + +static GNode * +item_node_new (const char *name, EggToolbarsModel *model) +{ + EggToolbarsItem *item; + int flags; + + g_return_val_if_fail (name != NULL, NULL); + + item = g_new (EggToolbarsItem, 1); + item->name = g_strdup (name); + + flags = GPOINTER_TO_INT (g_hash_table_lookup (model->priv->flags, item->name)); + if ((flags & EGG_TB_MODEL_NAME_INFINITE) == 0) + g_hash_table_insert (model->priv->flags, + g_strdup (item->name), + GINT_TO_POINTER (flags | EGG_TB_MODEL_NAME_USED)); + + return g_node_new (item); +} + +static void +item_node_free (GNode *item_node, EggToolbarsModel *model) +{ + EggToolbarsItem *item = item_node->data; + int flags; + + flags = GPOINTER_TO_INT (g_hash_table_lookup (model->priv->flags, item->name)); + if ((flags & EGG_TB_MODEL_NAME_INFINITE) == 0 && is_unique (model, item)) + g_hash_table_insert (model->priv->flags, + g_strdup (item->name), + GINT_TO_POINTER (flags & ~EGG_TB_MODEL_NAME_USED)); + + g_free (item->name); + g_free (item); + + g_node_destroy (item_node); +} + +static void +toolbar_node_free (GNode *toolbar_node, EggToolbarsModel *model) +{ + EggToolbarsToolbar *toolbar = toolbar_node->data; + + g_node_children_foreach (toolbar_node, G_TRAVERSE_ALL, + (GNodeForeachFunc) item_node_free, model); + + g_free (toolbar->name); + g_free (toolbar); + + g_node_destroy (toolbar_node); +} + +EggTbModelFlags +egg_toolbars_model_get_flags (EggToolbarsModel *model, + int toolbar_position) +{ + GNode *toolbar_node; + EggToolbarsToolbar *toolbar; + + toolbar_node = g_node_nth_child (model->priv->toolbars, toolbar_position); + g_return_val_if_fail (toolbar_node != NULL, 0); + + toolbar = toolbar_node->data; + + return toolbar->flags; +} + +void +egg_toolbars_model_set_flags (EggToolbarsModel *model, + int toolbar_position, + EggTbModelFlags flags) +{ + GNode *toolbar_node; + EggToolbarsToolbar *toolbar; + + toolbar_node = g_node_nth_child (model->priv->toolbars, toolbar_position); + g_return_if_fail (toolbar_node != NULL); + + toolbar = toolbar_node->data; + + toolbar->flags = flags; + + g_signal_emit (G_OBJECT (model), signals[TOOLBAR_CHANGED], + 0, toolbar_position); +} + + +char * +egg_toolbars_model_get_data (EggToolbarsModel *model, + GdkAtom type, + const char *name) +{ + EggToolbarsItemType *t; + char *data = NULL; + GList *l; + + if (type == GDK_NONE || type == gdk_atom_intern (EGG_TOOLBAR_ITEM_TYPE, FALSE)) + { + g_return_val_if_fail (name != NULL, NULL); + g_return_val_if_fail (*name != 0, NULL); + return strdup (name); + } + + for (l = model->priv->types; l != NULL; l = l->next) + { + t = l->data; + if (t->type == type && t->get_data != NULL) + { + data = t->get_data (t, name); + if (data != NULL) break; + } + } + + return data; +} + +char * +egg_toolbars_model_get_name (EggToolbarsModel *model, + GdkAtom type, + const char *data, + gboolean create) +{ + EggToolbarsItemType *t; + char *name = NULL; + GList *l; + + if (type == GDK_NONE || type == gdk_atom_intern (EGG_TOOLBAR_ITEM_TYPE, FALSE)) + { + g_return_val_if_fail (data, NULL); + g_return_val_if_fail (*data, NULL); + return strdup (data); + } + + if (create) + { + for (l = model->priv->types; name == NULL && l != NULL; l = l->next) + { + t = l->data; + if (t->type == type && t->new_name != NULL) + name = t->new_name (t, data); + } + + return name; + } + else + { + for (l = model->priv->types; name == NULL && l != NULL; l = l->next) + { + t = l->data; + if (t->type == type && t->get_name != NULL) + name = t->get_name (t, data); + } + + return name; + } +} + +static gboolean +impl_add_item (EggToolbarsModel *model, + int toolbar_position, + int position, + const char *name) +{ + GNode *parent_node; + GNode *child_node; + int real_position; + + g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), FALSE); + g_return_val_if_fail (name != NULL, FALSE); + + parent_node = g_node_nth_child (model->priv->toolbars, toolbar_position); + child_node = item_node_new (name, model); + g_node_insert (parent_node, position, child_node); + + real_position = g_node_child_position (parent_node, child_node); + + g_signal_emit (G_OBJECT (model), signals[ITEM_ADDED], 0, + toolbar_position, real_position); + + return TRUE; +} + +gboolean +egg_toolbars_model_add_item (EggToolbarsModel *model, + int toolbar_position, + int position, + const char *name) +{ + EggToolbarsModelClass *klass = EGG_TOOLBARS_MODEL_GET_CLASS (model); + return klass->add_item (model, toolbar_position, position, name); +} + +int +egg_toolbars_model_add_toolbar (EggToolbarsModel *model, + int position, + const char *name) +{ + GNode *node; + int real_position; + + g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), -1); + + node = toolbar_node_new (name); + g_node_insert (model->priv->toolbars, position, node); + + real_position = g_node_child_position (model->priv->toolbars, node); + + g_signal_emit (G_OBJECT (model), signals[TOOLBAR_ADDED], + 0, real_position); + + return g_node_child_position (model->priv->toolbars, node); +} + +static char * +parse_data_list (EggToolbarsModel *model, + xmlNodePtr child, + gboolean create) +{ + char *name = NULL; + while (child && name == NULL) + { + if (xmlStrEqual (child->name, (const xmlChar*) "data")) + { + xmlChar *type = xmlGetProp (child, (const xmlChar*) "type"); + xmlChar *data = xmlNodeGetContent (child); + + if (type != NULL) + { + GdkAtom atom = gdk_atom_intern ((const char*) type, TRUE); + name = egg_toolbars_model_get_name (model, atom, (const char*) data, create); + } + + xmlFree (type); + xmlFree (data); + } + + child = child->next; + } + + return name; +} + +static void +parse_item_list (EggToolbarsModel *model, + xmlNodePtr child, + int position) +{ + while (child) + { + if (xmlStrEqual (child->name, (const xmlChar*) "toolitem")) + { + char *name; + + /* Try to get the name using the data elements first, + as they are more 'portable' or 'persistent'. */ + name = parse_data_list (model, child->children, FALSE); + if (name == NULL) + { + name = parse_data_list (model, child->children, TRUE); + } + + /* If that fails, try to use the name. */ + if (name == NULL) + { + xmlChar *type = xmlGetProp (child, (const xmlChar*) "type"); + xmlChar *data = xmlGetProp (child, (const xmlChar*) "name"); + GdkAtom atom = type ? gdk_atom_intern ((const char*) type, TRUE) : GDK_NONE; + + /* If an old format, try to use it. */ + name = egg_toolbars_model_get_name (model, atom, (const char*) data, FALSE); + if (name == NULL) + { + name = egg_toolbars_model_get_name (model, atom, (const char*) data, TRUE); + } + + xmlFree (type); + xmlFree (data); + } + + if (name != NULL) + { + egg_toolbars_model_add_item (model, position, -1, name); + g_free (name); + } + } + else if (xmlStrEqual (child->name, (const xmlChar*) "separator")) + { + egg_toolbars_model_add_item (model, position, -1, "_separator"); + } + + child = child->next; + } +} + +static void +parse_toolbars (EggToolbarsModel *model, + xmlNodePtr child) +{ + while (child) + { + if (xmlStrEqual (child->name, (const xmlChar*) "toolbar")) + { + xmlChar *string; + int position; + EggTbModelFlags flags; + + string = xmlGetProp (child, (const xmlChar*) "name"); + position = egg_toolbars_model_add_toolbar (model, -1, (const char*) string); + flags = egg_toolbars_model_get_flags (model, position); + xmlFree (string); + + string = xmlGetProp (child, (const xmlChar*) "editable"); + if (string && xmlStrEqual (string, (const xmlChar*) "false")) + flags |= EGG_TB_MODEL_NOT_EDITABLE; + xmlFree (string); + + string = xmlGetProp (child, (const xmlChar*) "hidden"); + if (string && xmlStrEqual (string, (const xmlChar*) "true")) + flags |= EGG_TB_MODEL_HIDDEN; + xmlFree (string); + + string = xmlGetProp (child, (const xmlChar*) "style"); + if (string && xmlStrEqual (string, (const xmlChar*) "icons-only")) + flags |= EGG_TB_MODEL_ICONS; + xmlFree (string); + + egg_toolbars_model_set_flags (model, position, flags); + + parse_item_list (model, child->children, position); + } + + child = child->next; + } +} + +gboolean +egg_toolbars_model_load_toolbars (EggToolbarsModel *model, + const char *xml_file) +{ + xmlDocPtr doc; + xmlNodePtr root; + + g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), FALSE); + + if (!xml_file || !g_file_test (xml_file, G_FILE_TEST_EXISTS)) return FALSE; + + doc = xmlParseFile (xml_file); + if (doc == NULL) + { + g_warning ("Failed to load XML data from %s", xml_file); + return FALSE; + } + root = xmlDocGetRootElement (doc); + + parse_toolbars (model, root->children); + + xmlFreeDoc (doc); + + return TRUE; +} + +static void +parse_available_list (EggToolbarsModel *model, + xmlNodePtr child) +{ + gint flags; + + while (child) + { + if (xmlStrEqual (child->name, (const xmlChar*) "toolitem")) + { + xmlChar *name; + + name = xmlGetProp (child, (const xmlChar*) "name"); + flags = egg_toolbars_model_get_name_flags + (model, (const char*)name); + egg_toolbars_model_set_name_flags + (model, (const char*)name, flags | EGG_TB_MODEL_NAME_KNOWN); + xmlFree (name); + } + child = child->next; + } +} + +static void +parse_names (EggToolbarsModel *model, + xmlNodePtr child) +{ + while (child) + { + if (xmlStrEqual (child->name, (const xmlChar*) "available")) + { + parse_available_list (model, child->children); + } + + child = child->next; + } +} + +gboolean +egg_toolbars_model_load_names (EggToolbarsModel *model, + const char *xml_file) +{ + xmlDocPtr doc; + xmlNodePtr root; + + g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), FALSE); + + if (!xml_file || !g_file_test (xml_file, G_FILE_TEST_EXISTS)) return FALSE; + + doc = xmlParseFile (xml_file); + if (doc == NULL) + { + g_warning ("Failed to load XML data from %s", xml_file); + return FALSE; + } + root = xmlDocGetRootElement (doc); + + parse_names (model, root->children); + + xmlFreeDoc (doc); + + return TRUE; +} + +static void +egg_toolbars_model_class_init (EggToolbarsModelClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + volatile GType flags_type; /* work around gcc's optimiser */ + + /* make sure the flags type is known */ + flags_type = EGG_TYPE_TB_MODEL_FLAGS; + + object_class->finalize = egg_toolbars_model_finalize; + + klass->add_item = impl_add_item; + + signals[ITEM_ADDED] = + g_signal_new ("item_added", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EggToolbarsModelClass, item_added), + NULL, NULL, _egg_marshal_VOID__INT_INT, + G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT); + signals[TOOLBAR_ADDED] = + g_signal_new ("toolbar_added", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EggToolbarsModelClass, toolbar_added), + NULL, NULL, g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, 1, G_TYPE_INT); + signals[ITEM_REMOVED] = + g_signal_new ("item_removed", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EggToolbarsModelClass, item_removed), + NULL, NULL, _egg_marshal_VOID__INT_INT, + G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT); + signals[TOOLBAR_REMOVED] = + g_signal_new ("toolbar_removed", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EggToolbarsModelClass, toolbar_removed), + NULL, NULL, g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, 1, G_TYPE_INT); + signals[TOOLBAR_CHANGED] = + g_signal_new ("toolbar_changed", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EggToolbarsModelClass, toolbar_changed), + NULL, NULL, g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, 1, G_TYPE_INT); + + g_type_class_add_private (object_class, sizeof (EggToolbarsModelPrivate)); +} + +static void +egg_toolbars_model_init (EggToolbarsModel *model) +{ + model->priv =EGG_TOOLBARS_MODEL_GET_PRIVATE (model); + + model->priv->toolbars = g_node_new (NULL); + model->priv->flags = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + egg_toolbars_model_set_name_flags (model, "_separator", + EGG_TB_MODEL_NAME_KNOWN | + EGG_TB_MODEL_NAME_INFINITE); +} + +static void +egg_toolbars_model_finalize (GObject *object) +{ + EggToolbarsModel *model = EGG_TOOLBARS_MODEL (object); + + g_node_children_foreach (model->priv->toolbars, G_TRAVERSE_ALL, + (GNodeForeachFunc) toolbar_node_free, model); + g_node_destroy (model->priv->toolbars); + g_hash_table_destroy (model->priv->flags); + + G_OBJECT_CLASS (egg_toolbars_model_parent_class)->finalize (object); +} + +EggToolbarsModel * +egg_toolbars_model_new (void) +{ + return EGG_TOOLBARS_MODEL (g_object_new (EGG_TYPE_TOOLBARS_MODEL, NULL)); +} + +void +egg_toolbars_model_remove_toolbar (EggToolbarsModel *model, + int position) +{ + GNode *node; + EggTbModelFlags flags; + + g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model)); + + flags = egg_toolbars_model_get_flags (model, position); + + if (!(flags & EGG_TB_MODEL_NOT_REMOVABLE)) + { + node = g_node_nth_child (model->priv->toolbars, position); + g_return_if_fail (node != NULL); + + toolbar_node_free (node, model); + + g_signal_emit (G_OBJECT (model), signals[TOOLBAR_REMOVED], + 0, position); + } +} + +void +egg_toolbars_model_remove_item (EggToolbarsModel *model, + int toolbar_position, + int position) +{ + GNode *node, *toolbar; + + g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model)); + + toolbar = g_node_nth_child (model->priv->toolbars, toolbar_position); + g_return_if_fail (toolbar != NULL); + + node = g_node_nth_child (toolbar, position); + g_return_if_fail (node != NULL); + + item_node_free (node, model); + + g_signal_emit (G_OBJECT (model), signals[ITEM_REMOVED], 0, + toolbar_position, position); +} + +void +egg_toolbars_model_move_item (EggToolbarsModel *model, + int toolbar_position, + int position, + int new_toolbar_position, + int new_position) +{ + GNode *node, *toolbar, *new_toolbar; + + g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model)); + + toolbar = g_node_nth_child (model->priv->toolbars, toolbar_position); + g_return_if_fail (toolbar != NULL); + + new_toolbar = g_node_nth_child (model->priv->toolbars, new_toolbar_position); + g_return_if_fail (new_toolbar != NULL); + + node = g_node_nth_child (toolbar, position); + g_return_if_fail (node != NULL); + + g_node_unlink (node); + + g_signal_emit (G_OBJECT (model), signals[ITEM_REMOVED], 0, + toolbar_position, position); + + g_node_insert (new_toolbar, new_position, node); + + g_signal_emit (G_OBJECT (model), signals[ITEM_ADDED], 0, + new_toolbar_position, new_position); +} + +void +egg_toolbars_model_delete_item (EggToolbarsModel *model, + const char *name) +{ + EggToolbarsItem *idata; + EggToolbarsToolbar *tdata; + GNode *toolbar, *item, *next; + int tpos, ipos; + + g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model)); + + toolbar = g_node_first_child (model->priv->toolbars); + tpos = 0; + + while (toolbar != NULL) + { + item = g_node_first_child (toolbar); + ipos = 0; + + /* Don't delete toolbars that were already empty */ + if (item == NULL) + { + toolbar = g_node_next_sibling (toolbar); + continue; + } + + while (item != NULL) + { + next = g_node_next_sibling (item); + idata = item->data; + if (strcmp (idata->name, name) == 0) + { + item_node_free (item, model); + g_signal_emit (G_OBJECT (model), + signals[ITEM_REMOVED], + 0, tpos, ipos); + } + else + { + ipos++; + } + + item = next; + } + + next = g_node_next_sibling (toolbar); + tdata = toolbar->data; + if (!(tdata->flags & EGG_TB_MODEL_NOT_REMOVABLE) && + g_node_first_child (toolbar) == NULL) + { + toolbar_node_free (toolbar, model); + + g_signal_emit (G_OBJECT (model), + signals[TOOLBAR_REMOVED], + 0, tpos); + } + else + { + tpos++; + } + + toolbar = next; + } +} + +int +egg_toolbars_model_n_items (EggToolbarsModel *model, + int toolbar_position) +{ + GNode *toolbar; + + toolbar = g_node_nth_child (model->priv->toolbars, toolbar_position); + g_return_val_if_fail (toolbar != NULL, -1); + + return g_node_n_children (toolbar); +} + +const char * +egg_toolbars_model_item_nth (EggToolbarsModel *model, + int toolbar_position, + int position) +{ + GNode *toolbar; + GNode *item; + EggToolbarsItem *idata; + + toolbar = g_node_nth_child (model->priv->toolbars, toolbar_position); + g_return_val_if_fail (toolbar != NULL, NULL); + + item = g_node_nth_child (toolbar, position); + g_return_val_if_fail (item != NULL, NULL); + + idata = item->data; + return idata->name; +} + +int +egg_toolbars_model_n_toolbars (EggToolbarsModel *model) +{ + return g_node_n_children (model->priv->toolbars); +} + +const char * +egg_toolbars_model_toolbar_nth (EggToolbarsModel *model, + int position) +{ + GNode *toolbar; + EggToolbarsToolbar *tdata; + + toolbar = g_node_nth_child (model->priv->toolbars, position); + g_return_val_if_fail (toolbar != NULL, NULL); + + tdata = toolbar->data; + + return tdata->name; +} + +GList * +egg_toolbars_model_get_types (EggToolbarsModel *model) +{ + return model->priv->types; +} + +void +egg_toolbars_model_set_types (EggToolbarsModel *model, GList *types) +{ + model->priv->types = types; +} + +static void +fill_avail_array (gpointer key, gpointer value, GPtrArray *array) +{ + int flags = GPOINTER_TO_INT (value); + if ((flags & EGG_TB_MODEL_NAME_KNOWN) && !(flags & EGG_TB_MODEL_NAME_USED)) + g_ptr_array_add (array, key); +} + +GPtrArray * +egg_toolbars_model_get_name_avail (EggToolbarsModel *model) +{ + GPtrArray *array = g_ptr_array_new (); + g_hash_table_foreach (model->priv->flags, (GHFunc) fill_avail_array, array); + return array; +} + +gint +egg_toolbars_model_get_name_flags (EggToolbarsModel *model, const char *name) +{ + return GPOINTER_TO_INT (g_hash_table_lookup (model->priv->flags, name)); +} + +void +egg_toolbars_model_set_name_flags (EggToolbarsModel *model, const char *name, gint flags) +{ + g_hash_table_insert (model->priv->flags, g_strdup (name), GINT_TO_POINTER (flags)); +} diff --git a/cut-n-paste/toolbar-editor/egg-toolbars-model.h b/cut-n-paste/toolbar-editor/egg-toolbars-model.h new file mode 100644 index 0000000..5c02b0a --- /dev/null +++ b/cut-n-paste/toolbar-editor/egg-toolbars-model.h @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2003-2004 Marco Pesenti Gritti + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id: egg-toolbars-model.h 929 2009-02-19 14:49:56Z friemann $ + */ + +#ifndef EGG_TOOLBARS_MODEL_H +#define EGG_TOOLBARS_MODEL_H + +#include <glib.h> +#include <glib-object.h> +#include <gdk/gdk.h> + +G_BEGIN_DECLS + +#define EGG_TYPE_TOOLBARS_MODEL (egg_toolbars_model_get_type ()) +#define EGG_TOOLBARS_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_TOOLBARS_MODEL, EggToolbarsModel)) +#define EGG_TOOLBARS_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_TOOLBARS_MODEL, EggToolbarsModelClass)) +#define EGG_IS_TOOLBARS_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_TOOLBARS_MODEL)) +#define EGG_IS_TOOLBARS_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_TOOLBARS_MODEL)) +#define EGG_TOOLBARS_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_TOOLBARS_MODEL, EggToolbarsModelClass)) + +typedef struct EggToolbarsModel EggToolbarsModel; +typedef struct EggToolbarsModelPrivate EggToolbarsModelPrivate; +typedef struct EggToolbarsModelClass EggToolbarsModelClass; + +#define EGG_TOOLBAR_ITEM_TYPE "application/x-toolbar-item" + +typedef enum +{ + EGG_TB_MODEL_NOT_REMOVABLE = 1 << 0, + EGG_TB_MODEL_NOT_EDITABLE = 1 << 1, + EGG_TB_MODEL_BOTH = 1 << 2, + EGG_TB_MODEL_BOTH_HORIZ = 1 << 3, + EGG_TB_MODEL_ICONS = 1 << 4, + EGG_TB_MODEL_TEXT = 1 << 5, + EGG_TB_MODEL_STYLES_MASK = 0x3C, + EGG_TB_MODEL_ACCEPT_ITEMS_ONLY = 1 << 6, + EGG_TB_MODEL_HIDDEN = 1 << 7 +} EggTbModelFlags; + +typedef enum +{ + EGG_TB_MODEL_NAME_USED = 1 << 0, + EGG_TB_MODEL_NAME_INFINITE = 1 << 1, + EGG_TB_MODEL_NAME_KNOWN = 1 << 2 +} EggTbModelNameFlags; + +struct EggToolbarsModel +{ + GObject parent_object; + + /*< private >*/ + EggToolbarsModelPrivate *priv; +}; + +struct EggToolbarsModelClass +{ + GObjectClass parent_class; + + /* Signals */ + void (* item_added) (EggToolbarsModel *model, + int toolbar_position, + int position); + void (* item_removed) (EggToolbarsModel *model, + int toolbar_position, + int position); + void (* toolbar_added) (EggToolbarsModel *model, + int position); + void (* toolbar_changed) (EggToolbarsModel *model, + int position); + void (* toolbar_removed) (EggToolbarsModel *model, + int position); + + /* Virtual Table */ + gboolean (* add_item) (EggToolbarsModel *t, + int toolbar_position, + int position, + const char *name); +}; + +typedef struct EggToolbarsItemType EggToolbarsItemType; + +struct EggToolbarsItemType +{ + GdkAtom type; + + gboolean (* has_data) (EggToolbarsItemType *type, + const char *name); + char * (* get_data) (EggToolbarsItemType *type, + const char *name); + + char * (* new_name) (EggToolbarsItemType *type, + const char *data); + char * (* get_name) (EggToolbarsItemType *type, + const char *data); +}; + +GType egg_tb_model_flags_get_type (void); +GType egg_toolbars_model_get_type (void); +EggToolbarsModel *egg_toolbars_model_new (void); +gboolean egg_toolbars_model_load_names (EggToolbarsModel *model, + const char *xml_file); +gboolean egg_toolbars_model_load_toolbars (EggToolbarsModel *model, + const char *xml_file); +void egg_toolbars_model_save_toolbars (EggToolbarsModel *model, + const char *xml_file, + const char *version); + +/* Functions for manipulating the types of portable data this toolbar understands. */ +GList * egg_toolbars_model_get_types (EggToolbarsModel *model); +void egg_toolbars_model_set_types (EggToolbarsModel *model, + GList *types); + +/* Functions for converting between name and portable data. */ +char * egg_toolbars_model_get_name (EggToolbarsModel *model, + GdkAtom type, + const char *data, + gboolean create); +char * egg_toolbars_model_get_data (EggToolbarsModel *model, + GdkAtom type, + const char *name); + +/* Functions for retrieving what items are available for adding to the toolbars. */ +GPtrArray * egg_toolbars_model_get_name_avail (EggToolbarsModel *model); +gint egg_toolbars_model_get_name_flags (EggToolbarsModel *model, + const char *name); +void egg_toolbars_model_set_name_flags (EggToolbarsModel *model, + const char *name, + gint flags); + +/* Functions for manipulating flags on individual toolbars. */ +EggTbModelFlags egg_toolbars_model_get_flags (EggToolbarsModel *model, + int toolbar_position); +void egg_toolbars_model_set_flags (EggToolbarsModel *model, + int toolbar_position, + EggTbModelFlags flags); + +/* Functions for adding and removing toolbars. */ +int egg_toolbars_model_add_toolbar (EggToolbarsModel *model, + int position, + const char *name); +void egg_toolbars_model_remove_toolbar (EggToolbarsModel *model, + int position); + +/* Functions for adding, removing and moving items. */ +gboolean egg_toolbars_model_add_item (EggToolbarsModel *model, + int toolbar_position, + int position, + const char *name); +void egg_toolbars_model_remove_item (EggToolbarsModel *model, + int toolbar_position, + int position); +void egg_toolbars_model_move_item (EggToolbarsModel *model, + int toolbar_position, + int position, + int new_toolbar_position, + int new_position); +void egg_toolbars_model_delete_item (EggToolbarsModel *model, + const char *name); + +/* Functions for accessing the names of items. */ +int egg_toolbars_model_n_items (EggToolbarsModel *model, + int toolbar_position); +const char * egg_toolbars_model_item_nth (EggToolbarsModel *model, + int toolbar_position, + int position); + +/* Functions for accessing the names of toolbars. */ +int egg_toolbars_model_n_toolbars (EggToolbarsModel *model); +const char *egg_toolbars_model_toolbar_nth (EggToolbarsModel *model, + int position); + +G_END_DECLS + +#endif diff --git a/cut-n-paste/toolbar-editor/eggmarshalers.list b/cut-n-paste/toolbar-editor/eggmarshalers.list new file mode 100644 index 0000000..1f953dd --- /dev/null +++ b/cut-n-paste/toolbar-editor/eggmarshalers.list @@ -0,0 +1 @@ +VOID:INT,INT diff --git a/cut-n-paste/totem-screensaver/Makefile.am b/cut-n-paste/totem-screensaver/Makefile.am new file mode 100644 index 0000000..580965c --- /dev/null +++ b/cut-n-paste/totem-screensaver/Makefile.am @@ -0,0 +1,15 @@ +noinst_LTLIBRARIES = libtotemscrsaver.la + +libtotemscrsaver_la_SOURCES = \ + totem-scrsaver.h \ + totem-scrsaver.c + +libtotemscrsaver_la_LIBADD = $(X11_LIBS) + +libtotemscrsaver_la_CFLAGS = \ + -I$(top_srcdir)/src \ + $(EOM_CFLAGS) \ + $(X11_CFLAGS) \ + $(WARN_CFLAGS) + +-include $(top_srcdir)/git.mk diff --git a/cut-n-paste/totem-screensaver/Makefile.in b/cut-n-paste/totem-screensaver/Makefile.in new file mode 100644 index 0000000..8bd581a --- /dev/null +++ b/cut-n-paste/totem-screensaver/Makefile.in @@ -0,0 +1,605 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = cut-n-paste/totem-screensaver +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +am__DEPENDENCIES_1 = +libtotemscrsaver_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_libtotemscrsaver_la_OBJECTS = \ + libtotemscrsaver_la-totem-scrsaver.lo +libtotemscrsaver_la_OBJECTS = $(am_libtotemscrsaver_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +libtotemscrsaver_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(libtotemscrsaver_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libtotemscrsaver_la_SOURCES) +DIST_SOURCES = $(libtotemscrsaver_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DBUS_BINDING_TOOL = @DBUS_BINDING_TOOL@ +DBUS_CFLAGS = @DBUS_CFLAGS@ +DBUS_LIBS = @DBUS_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISABLE_DEPRECATED = @DISABLE_DEPRECATED@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ +DLLTOOL = @DLLTOOL@ +DOC_USER_FORMATS = @DOC_USER_FORMATS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EOM_API_VERSION = @EOM_API_VERSION@ +EOM_CFLAGS = @EOM_CFLAGS@ +EOM_DOC_EXIF_START = @EOM_DOC_EXIF_START@ +EOM_DOC_EXIF_STOP = @EOM_DOC_EXIF_STOP@ +EOM_LIBS = @EOM_LIBS@ +EOM_MAJOR_VERSION = @EOM_MAJOR_VERSION@ +EOM_MICRO_VERSION = @EOM_MICRO_VERSION@ +EOM_MINOR_VERSION = @EOM_MINOR_VERSION@ +EXEEXT = @EXEEXT@ +EXEMPI_CFLAGS = @EXEMPI_CFLAGS@ +EXEMPI_LIBS = @EXEMPI_LIBS@ +EXIF_CFLAGS = @EXIF_CFLAGS@ +EXIF_LIBS = @EXIF_LIBS@ +FGREP = @FGREP@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HELP_DIR = @HELP_DIR@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +LCMS_CFLAGS = @LCMS_CFLAGS@ +LCMS_LIBS = @LCMS_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBJPEG = @LIBJPEG@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ +LIBXML2_LIBS = @LIBXML2_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATECONFTOOL = @MATECONFTOOL@ +MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@ +MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OMF_DIR = @OMF_DIR@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYGOBJECT_CODEGEN = @PYGOBJECT_CODEGEN@ +PYGOBJECT_DEFSDIR = @PYGOBJECT_DEFSDIR@ +PYGOBJECT_H2DEF = @PYGOBJECT_H2DEF@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_DEFSDIR = @PYGTK_DEFSDIR@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYTHON = @PYTHON@ +PYTHON_CFLAGS = @PYTHON_CFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RSVG_CFLAGS = @RSVG_CFLAGS@ +RSVG_LIBS = @RSVG_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XGETTEXT = @XGETTEXT@ +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_LTLIBRARIES = libtotemscrsaver.la +libtotemscrsaver_la_SOURCES = \ + totem-scrsaver.h \ + totem-scrsaver.c + +libtotemscrsaver_la_LIBADD = $(X11_LIBS) +libtotemscrsaver_la_CFLAGS = \ + -I$(top_srcdir)/src \ + $(EOM_CFLAGS) \ + $(X11_CFLAGS) \ + $(WARN_CFLAGS) + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign cut-n-paste/totem-screensaver/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign cut-n-paste/totem-screensaver/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libtotemscrsaver.la: $(libtotemscrsaver_la_OBJECTS) $(libtotemscrsaver_la_DEPENDENCIES) + $(AM_V_CCLD)$(libtotemscrsaver_la_LINK) $(libtotemscrsaver_la_OBJECTS) $(libtotemscrsaver_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtotemscrsaver_la-totem-scrsaver.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +libtotemscrsaver_la-totem-scrsaver.lo: totem-scrsaver.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) $(libtotemscrsaver_la_CFLAGS) $(CFLAGS) -MT libtotemscrsaver_la-totem-scrsaver.lo -MD -MP -MF $(DEPDIR)/libtotemscrsaver_la-totem-scrsaver.Tpo -c -o libtotemscrsaver_la-totem-scrsaver.lo `test -f 'totem-scrsaver.c' || echo '$(srcdir)/'`totem-scrsaver.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtotemscrsaver_la-totem-scrsaver.Tpo $(DEPDIR)/libtotemscrsaver_la-totem-scrsaver.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='totem-scrsaver.c' object='libtotemscrsaver_la-totem-scrsaver.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtotemscrsaver_la_CFLAGS) $(CFLAGS) -c -o libtotemscrsaver_la-totem-scrsaver.lo `test -f 'totem-scrsaver.c' || echo '$(srcdir)/'`totem-scrsaver.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-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 -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-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 uninstall uninstall-am + + +-include $(top_srcdir)/git.mk + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/cut-n-paste/totem-screensaver/README b/cut-n-paste/totem-screensaver/README new file mode 100644 index 0000000..a5be11b --- /dev/null +++ b/cut-n-paste/totem-screensaver/README @@ -0,0 +1,3 @@ +The sources for the screensaver enabling/disabling code are copied from Totem. +A simple replacement (s/WITH_DBUS/ENABLE_DBUS/g) was needed. The hardcoded +"reason for inhibiting" string was also modified. diff --git a/cut-n-paste/totem-screensaver/totem-scrsaver.c b/cut-n-paste/totem-screensaver/totem-scrsaver.c new file mode 100644 index 0000000..bf2bce9 --- /dev/null +++ b/cut-n-paste/totem-screensaver/totem-scrsaver.c @@ -0,0 +1,556 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- + + Copyright (C) 2004-2006 Bastien Nocera <[email protected]> + Copyright © 2010 Christian Persch + Copyright © 2010 Carlos Garcia Campos + + The Mate 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. + + The Mate 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 the Mate Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301 USA. + + Authors: Bastien Nocera <[email protected]> + Christian Persch + Carlos Garcia Campos + */ + +#include "config.h" + +#include <glib/gi18n.h> + +#include <gdk/gdk.h> + +#ifdef GDK_WINDOWING_X11 +#include <gdk/gdkx.h> +#include <X11/keysym.h> + +#ifdef HAVE_XTEST +#include <X11/extensions/XTest.h> +#endif /* HAVE_XTEST */ +#endif /* GDK_WINDOWING_X11 */ + +#include "totem-scrsaver.h" + +#define GS_SERVICE "org.mate.ScreenSaver" +#define GS_PATH "/org/mate/ScreenSaver" +#define GS_INTERFACE "org.mate.ScreenSaver" + +#define XSCREENSAVER_MIN_TIMEOUT 60 + +enum { + PROP_0, + PROP_REASON +}; + +static void totem_scrsaver_finalize (GObject *object); + +struct TotemScrsaverPrivate { + /* Whether the screensaver is disabled */ + gboolean disabled; + /* The reason for the inhibition */ + char *reason; + + GDBusProxy *gs_proxy; + gboolean have_screensaver_dbus; + guint32 cookie; + gboolean old_dbus_api; + + /* To save the screensaver info */ + int timeout; + int interval; + int prefer_blanking; + int allow_exposures; + + /* For use with XTest */ + int keycode1, keycode2; + int *keycode; + gboolean have_xtest; +}; + +G_DEFINE_TYPE(TotemScrsaver, totem_scrsaver, G_TYPE_OBJECT) + +static gboolean +screensaver_is_running_dbus (TotemScrsaver *scr) +{ + return scr->priv->have_screensaver_dbus; +} + +static void +on_inhibit_cb (GObject *source_object, + GAsyncResult *res, + gpointer user_data) +{ + GDBusProxy *proxy = G_DBUS_PROXY (source_object); + TotemScrsaver *scr = TOTEM_SCRSAVER (user_data); + GVariant *value; + GError *error = NULL; + + value = g_dbus_proxy_call_finish (proxy, res, &error); + if (!value) { + if (!scr->priv->old_dbus_api && + g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD)) { + g_return_if_fail (scr->priv->reason != NULL); + /* try the old API */ + scr->priv->old_dbus_api = TRUE; + g_dbus_proxy_call (proxy, + "InhibitActivation", + g_variant_new ("(s)", + scr->priv->reason), + G_DBUS_CALL_FLAGS_NO_AUTO_START, + -1, + NULL, + on_inhibit_cb, + scr); + } else { + g_warning ("Problem inhibiting the screensaver: %s", error->message); + } + g_error_free (error); + + return; + } + + /* save the cookie */ + if (g_variant_is_of_type (value, G_VARIANT_TYPE ("(u)"))) + g_variant_get (value, "(u)", &scr->priv->cookie); + else + scr->priv->cookie = 0; + g_variant_unref (value); +} + +static void +on_uninhibit_cb (GObject *source_object, + GAsyncResult *res, + gpointer user_data) +{ + GDBusProxy *proxy = G_DBUS_PROXY (source_object); + TotemScrsaver *scr = TOTEM_SCRSAVER (user_data); + GVariant *value; + GError *error = NULL; + + value = g_dbus_proxy_call_finish (proxy, res, &error); + if (!value) { + if (!scr->priv->old_dbus_api && + g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD)) { + /* try the old API */ + scr->priv->old_dbus_api = TRUE; + g_dbus_proxy_call (proxy, + "AllowActivation", + g_variant_new ("()"), + G_DBUS_CALL_FLAGS_NO_AUTO_START, + -1, + NULL, + on_uninhibit_cb, + scr); + } else { + g_warning ("Problem uninhibiting the screensaver: %s", error->message); + } + g_error_free (error); + + return; + } + + /* clear the cookie */ + scr->priv->cookie = 0; + g_variant_unref (value); +} + +static void +screensaver_inhibit_dbus (TotemScrsaver *scr, + gboolean inhibit) +{ + TotemScrsaverPrivate *priv = scr->priv; + + if (!priv->have_screensaver_dbus) + return; + + scr->priv->old_dbus_api = FALSE; + + if (inhibit) { + g_return_if_fail (scr->priv->reason != NULL); + g_dbus_proxy_call (priv->gs_proxy, + "Inhibit", + g_variant_new ("(ss)", + g_get_application_name (), + scr->priv->reason), + G_DBUS_CALL_FLAGS_NO_AUTO_START, + -1, + NULL, + on_inhibit_cb, + scr); + } else { + g_dbus_proxy_call (priv->gs_proxy, + "UnInhibit", + g_variant_new ("(u)", priv->cookie), + G_DBUS_CALL_FLAGS_NO_AUTO_START, + -1, + NULL, + on_uninhibit_cb, + scr); + } +} + +static void +screensaver_enable_dbus (TotemScrsaver *scr) +{ + screensaver_inhibit_dbus (scr, FALSE); +} + +static void +screensaver_disable_dbus (TotemScrsaver *scr) +{ + screensaver_inhibit_dbus (scr, TRUE); +} + +static void +screensaver_update_dbus_presence (TotemScrsaver *scr) +{ + TotemScrsaverPrivate *priv = scr->priv; + gchar *name_owner; + + name_owner = g_dbus_proxy_get_name_owner (priv->gs_proxy); + if (name_owner) { + priv->have_screensaver_dbus = TRUE; + g_free (name_owner); + } else { + priv->have_screensaver_dbus = FALSE; + } +} + +static void +screensaver_dbus_owner_changed_cb (GObject *object, + GParamSpec *pspec, + gpointer user_data) +{ + TotemScrsaver *scr = TOTEM_SCRSAVER (user_data); + + screensaver_update_dbus_presence (scr); +} + +static void +screensaver_dbus_proxy_new_cb (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + TotemScrsaver *scr = TOTEM_SCRSAVER (user_data); + TotemScrsaverPrivate *priv = scr->priv; + + priv->gs_proxy = g_dbus_proxy_new_for_bus_finish (result, NULL); + if (!priv->gs_proxy) + return; + + screensaver_update_dbus_presence (scr); + + g_signal_connect (priv->gs_proxy, "notify::g-name-owner", + G_CALLBACK (screensaver_dbus_owner_changed_cb), + scr); +} + +static void +screensaver_init_dbus (TotemScrsaver *scr) +{ + g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION, + G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, + NULL, + GS_SERVICE, + GS_PATH, + GS_INTERFACE, + NULL, + screensaver_dbus_proxy_new_cb, + scr); +} + +static void +screensaver_finalize_dbus (TotemScrsaver *scr) +{ + if (scr->priv->gs_proxy) { + g_object_unref (scr->priv->gs_proxy); + } +} + +#ifdef GDK_WINDOWING_X11 +static void +screensaver_enable_x11 (TotemScrsaver *scr) +{ + +#ifdef HAVE_XTEST + if (scr->priv->have_xtest != FALSE) + { + g_source_remove_by_user_data (scr); + return; + } +#endif /* HAVE_XTEST */ + + XLockDisplay (GDK_DISPLAY()); + XSetScreenSaver (GDK_DISPLAY(), + scr->priv->timeout, + scr->priv->interval, + scr->priv->prefer_blanking, + scr->priv->allow_exposures); + XUnlockDisplay (GDK_DISPLAY()); +} + +#ifdef HAVE_XTEST +static gboolean +fake_event (TotemScrsaver *scr) +{ + if (scr->priv->disabled) + { + XLockDisplay (GDK_DISPLAY()); + XTestFakeKeyEvent (GDK_DISPLAY(), *scr->priv->keycode, + True, CurrentTime); + XTestFakeKeyEvent (GDK_DISPLAY(), *scr->priv->keycode, + False, CurrentTime); + XUnlockDisplay (GDK_DISPLAY()); + /* Swap the keycode */ + if (scr->priv->keycode == &scr->priv->keycode1) + scr->priv->keycode = &scr->priv->keycode2; + else + scr->priv->keycode = &scr->priv->keycode1; + } + + return TRUE; +} +#endif /* HAVE_XTEST */ + +static void +screensaver_disable_x11 (TotemScrsaver *scr) +{ + +#ifdef HAVE_XTEST + if (scr->priv->have_xtest != FALSE) + { + XLockDisplay (GDK_DISPLAY()); + XGetScreenSaver(GDK_DISPLAY(), &scr->priv->timeout, + &scr->priv->interval, + &scr->priv->prefer_blanking, + &scr->priv->allow_exposures); + XUnlockDisplay (GDK_DISPLAY()); + + if (scr->priv->timeout != 0) { + g_timeout_add_seconds (scr->priv->timeout / 2, + (GSourceFunc) fake_event, scr); + } else { + g_timeout_add_seconds (XSCREENSAVER_MIN_TIMEOUT / 2, + (GSourceFunc) fake_event, scr); + } + + return; + } +#endif /* HAVE_XTEST */ + + XLockDisplay (GDK_DISPLAY()); + XGetScreenSaver(GDK_DISPLAY(), &scr->priv->timeout, + &scr->priv->interval, + &scr->priv->prefer_blanking, + &scr->priv->allow_exposures); + XSetScreenSaver(GDK_DISPLAY(), 0, 0, + DontPreferBlanking, DontAllowExposures); + XUnlockDisplay (GDK_DISPLAY()); +} + +static void +screensaver_init_x11 (TotemScrsaver *scr) +{ +#ifdef HAVE_XTEST + int a, b, c, d; + + XLockDisplay (GDK_DISPLAY()); + scr->priv->have_xtest = (XTestQueryExtension (GDK_DISPLAY(), &a, &b, &c, &d) == True); + if (scr->priv->have_xtest != FALSE) + { + scr->priv->keycode1 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_L); + if (scr->priv->keycode1 == 0) { + g_warning ("scr->priv->keycode1 not existant"); + } + scr->priv->keycode2 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_R); + if (scr->priv->keycode2 == 0) { + scr->priv->keycode2 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_L); + if (scr->priv->keycode2 == 0) { + g_warning ("scr->priv->keycode2 not existant"); + } + } + scr->priv->keycode = &scr->priv->keycode1; + } + XUnlockDisplay (GDK_DISPLAY()); +#endif /* HAVE_XTEST */ +} + +static void +screensaver_finalize_x11 (TotemScrsaver *scr) +{ + g_source_remove_by_user_data (scr); +} +#endif + +static void +totem_scrsaver_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + TotemScrsaver *scr; + + scr = TOTEM_SCRSAVER (object); + + switch (property_id) + { + case PROP_REASON: + g_value_set_string (value, scr->priv->reason); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +totem_scrsaver_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + TotemScrsaver *scr; + + scr = TOTEM_SCRSAVER (object); + + switch (property_id) + { + case PROP_REASON: + g_free (scr->priv->reason); + scr->priv->reason = g_value_dup_string (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +totem_scrsaver_class_init (TotemScrsaverClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (TotemScrsaverPrivate)); + + object_class->set_property = totem_scrsaver_set_property; + object_class->get_property = totem_scrsaver_get_property; + object_class->finalize = totem_scrsaver_finalize; + + g_object_class_install_property (object_class, PROP_REASON, + g_param_spec_string ("reason", NULL, NULL, + NULL, G_PARAM_READWRITE)); + +} + +/** + * totem_scrsaver_new: + * + * Creates a #TotemScrsaver object. + * If the MATE screen saver is running, it uses its DBUS interface to + * inhibit the screensaver; otherwise it falls back to using the X + * screensaver functionality for this. + * + * Returns: a newly created #TotemScrsaver + */ +TotemScrsaver * +totem_scrsaver_new (void) +{ + return TOTEM_SCRSAVER (g_object_new (TOTEM_TYPE_SCRSAVER, NULL)); +} + +static void +totem_scrsaver_init (TotemScrsaver *scr) +{ + scr->priv = G_TYPE_INSTANCE_GET_PRIVATE (scr, + TOTEM_TYPE_SCRSAVER, + TotemScrsaverPrivate); + + screensaver_init_dbus (scr); +#ifdef GDK_WINDOWING_X11 + screensaver_init_x11 (scr); +#else +#warning Unimplemented +#endif +} + +void +totem_scrsaver_disable (TotemScrsaver *scr) +{ + g_return_if_fail (TOTEM_SCRSAVER (scr)); + + if (scr->priv->disabled != FALSE) + return; + + scr->priv->disabled = TRUE; + + if (screensaver_is_running_dbus (scr) != FALSE) + screensaver_disable_dbus (scr); + else +#ifdef GDK_WINDOWING_X11 + screensaver_disable_x11 (scr); +#else +#warning Unimplemented + {} +#endif +} + +void +totem_scrsaver_enable (TotemScrsaver *scr) +{ + g_return_if_fail (TOTEM_SCRSAVER (scr)); + + if (scr->priv->disabled == FALSE) + return; + + scr->priv->disabled = FALSE; + + if (screensaver_is_running_dbus (scr) != FALSE) + screensaver_enable_dbus (scr); + else +#ifdef GDK_WINDOWING_X11 + screensaver_enable_x11 (scr); +#else +#warning Unimplemented + {} +#endif +} + +void +totem_scrsaver_set_state (TotemScrsaver *scr, gboolean enable) +{ + g_return_if_fail (TOTEM_SCRSAVER (scr)); + + if (scr->priv->disabled == !enable) + return; + + if (enable == FALSE) + totem_scrsaver_disable (scr); + else + totem_scrsaver_enable (scr); +} + +static void +totem_scrsaver_finalize (GObject *object) +{ + TotemScrsaver *scr = TOTEM_SCRSAVER (object); + + g_free (scr->priv->reason); + + screensaver_finalize_dbus (scr); +#ifdef GDK_WINDOWING_X11 + screensaver_finalize_x11 (scr); +#else +#warning Unimplemented + {} +#endif + + G_OBJECT_CLASS (totem_scrsaver_parent_class)->finalize (object); +} diff --git a/cut-n-paste/totem-screensaver/totem-scrsaver.h b/cut-n-paste/totem-screensaver/totem-scrsaver.h new file mode 100644 index 0000000..bb95174 --- /dev/null +++ b/cut-n-paste/totem-screensaver/totem-scrsaver.h @@ -0,0 +1,57 @@ +/* + Copyright (C) 2004, Bastien Nocera <[email protected]> + + The Mate 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. + + The Mate 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 the Mate Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301 USA. + + Author: Bastien Nocera <[email protected]> + */ + +#ifndef TOTEM_SCRSAVER_H +#define TOTEM_SCRSAVER_H + +#include <glib-object.h> + +G_BEGIN_DECLS + +#define TOTEM_TYPE_SCRSAVER (totem_scrsaver_get_type ()) +#define TOTEM_SCRSAVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TOTEM_TYPE_SCRSAVER, TotemScrsaver)) +#define TOTEM_SCRSAVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TOTEM_TYPE_SCRSAVER, TotemScrsaverClass)) +#define TOTEM_IS_SCRSAVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TOTEM_TYPE_SCRSAVER)) +#define TOTEM_IS_SCRSAVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TOTEM_TYPE_SCRSAVER)) + +typedef struct TotemScrsaver TotemScrsaver; +typedef struct TotemScrsaverClass TotemScrsaverClass; +typedef struct TotemScrsaverPrivate TotemScrsaverPrivate; + +struct TotemScrsaver { + GObject parent; + TotemScrsaverPrivate *priv; +}; + +struct TotemScrsaverClass { + GObjectClass parent_class; +}; + +GType totem_scrsaver_get_type (void) G_GNUC_CONST; +TotemScrsaver *totem_scrsaver_new (void); +void totem_scrsaver_enable (TotemScrsaver *scr); +void totem_scrsaver_disable (TotemScrsaver *scr); +void totem_scrsaver_set_state (TotemScrsaver *scr, + gboolean enable); + +G_END_DECLS + +#endif /* !TOTEM_SCRSAVER_H */ diff --git a/data/Makefile.am b/data/Makefile.am new file mode 100644 index 0000000..b89623a --- /dev/null +++ b/data/Makefile.am @@ -0,0 +1,55 @@ +SUBDIRS = pixmaps icons + +@INTLTOOL_DESKTOP_RULE@ + +DESKTOP_IN_FILES= eom.desktop.in.in +DESKTOP_FILES= $(DESKTOP_IN_FILES:.desktop.in.in=.desktop) + +desktopdir = $(datadir)/applications +desktop_DATA = $(DESKTOP_FILES) + +@INTLTOOL_SCHEMAS_RULE@ + +schemas_in_files = eom.schemas.in +schemasdir = $(MATECONF_SCHEMA_FILE_DIR) +schemas_DATA = $(schemas_in_files:.schemas.in=.schemas) + +gladedir = $(pkgdatadir) +glade_DATA = eom-image-properties-dialog.ui \ + eom-multiple-save-as-dialog.ui \ + eom-preferences-dialog.ui + +uidir = $(datadir)/eom +UI_FILES = \ + eom-ui.xml \ + eom-toolbar.xml + +ui_DATA = $(UI_FILES) + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = eom.pc + +gtkrcdir = $(pkgdatadir) +gtkrc_DATA = gtkrc + +install-data-local: +if MATECONF_SCHEMAS_INSTALL + if test -z "$(DESTDIR)" ; then \ + for p in $(schemas_DATA) ; do \ + MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(top_builddir)/data/$$p >&1 > /dev/null; \ + done \ + fi +endif + +EXTRA_DIST = \ + $(gtkrc_DATA) \ + $(glade_DATA) \ + $(DESKTOP_IN_FILES) \ + $(schemas_in_files) \ + $(UI_FILES) + +DISTCLEANFILES = \ + $(DESKTOP_FILES) \ + $(schemas_DATA) + +-include $(top_srcdir)/git.mk diff --git a/data/Makefile.in b/data/Makefile.in new file mode 100644 index 0000000..9914e53 --- /dev/null +++ b/data/Makefile.in @@ -0,0 +1,863 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = data +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/eom.desktop.in.in $(srcdir)/eom.pc.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = eom.pc eom.desktop.in +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(gladedir)" \ + "$(DESTDIR)$(gtkrcdir)" "$(DESTDIR)$(pkgconfigdir)" \ + "$(DESTDIR)$(schemasdir)" "$(DESTDIR)$(uidir)" +DATA = $(desktop_DATA) $(glade_DATA) $(gtkrc_DATA) $(pkgconfig_DATA) \ + $(schemas_DATA) $(ui_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DBUS_BINDING_TOOL = @DBUS_BINDING_TOOL@ +DBUS_CFLAGS = @DBUS_CFLAGS@ +DBUS_LIBS = @DBUS_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISABLE_DEPRECATED = @DISABLE_DEPRECATED@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ +DLLTOOL = @DLLTOOL@ +DOC_USER_FORMATS = @DOC_USER_FORMATS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EOM_API_VERSION = @EOM_API_VERSION@ +EOM_CFLAGS = @EOM_CFLAGS@ +EOM_DOC_EXIF_START = @EOM_DOC_EXIF_START@ +EOM_DOC_EXIF_STOP = @EOM_DOC_EXIF_STOP@ +EOM_LIBS = @EOM_LIBS@ +EOM_MAJOR_VERSION = @EOM_MAJOR_VERSION@ +EOM_MICRO_VERSION = @EOM_MICRO_VERSION@ +EOM_MINOR_VERSION = @EOM_MINOR_VERSION@ +EXEEXT = @EXEEXT@ +EXEMPI_CFLAGS = @EXEMPI_CFLAGS@ +EXEMPI_LIBS = @EXEMPI_LIBS@ +EXIF_CFLAGS = @EXIF_CFLAGS@ +EXIF_LIBS = @EXIF_LIBS@ +FGREP = @FGREP@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HELP_DIR = @HELP_DIR@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +LCMS_CFLAGS = @LCMS_CFLAGS@ +LCMS_LIBS = @LCMS_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBJPEG = @LIBJPEG@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ +LIBXML2_LIBS = @LIBXML2_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATECONFTOOL = @MATECONFTOOL@ +MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@ +MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_STRICT_ALIASING_CFLAGS = @NO_STRICT_ALIASING_CFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OMF_DIR = @OMF_DIR@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYGOBJECT_CODEGEN = @PYGOBJECT_CODEGEN@ +PYGOBJECT_DEFSDIR = @PYGOBJECT_DEFSDIR@ +PYGOBJECT_H2DEF = @PYGOBJECT_H2DEF@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_DEFSDIR = @PYGTK_DEFSDIR@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYTHON = @PYTHON@ +PYTHON_CFLAGS = @PYTHON_CFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_LIB_LOC = @PYTHON_LIB_LOC@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RSVG_CFLAGS = @RSVG_CFLAGS@ +RSVG_LIBS = @RSVG_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XGETTEXT = @XGETTEXT@ +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 = pixmaps icons +DESKTOP_IN_FILES = eom.desktop.in.in +DESKTOP_FILES = $(DESKTOP_IN_FILES:.desktop.in.in=.desktop) +desktopdir = $(datadir)/applications +desktop_DATA = $(DESKTOP_FILES) +schemas_in_files = eom.schemas.in +schemasdir = $(MATECONF_SCHEMA_FILE_DIR) +schemas_DATA = $(schemas_in_files:.schemas.in=.schemas) +gladedir = $(pkgdatadir) +glade_DATA = eom-image-properties-dialog.ui \ + eom-multiple-save-as-dialog.ui \ + eom-preferences-dialog.ui + +uidir = $(datadir)/eom +UI_FILES = \ + eom-ui.xml \ + eom-toolbar.xml + +ui_DATA = $(UI_FILES) +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = eom.pc +gtkrcdir = $(pkgdatadir) +gtkrc_DATA = gtkrc +EXTRA_DIST = \ + $(gtkrc_DATA) \ + $(glade_DATA) \ + $(DESKTOP_IN_FILES) \ + $(schemas_in_files) \ + $(UI_FILES) + +DISTCLEANFILES = \ + $(DESKTOP_FILES) \ + $(schemas_DATA) + +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign data/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +eom.pc: $(top_builddir)/config.status $(srcdir)/eom.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +eom.desktop.in: $(top_builddir)/config.status $(srcdir)/eom.desktop.in.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-desktopDATA: $(desktop_DATA) + @$(NORMAL_INSTALL) + test -z "$(desktopdir)" || $(MKDIR_P) "$(DESTDIR)$(desktopdir)" + @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(desktopdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \ + done + +uninstall-desktopDATA: + @$(NORMAL_UNINSTALL) + @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(desktopdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(desktopdir)" && rm -f $$files +install-gladeDATA: $(glade_DATA) + @$(NORMAL_INSTALL) + test -z "$(gladedir)" || $(MKDIR_P) "$(DESTDIR)$(gladedir)" + @list='$(glade_DATA)'; test -n "$(gladedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(gladedir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(gladedir)" || exit $$?; \ + done + +uninstall-gladeDATA: + @$(NORMAL_UNINSTALL) + @list='$(glade_DATA)'; test -n "$(gladedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(gladedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(gladedir)" && rm -f $$files +install-gtkrcDATA: $(gtkrc_DATA) + @$(NORMAL_INSTALL) + test -z "$(gtkrcdir)" || $(MKDIR_P) "$(DESTDIR)$(gtkrcdir)" + @list='$(gtkrc_DATA)'; test -n "$(gtkrcdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(gtkrcdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(gtkrcdir)" || exit $$?; \ + done + +uninstall-gtkrcDATA: + @$(NORMAL_UNINSTALL) + @list='$(gtkrc_DATA)'; test -n "$(gtkrcdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(gtkrcdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(gtkrcdir)" && rm -f $$files +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files +install-schemasDATA: $(schemas_DATA) + @$(NORMAL_INSTALL) + test -z "$(schemasdir)" || $(MKDIR_P) "$(DESTDIR)$(schemasdir)" + @list='$(schemas_DATA)'; test -n "$(schemasdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(schemasdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(schemasdir)" || exit $$?; \ + done + +uninstall-schemasDATA: + @$(NORMAL_UNINSTALL) + @list='$(schemas_DATA)'; test -n "$(schemasdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(schemasdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(schemasdir)" && rm -f $$files +install-uiDATA: $(ui_DATA) + @$(NORMAL_INSTALL) + test -z "$(uidir)" || $(MKDIR_P) "$(DESTDIR)$(uidir)" + @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(uidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(uidir)" || exit $$?; \ + done + +uninstall-uiDATA: + @$(NORMAL_UNINSTALL) + @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(uidir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(uidir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(gladedir)" "$(DESTDIR)$(gtkrcdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(schemasdir)" "$(DESTDIR)$(uidir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +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-data-local install-desktopDATA \ + install-gladeDATA install-gtkrcDATA install-pkgconfigDATA \ + install-schemasDATA install-uiDATA + +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: uninstall-desktopDATA uninstall-gladeDATA \ + uninstall-gtkrcDATA uninstall-pkgconfigDATA \ + uninstall-schemasDATA uninstall-uiDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-data-local install-desktopDATA \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-gladeDATA install-gtkrcDATA install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-schemasDATA install-strip install-uiDATA \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-desktopDATA uninstall-gladeDATA uninstall-gtkrcDATA \ + uninstall-pkgconfigDATA uninstall-schemasDATA uninstall-uiDATA + + +@INTLTOOL_DESKTOP_RULE@ + +@INTLTOOL_SCHEMAS_RULE@ + +install-data-local: +@MATECONF_SCHEMAS_INSTALL_TRUE@ if test -z "$(DESTDIR)" ; then \ +@MATECONF_SCHEMAS_INSTALL_TRUE@ for p in $(schemas_DATA) ; do \ +@MATECONF_SCHEMAS_INSTALL_TRUE@ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(top_builddir)/data/$$p >&1 > /dev/null; \ +@MATECONF_SCHEMAS_INSTALL_TRUE@ done \ +@MATECONF_SCHEMAS_INSTALL_TRUE@ fi + +-include $(top_srcdir)/git.mk + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/data/eom-image-properties-dialog.ui b/data/eom-image-properties-dialog.ui new file mode 100644 index 0000000..0d50cf3 --- /dev/null +++ b/data/eom-image-properties-dialog.ui @@ -0,0 +1,898 @@ +<?xml version="1.0"?> +<interface> + <!-- interface-requires gtk+ 2.12 --> + <!-- interface-naming-policy toplevel-contextual --> + <object class="GtkDialog" id="eom_image_properties_dialog"> + <property name="border_width">5</property> + <property name="title" translatable="yes">Image Properties</property> + <property name="icon_name">gtk-properties</property> + <property name="type_hint">dialog</property> + <property name="has_separator">False</property> + <child internal-child="vbox"> + <object class="GtkVBox" id="image-properties-dialog-vbox"> + <property name="visible">True</property> + <property name="spacing">2</property> + <child> + <object class="GtkNotebook" id="notebook"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="border_width">5</property> + <child> + <object class="GtkHBox" id="general_box"> + <property name="visible">True</property> + <child> + <object class="GtkVBox" id="vbox27"> + <property name="visible">True</property> + <property name="border_width">10</property> + <child> + <object class="GtkImage" id="thumbnail_image"> + <property name="width_request">100</property> + <property name="height_request">100</property> + <property name="visible">True</property> + <property name="stock">gtk-missing-image</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox19"> + <property name="visible">True</property> + <property name="border_width">10</property> + <property name="spacing">7</property> + <child> + <object class="GtkVBox" id="vbox29"> + <property name="visible">True</property> + <property name="spacing">5</property> + <child> + <object class="GtkLabel" id="label36"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Name:</property> + <property name="justify">right</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label37"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Width:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label38"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Height:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label39"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Type:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label40"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Bytes:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label73"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Location:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox30"> + <property name="visible">True</property> + <property name="spacing">5</property> + <child> + <object class="GtkLabel" id="name_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="selectable">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="width_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="selectable">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="height_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="selectable">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="type_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="selectable">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="bytes_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="selectable">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="location_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0.47999998927116394</property> + <property name="selectable">True</property> + <property name="ellipsize">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="label" translatable="yes">General</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="exif_box"> + <property name="visible">True</property> + <child> + <object class="GtkHBox" id="hbox22"> + <property name="visible">True</property> + <property name="border_width">10</property> + <property name="spacing">7</property> + <child> + <object class="GtkVBox" id="vbox38"> + <property name="visible">True</property> + <child> + <object class="GtkVBox" id="vbox31"> + <property name="visible">True</property> + <property name="spacing">5</property> + <child> + <object class="GtkLabel" id="label88"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Aperture Value:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label83"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Exposure Time:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label96"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Focal Length:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label95"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Flash:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label94"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">ISO Speed Rating:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label93"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Metering Mode:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label92"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Camera Model:</property> + <property name="justify">right</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">6</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label91"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Date/Time:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">7</property> + </packing> + </child> + </object> + <packing> + <property name="padding">5</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="xmp_box"> + <property name="visible">True</property> + <property name="spacing">5</property> + <child> + <object class="GtkLabel" id="label111"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Description:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label110"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Location:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label112"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Keywords:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label113"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Author:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label114"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Copyright:</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox40"> + <property name="visible">True</property> + <child> + <object class="GtkVBox" id="vbox32"> + <property name="visible">True</property> + <property name="spacing">5</property> + <child> + <object class="GtkLabel" id="exif_aperture_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + <property name="justify">right</property> + <property name="selectable">True</property> + <property name="ellipsize">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="exif_exposure_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + <property name="selectable">True</property> + <property name="ellipsize">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="exif_focal_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + <property name="selectable">True</property> + <property name="ellipsize">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="exif_flash_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + <property name="selectable">True</property> + <property name="ellipsize">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="exif_iso_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + <property name="selectable">True</property> + <property name="ellipsize">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="exif_metering_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + <property name="selectable">True</property> + <property name="ellipsize">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="exif_model_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + <property name="selectable">True</property> + <property name="ellipsize">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">6</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="exif_date_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + <property name="selectable">True</property> + <property name="ellipsize">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">7</property> + </packing> + </child> + </object> + <packing> + <property name="padding">5</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="xmp_box_label"> + <property name="visible">True</property> + <property name="spacing">5</property> + <child> + <object class="GtkLabel" id="xmp_description_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + <property name="justify">right</property> + <property name="selectable">True</property> + <property name="ellipsize">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="xmp_location_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + <property name="selectable">True</property> + <property name="ellipsize">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="xmp_keywords_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + <property name="selectable">True</property> + <property name="ellipsize">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="xmp_creator_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + <property name="selectable">True</property> + <property name="ellipsize">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="xmp_rights_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + <property name="selectable">True</property> + <property name="ellipsize">end</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkExpander" id="exif_details_expander"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <child> + <placeholder/> + </child> + <child type="label"> + <object class="GtkLabel" id="details_expander"> + <property name="visible">True</property> + <property name="label" translatable="yes">Details</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="padding">3</property> + <property name="pack_type">end</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label44"> + <property name="visible">True</property> + <property name="label" translatable="yes">Metadata</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="metadata_details_box"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="md_details_label"> + <property name="visible">True</property> + <property name="label" translatable="yes">Details</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child internal-child="action_area"> + <object class="GtkHButtonBox" id="dialog-action_area1"> + <property name="visible">True</property> + <property name="layout_style">end</property> + <child> + <object class="GtkButton" id="previous_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <child> + <object class="GtkHBox" id="hbox21"> + <property name="visible">True</property> + <property name="spacing">2</property> + <child> + <object class="GtkImage" id="image2"> + <property name="visible">True</property> + <property name="stock">gtk-go-back</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label43"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Previous</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="next_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <child> + <object class="GtkHBox" id="hbox20"> + <property name="visible">True</property> + <property name="spacing">2</property> + <child> + <object class="GtkImage" id="image1"> + <property name="visible">True</property> + <property name="stock">gtk-go-forward</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label42"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Next</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="close_button"> + <property name="label">gtk-close</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="0">previous_button</action-widget> + <action-widget response="0">next_button</action-widget> + <action-widget response="-7">close_button</action-widget> + </action-widgets> + </object> +</interface> diff --git a/data/eom-multiple-save-as-dialog.ui b/data/eom-multiple-save-as-dialog.ui new file mode 100644 index 0000000..dadc119 --- /dev/null +++ b/data/eom-multiple-save-as-dialog.ui @@ -0,0 +1,595 @@ +<?xml version="1.0"?> +<!--*- mode: xml -*--> +<interface> + <object class="GtkAdjustment" id="adjustment1"> + <property name="upper">10000000</property> + <property name="lower">0</property> + <property name="page_increment">10</property> + <property name="step_increment">1</property> + <property name="page_size">0</property> + <property name="value">1</property> + </object> + <object class="GtkDialog" id="eom_multiple_save_as_dialog"> + <property name="border_width">5</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="title" translatable="yes">Save As</property> + <property name="type">GTK_WINDOW_TOPLEVEL</property> + <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property> + <property name="modal">False</property> + <property name="resizable">True</property> + <property name="destroy_with_parent">False</property> + <property name="decorated">True</property> + <property name="skip_taskbar_hint">False</property> + <property name="skip_pager_hint">False</property> + <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> + <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> + <property name="focus_on_map">True</property> + <property name="urgency_hint">False</property> + <property name="has_separator">False</property> + <child internal-child="vbox"> + <object class="GtkVBox" id="dialog-vbox4"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">2</property> + <child internal-child="action_area"> + <object class="GtkHButtonBox" id="dialog-action_area4"> + <property name="visible">True</property> + <property name="layout_style">GTK_BUTTONBOX_END</property> + <child> + <object class="GtkButton" id="cancel_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-cancel</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + </object> + </child> + <child> + <object class="GtkButton" id="save_as_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-save-as</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + </object> + </child> + </object> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="pack_type">GTK_PACK_END</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">6</property> + <child> + <object class="GtkFrame" id="frame2"> + <property name="visible">True</property> + <property name="label_xalign">0</property> + <property name="label_yalign">0.5</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + <child> + <object class="GtkAlignment" id="alignment3"> + <property name="visible">True</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xscale">1</property> + <property name="yscale">1</property> + <property name="top_padding">6</property> + <property name="bottom_padding">6</property> + <property name="left_padding">12</property> + <property name="right_padding">0</property> + <child> + <object class="GtkTable" id="table3"> + <property name="visible">True</property> + <property name="n_rows">3</property> + <property name="n_columns">3</property> + <property name="homogeneous">False</property> + <property name="row_spacing">6</property> + <property name="column_spacing">6</property> + <child> + <object class="GtkVBox" id="vbox2"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + <child> + <object class="GtkLabel" id="label12"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>%f:</b> original filename</property> + <property name="use_underline">False</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + <attributes> + <attribute name="style" value="PANGO_STYLE_ITALIC"/> + <attribute name="scale" value="0.8"/><!-- PANGO_SCALE_SMALL --> + </attributes> + </object> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label17"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>%n:</b> counter</property> + <property name="use_underline">False</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + <attributes> + <attribute name="style" value="PANGO_STYLE_ITALIC"/> + <attribute name="scale" value="0.8"/><!-- PANGO_SCALE_SMALL --> + </attributes> + </object> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">3</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="format_combobox"> + <property name="visible">True</property> + <property name="add_tearoffs">False</property> + <property name="focus_on_click">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="token_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text">%f</property> + <property name="has_frame">True</property> + <property name="invisible_char">*</property> + <property name="activates_default">False</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label11"> + <property name="visible">True</property> + <property name="label" translatable="yes">Filename format:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkFileChooserButton" id="dir_chooser"> + <property name="visible">True</property> + <property name="title" translatable="yes">Choose a folder</property> + <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property> + <property name="local_only">False</property> + <property name="show_hidden">False</property> + <property name="do_overwrite_confirmation">False</property> + <property name="width_chars">-1</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">3</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label10"> + <property name="visible">True</property> + <property name="label" translatable="yes">Destination folder:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="label" translatable="yes">File Path Specifications</property> + <property name="use_underline">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frame3"> + <property name="visible">True</property> + <property name="label_xalign">0</property> + <property name="label_yalign">0.5</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + <child> + <object class="GtkAlignment" id="alignment4"> + <property name="visible">True</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xscale">1</property> + <property name="yscale">1</property> + <property name="top_padding">6</property> + <property name="bottom_padding">6</property> + <property name="left_padding">12</property> + <property name="right_padding">0</property> + <child> + <object class="GtkVBox" id="vbox33"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">2</property> + <child> + <object class="GtkHBox" id="hbox23"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label23"> + <property name="visible">True</property> + <property name="label" translatable="yes">Start counter at:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="counter_spin"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="climb_rate">1</property> + <property name="digits">0</property> + <property name="numeric">True</property> + <property name="update_policy">GTK_UPDATE_ALWAYS</property> + <property name="snap_to_ticks">False</property> + <property name="wrap">False</property> + <property name="adjustment">adjustment1</property> + </object> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="replace_spaces_check"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Replace spaces with underscores</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="active">False</property> + <property name="inconsistent">False</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="padding">2</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="label" translatable="yes">Options</property> + <property name="use_underline">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frame4"> + <property name="visible">True</property> + <property name="label_xalign">0</property> + <property name="label_yalign">0.5</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + <child> + <object class="GtkAlignment" id="alignment5"> + <property name="visible">True</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xscale">1</property> + <property name="yscale">1</property> + <property name="top_padding">6</property> + <property name="bottom_padding">6</property> + <property name="left_padding">12</property> + <property name="right_padding">0</property> + <child> + <object class="GtkTable" id="table5"> + <property name="visible">True</property> + <property name="n_rows">2</property> + <property name="n_columns">2</property> + <property name="homogeneous">False</property> + <property name="row_spacing">6</property> + <property name="column_spacing">6</property> + <child> + <object class="GtkLabel" id="preview_label"> + <property name="visible">True</property> + <property name="label">label</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="preview_label_from"> + <property name="visible">True</property> + <property name="label">label</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label116"> + <property name="visible">True</property> + <property name="label" translatable="yes">Rename from:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label115"> + <property name="visible">True</property> + <property name="label" translatable="yes">To:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="label" translatable="yes">File Name Preview</property> + <property name="use_underline">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + <attributes> + <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </object> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="-6">cancel_button</action-widget> + <action-widget response="-5">save_as_button</action-widget> + </action-widgets> + </object> +</interface> diff --git a/data/eom-preferences-dialog.ui b/data/eom-preferences-dialog.ui new file mode 100644 index 0000000..6509845 --- /dev/null +++ b/data/eom-preferences-dialog.ui @@ -0,0 +1,645 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <requires lib="gtk+" version="2.20"/> + <!-- interface-naming-policy toplevel-contextual --> + <object class="GtkAdjustment" id="adjustment1"> + <property name="lower">1</property> + <property name="upper">100</property> + <property name="value">5</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkDialog" id="eom_preferences_dialog"> + <property name="border_width">5</property> + <property name="title" translatable="yes">Eye of MATE Preferences</property> + <property name="type_hint">dialog</property> + <property name="has_separator">False</property> + <child internal-child="vbox"> + <object class="GtkVBox" id="dialog-vbox1"> + <property name="visible">True</property> + <property name="spacing">2</property> + <child> + <object class="GtkNotebook" id="notebook"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="border_width">5</property> + <child> + <object class="GtkVBox" id="vbox5"> + <property name="visible">True</property> + <property name="border_width">12</property> + <property name="spacing">18</property> + <child> + <object class="GtkVBox" id="vbox6"> + <property name="visible">True</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Image Enhancements</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox_interpolate"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="label_interpolate"> + <property name="visible">True</property> + <property name="label"> </property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="interpolate_check"> + <property name="label" translatable="yes">Smooth images when zoomed-_out</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox_extrapolate"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="label_extrapolate"> + <property name="visible">True</property> + <property name="label"> </property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="extrapolate_check"> + <property name="label" translatable="yes">Smooth images when zoomed-_in</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hboxautorotate"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="labelautopad"> + <property name="visible">True</property> + <property name="label"> </property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="autorotate_check"> + <property name="label" translatable="yes">_Automatic orientation</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Background</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="left_padding">16</property> + <child> + <object class="GtkHBox" id="hbox1"> + <property name="visible">True</property> + <property name="spacing">12</property> + <child> + <object class="GtkCheckButton" id=" |