summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPerberos <[email protected]>2011-11-06 19:30:49 -0300
committerPerberos <[email protected]>2011-11-06 19:30:49 -0300
commita8d28a6ce7e0c56dacba5d527d9134573a008902 (patch)
tree8852602004b5a13cc5d1ce3ecd7a314be81d1198
downloadeom-a8d28a6ce7e0c56dacba5d527d9134573a008902.tar.bz2
eom-a8d28a6ce7e0c56dacba5d527d9134573a008902.tar.xz
inicial
-rw-r--r--AUTHORS11
-rw-r--r--COPYING340
-rw-r--r--HACKING30
-rw-r--r--MAINTAINERS7
-rw-r--r--Makefile.am58
-rw-r--r--NEWS3402
-rw-r--r--README89
-rw-r--r--THANKS38
-rw-r--r--TODO19
-rwxr-xr-xautogen.sh23
-rw-r--r--bindings/Makefile.am7
-rw-r--r--bindings/Makefile.in656
-rw-r--r--bindings/python/Makefile.am77
-rw-r--r--bindings/python/Makefile.in673
-rw-r--r--bindings/python/eom.defs1222
-rw-r--r--bindings/python/eom.override126
-rw-r--r--configure.ac500
-rw-r--r--cut-n-paste/Makefile.am3
-rw-r--r--cut-n-paste/Makefile.in655
-rw-r--r--cut-n-paste/toolbar-editor/Makefile.am109
-rw-r--r--cut-n-paste/toolbar-editor/Makefile.in749
-rw-r--r--cut-n-paste/toolbar-editor/egg-editable-toolbar.c1810
-rw-r--r--cut-n-paste/toolbar-editor/egg-editable-toolbar.h91
-rw-r--r--cut-n-paste/toolbar-editor/egg-toolbar-editor.c671
-rw-r--r--cut-n-paste/toolbar-editor/egg-toolbar-editor.h63
-rw-r--r--cut-n-paste/toolbar-editor/egg-toolbars-model.c987
-rw-r--r--cut-n-paste/toolbar-editor/egg-toolbars-model.h190
-rw-r--r--cut-n-paste/toolbar-editor/eggmarshalers.list1
-rw-r--r--cut-n-paste/totem-screensaver/Makefile.am15
-rw-r--r--cut-n-paste/totem-screensaver/Makefile.in605
-rw-r--r--cut-n-paste/totem-screensaver/README3
-rw-r--r--cut-n-paste/totem-screensaver/totem-scrsaver.c556
-rw-r--r--cut-n-paste/totem-screensaver/totem-scrsaver.h57
-rw-r--r--data/Makefile.am55
-rw-r--r--data/Makefile.in863
-rw-r--r--data/eom-image-properties-dialog.ui898
-rw-r--r--data/eom-multiple-save-as-dialog.ui595
-rw-r--r--data/eom-preferences-dialog.ui645
-rw-r--r--data/eom-toolbar.xml35
-rw-r--r--data/eom-ui.xml145
-rw-r--r--data/eom.desktop.in.in16
-rw-r--r--data/eom.pc.in11
-rw-r--r--data/eom.schemas.in300
-rw-r--r--data/gtkrc9
-rw-r--r--data/icons/16x16/Makefile.am19
-rw-r--r--data/icons/16x16/Makefile.in542
-rw-r--r--data/icons/16x16/actions/eom-image-collection.pngbin0 -> 611 bytes
-rw-r--r--data/icons/16x16/actions/eom-plugin.pngbin0 -> 719 bytes
-rw-r--r--data/icons/16x16/actions/eom-plugin.svg213
-rw-r--r--data/icons/16x16/actions/slideshow-play.pngbin0 -> 663 bytes
-rw-r--r--data/icons/16x16/actions/slideshow-play.svg353
-rw-r--r--data/icons/16x16/apps/eom.pngbin0 -> 732 bytes
-rw-r--r--data/icons/16x16/apps/eom.svg339
-rw-r--r--data/icons/22x22/Makefile.am19
-rw-r--r--data/icons/22x22/Makefile.in542
-rw-r--r--data/icons/22x22/actions/eom-image-collection.pngbin0 -> 653 bytes
-rw-r--r--data/icons/22x22/actions/eom-plugin.pngbin0 -> 1079 bytes
-rw-r--r--data/icons/22x22/actions/eom-plugin.svg377
-rw-r--r--data/icons/22x22/actions/slideshow-play.pngbin0 -> 979 bytes
-rw-r--r--data/icons/22x22/actions/slideshow-play.svg474
-rw-r--r--data/icons/22x22/apps/eom.pngbin0 -> 1342 bytes
-rw-r--r--data/icons/22x22/apps/eom.svg530
-rw-r--r--data/icons/24x24/Makefile.am11
-rw-r--r--data/icons/24x24/Makefile.in535
-rw-r--r--data/icons/24x24/actions/eom-image-collection.pngbin0 -> 638 bytes
-rw-r--r--data/icons/24x24/actions/slideshow-play.pngbin0 -> 983 bytes
-rw-r--r--data/icons/24x24/apps/eom.pngbin0 -> 1380 bytes
-rw-r--r--data/icons/32x32/Makefile.am20
-rw-r--r--data/icons/32x32/Makefile.in543
-rw-r--r--data/icons/32x32/actions/eom-image-collection.pngbin0 -> 1141 bytes
-rw-r--r--data/icons/32x32/actions/eom-image-collection.svg266
-rw-r--r--data/icons/32x32/actions/eom-plugin.pngbin0 -> 1462 bytes
-rw-r--r--data/icons/32x32/actions/eom-plugin.svg527
-rw-r--r--data/icons/32x32/actions/slideshow-play.pngbin0 -> 1337 bytes
-rw-r--r--data/icons/32x32/actions/slideshow-play.svg582
-rw-r--r--data/icons/32x32/apps/eom.pngbin0 -> 2330 bytes
-rw-r--r--data/icons/32x32/apps/eom.svg537
-rw-r--r--data/icons/48x48/Makefile.am7
-rw-r--r--data/icons/48x48/Makefile.in506
-rw-r--r--data/icons/48x48/actions/slideshow-play.pngbin0 -> 1717 bytes
-rw-r--r--data/icons/Makefile.am16
-rw-r--r--data/icons/Makefile.in670
-rw-r--r--data/icons/scalable/Makefile.am12
-rw-r--r--data/icons/scalable/Makefile.in536
-rw-r--r--data/icons/scalable/actions/eom-image-collection.svg335
-rw-r--r--data/icons/scalable/actions/eom-plugin.svg339
-rw-r--r--data/icons/scalable/actions/slideshow-play.svg594
-rw-r--r--data/icons/scalable/apps/eom.svg548
-rw-r--r--data/pixmaps/Makefile.am9
-rw-r--r--data/pixmaps/Makefile.in507
-rw-r--r--data/pixmaps/thumbnail-frame.pngbin0 -> 908 bytes
-rw-r--r--distro/archlinux/PKGBUILD34
-rw-r--r--distro/archlinux/mate-image-viewer.install22
-rwxr-xr-xdistro/ubuntu/build30
-rwxr-xr-xdistro/ubuntu/postinst8
-rwxr-xr-xdistro/ubuntu/postrm8
-rwxr-xr-xdistro/ubuntu/preinst9
-rwxr-xr-xdistro/ubuntu/prerm12
-rw-r--r--doc/Makefile.am4
-rw-r--r--doc/Makefile.in657
-rw-r--r--doc/reference/Makefile.am127
-rw-r--r--doc/reference/Makefile.in837
-rw-r--r--doc/reference/eom-docs.sgml.in84
-rw-r--r--doc/reference/eom-overrides.txt0
-rw-r--r--doc/reference/eom-sections.txt758
-rw-r--r--doc/reference/tmpl/eom-application.sgml162
-rw-r--r--doc/reference/tmpl/eom-config-keys.sgml176
-rw-r--r--doc/reference/tmpl/eom-debug.sgml157
-rw-r--r--doc/reference/tmpl/eom-dialog.sgml69
-rw-r--r--doc/reference/tmpl/eom-error-message-area.sgml41
-rw-r--r--doc/reference/tmpl/eom-exif-details.sgml55
-rw-r--r--doc/reference/tmpl/eom-exif-util.sgml43
-rw-r--r--doc/reference/tmpl/eom-file-chooser.sgml46
-rw-r--r--doc/reference/tmpl/eom-image-save-info.sgml64
-rw-r--r--doc/reference/tmpl/eom-image.sgml414
-rw-r--r--doc/reference/tmpl/eom-job-queue.sgml47
-rw-r--r--doc/reference/tmpl/eom-jobs.sgml463
-rw-r--r--doc/reference/tmpl/eom-list-store.sgml166
-rw-r--r--doc/reference/tmpl/eom-metadata-reader-jpg.sgml28
-rw-r--r--doc/reference/tmpl/eom-metadata-reader-png.sgml28
-rw-r--r--doc/reference/tmpl/eom-metadata-reader.sgml140
-rw-r--r--doc/reference/tmpl/eom-pixbuf-util.sgml58
-rw-r--r--doc/reference/tmpl/eom-plugin-engine.sgml179
-rw-r--r--doc/reference/tmpl/eom-plugin-manager.sgml37
-rw-r--r--doc/reference/tmpl/eom-plugin.sgml121
-rw-r--r--doc/reference/tmpl/eom-preferences-dialog.sgml43
-rw-r--r--doc/reference/tmpl/eom-print-image-setup.sgml60
-rw-r--r--doc/reference/tmpl/eom-print-preview.sgml153
-rw-r--r--doc/reference/tmpl/eom-print.sgml67
-rw-r--r--doc/reference/tmpl/eom-properties-dialog.sgml78
-rw-r--r--doc/reference/tmpl/eom-save-as-dialog-helper.sgml42
-rw-r--r--doc/reference/tmpl/eom-scroll-view.sgml224
-rw-r--r--doc/reference/tmpl/eom-session.sgml48
-rw-r--r--doc/reference/tmpl/eom-sidebar.sgml104
-rw-r--r--doc/reference/tmpl/eom-statusbar.sgml65
-rw-r--r--doc/reference/tmpl/eom-thumb-nav.sgml100
-rw-r--r--doc/reference/tmpl/eom-thumb-view.sgml122
-rw-r--r--doc/reference/tmpl/eom-thumbnail.sgml73
-rw-r--r--doc/reference/tmpl/eom-transform.sgml136
-rw-r--r--doc/reference/tmpl/eom-unused.sgml66
-rw-r--r--doc/reference/tmpl/eom-uri-converter.sgml174
-rw-r--r--doc/reference/tmpl/eom-util.sgml114
-rw-r--r--doc/reference/tmpl/eom-window.sgml196
-rw-r--r--doc/reference/tmpl/uta.sgml85
-rw-r--r--doc/reference/tmpl/zoom.sgml49
-rw-r--r--doc/reference/version.xml.in1
-rw-r--r--jpegutils/Makefile.am23
-rw-r--r--jpegutils/Makefile.in601
-rw-r--r--jpegutils/README.6b385
-rw-r--r--jpegutils/README.8a325
-rw-r--r--jpegutils/jpegint-8a.h407
-rw-r--r--jpegutils/jpegint.h7
-rw-r--r--jpegutils/transupp-6b.c992
-rw-r--r--jpegutils/transupp-6b.h157
-rw-r--r--jpegutils/transupp-8a.c1609
-rw-r--r--jpegutils/transupp-8a.h215
-rw-r--r--jpegutils/transupp.h5
-rw-r--r--plugins/ChangeLog159
-rw-r--r--plugins/Makefile.am58
-rw-r--r--plugins/Makefile.in767
-rw-r--r--plugins/fullscreen/eom-fullscreen-plugin.c120
-rw-r--r--plugins/fullscreen/eom-fullscreen-plugin.h53
-rw-r--r--plugins/fullscreen/fullscreen.eom-plugin.desktop.in9
-rw-r--r--plugins/reload/eom-reload-plugin.c151
-rw-r--r--plugins/reload/eom-reload-plugin.h53
-rw-r--r--plugins/reload/reload.eom-plugin.desktop.in9
-rw-r--r--plugins/statusbar-date/eom-statusbar-date-plugin.c184
-rw-r--r--plugins/statusbar-date/eom-statusbar-date-plugin.h74
-rw-r--r--plugins/statusbar-date/statusbar-date.eom-plugin.desktop.in9
-rw-r--r--po/ChangeLog8127
-rw-r--r--po/LINGUAS98
-rw-r--r--po/Makefile.in.in217
-rw-r--r--po/POTFILES.in36
-rw-r--r--po/POTFILES.skip6
-rw-r--r--po/af.po1571
-rw-r--r--po/am.po1176
-rw-r--r--po/ar.po1582
-rw-r--r--po/as.po1422
-rw-r--r--po/ast.po1490
-rw-r--r--po/az.po971
-rw-r--r--po/be.po1701
-rw-r--r--po/[email protected]1323
-rw-r--r--po/bg.po1550
-rw-r--r--po/bn.po1780
-rw-r--r--po/bn_IN.po1604
-rw-r--r--po/br.po1299
-rw-r--r--po/bs.po700
-rw-r--r--po/ca.po2641
-rw-r--r--po/[email protected]2570
-rw-r--r--po/cs.po1550
-rw-r--r--po/cy.po1427
-rw-r--r--po/da.po1605
-rw-r--r--po/de.po1610
-rw-r--r--po/dz.po1367
-rw-r--r--po/el.po1460
-rw-r--r--po/[email protected]1192
-rw-r--r--po/en_CA.po1144
-rw-r--r--po/en_GB.po1769
-rw-r--r--po/es.po1626
-rw-r--r--po/et.po1217
-rw-r--r--po/eu.po1521
-rw-r--r--po/fa.po1166
-rw-r--r--po/fi.po2114
-rw-r--r--po/fr.po1569
-rw-r--r--po/fur.po1277
-rw-r--r--po/ga.po1358
-rw-r--r--po/gl.po1580
-rw-r--r--po/gu.po1420
-rw-r--r--po/he.po1584
-rw-r--r--po/hi.po1388
-rw-r--r--po/hr.po1270
-rw-r--r--po/hu.po1531
-rw-r--r--po/id.po1548
-rw-r--r--po/is.po960
-rw-r--r--po/it.po1582
-rw-r--r--po/ja.po1558
-rw-r--r--po/ka.po829
-rw-r--r--po/kk.po1404
-rw-r--r--po/kn.po1479
-rw-r--r--po/ko.po1457
-rw-r--r--po/ks.po1270
-rw-r--r--po/ku.po1297
-rw-r--r--po/lt.po1595
-rw-r--r--po/lv.po1555
-rw-r--r--po/mai.po1289
-rw-r--r--po/mg.po904
-rw-r--r--po/mk.po1305
-rw-r--r--po/ml.po1525
-rw-r--r--po/mn.po1216
-rw-r--r--po/mr.po1390
-rw-r--r--po/ms.po873
-rw-r--r--po/nb.po1504
-rw-r--r--po/nds.po1343
-rw-r--r--po/ne.po1097
-rw-r--r--po/nl.po1574
-rw-r--r--po/nn.po1233
-rw-r--r--po/nso.po734
-rw-r--r--po/oc.po1517
-rw-r--r--po/or.po1568
-rw-r--r--po/pa.po1546
-rw-r--r--po/pl.po1540
-rw-r--r--po/ps.po1213
-rw-r--r--po/pt.po2020
-rw-r--r--po/pt_BR.po1656
-rw-r--r--po/ro.po1511
-rw-r--r--po/ru.po1505
-rw-r--r--po/rw.po984
-rw-r--r--po/si.po1028
-rw-r--r--po/sk.po1229
-rw-r--r--po/sl.po1501
-rw-r--r--po/sq.po1295
-rw-r--r--po/sr.po1659
-rw-r--r--po/[email protected]1659
-rw-r--r--po/sv.po1910
-rw-r--r--po/ta.po1486
-rw-r--r--po/te.po1507
-rw-r--r--po/th.po1997
-rw-r--r--po/tk.po876
-rw-r--r--po/tr.po1407
-rw-r--r--po/ug.po816
-rw-r--r--po/uk.po1473
-rw-r--r--po/uz.po1214
-rw-r--r--po/[email protected]1214
-rw-r--r--po/vi.po1438
-rw-r--r--po/wa.po892
-rw-r--r--po/xh.po816
-rw-r--r--po/zh_CN.po1519
-rw-r--r--po/zh_HK.po1539
-rw-r--r--po/zh_TW.po1570
-rw-r--r--po/zu.po730
-rw-r--r--src/Makefile.am239
-rw-r--r--src/Makefile.in1326
-rw-r--r--src/eom-application-service.xml23
-rw-r--r--src/eom-application.c566
-rw-r--r--src/eom-application.h118
-rw-r--r--src/eom-close-confirmation-dialog.c698
-rw-r--r--src/eom-close-confirmation-dialog.h79
-rw-r--r--src/eom-config-keys.h63
-rw-r--r--src/eom-debug.c160
-rw-r--r--src/eom-debug.h75
-rw-r--r--src/eom-dialog.c237
-rw-r--r--src/eom-dialog.h76
-rw-r--r--src/eom-enum-types.c.template39
-rw-r--r--src/eom-enum-types.h.template27
-rw-r--r--src/eom-enums.h37
-rw-r--r--src/eom-error-message-area.c192
-rw-r--r--src/eom-error-message-area.h37
-rw-r--r--src/eom-exif-details.c572
-rw-r--r--src/eom-exif-details.h72
-rw-r--r--src/eom-exif-util.c214
-rw-r--r--src/eom-exif-util.h41
-rw-r--r--src/eom-file-chooser.c497
-rw-r--r--src/eom-file-chooser.h60
-rw-r--r--src/eom-image-jpeg.c518
-rw-r--r--src/eom-image-jpeg.h22
-rw-r--r--src/eom-image-private.h96
-rw-r--r--src/eom-image-save-info.c150
-rw-r--r--src/eom-image-save-info.h54
-rw-r--r--src/eom-image.c2237
-rw-r--r--src/eom-image.h218
-rw-r--r--src/eom-job-queue.c238
-rw-r--r--src/eom-job-queue.h42
-rw-r--r--src/eom-jobs.c885
-rw-r--r--src/eom-jobs.h275
-rw-r--r--src/eom-list-store.c931
-rw-r--r--src/eom-list-store.h113
-rw-r--r--src/eom-marshal.list2
-rw-r--r--src/eom-metadata-reader-jpg.c673
-rw-r--r--src/eom-metadata-reader-jpg.h55
-rw-r--r--src/eom-metadata-reader-png.c648
-rw-r--r--src/eom-metadata-reader-png.h55
-rw-r--r--src/eom-metadata-reader.c150
-rw-r--r--src/eom-metadata-reader.h112
-rw-r--r--src/eom-module.c167
-rw-r--r--src/eom-module.h72
-rw-r--r--src/eom-pixbuf-util.c136
-rw-r--r--src/eom-pixbuf-util.h20
-rw-r--r--src/eom-plugin-engine.c943
-rw-r--r--src/eom-plugin-engine.h89
-rw-r--r--src/eom-plugin-manager.c917
-rw-r--r--src/eom-plugin-manager.h61
-rw-r--r--src/eom-plugin.c108
-rw-r--r--src/eom-plugin.h222
-rw-r--r--src/eom-preferences-dialog.c489
-rw-r--r--src/eom-preferences-dialog.h66
-rw-r--r--src/eom-print-image-setup.c1074
-rw-r--r--src/eom-print-image-setup.h71
-rw-r--r--src/eom-print-preview.c1226
-rw-r--r--src/eom-print-preview.h84
-rw-r--r--src/eom-print.c369
-rw-r--r--src/eom-print.h49
-rw-r--r--src/eom-properties-dialog.c834
-rw-r--r--src/eom-properties-dialog.h80
-rw-r--r--src/eom-python-module.c527
-rw-r--r--src/eom-python-module.h72
-rw-r--r--src/eom-python-plugin.c282
-rw-r--r--src/eom-python-plugin.h55
-rw-r--r--src/eom-save-as-dialog-helper.c311
-rw-r--r--src/eom-save-as-dialog-helper.h20
-rw-r--r--src/eom-scroll-view.c2633
-rw-r--r--src/eom-scroll-view.h73
-rw-r--r--src/eom-session.c52
-rw-r--r--src/eom-session.h46
-rw-r--r--src/eom-sidebar.c594
-rw-r--r--src/eom-sidebar.h82
-rw-r--r--src/eom-statusbar.c157
-rw-r--r--src/eom-statusbar.h71
-rw-r--r--src/eom-thumb-nav.c591
-rw-r--r--src/eom-thumb-nav.h79
-rw-r--r--src/eom-thumb-view.c918
-rw-r--r--src/eom-thumb-view.h87
-rw-r--r--src/eom-thumbnail.c509
-rw-r--r--src/eom-thumbnail.h48
-rw-r--r--src/eom-transform.c418
-rw-r--r--src/eom-transform.h75
-rw-r--r--src/eom-uri-converter.c988
-rw-r--r--src/eom-uri-converter.h107
-rw-r--r--src/eom-util.c348
-rw-r--r--src/eom-util.h72
-rw-r--r--src/eom-window.c5796
-rw-r--r--src/eom-window.h122
-rw-r--r--src/main.c270
-rw-r--r--src/uta.c1116
-rw-r--r--src/uta.h75
-rw-r--r--src/zoom.c118
-rw-r--r--src/zoom.h38
366 files changed, 222093 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..d4eb7ef
--- /dev/null
+++ b/AUTHORS
@@ -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]>
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..ba35a54
--- /dev/null
+++ b/COPYING
@@ -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.
diff --git a/HACKING b/HACKING
new file mode 100644
index 0000000..4e7fe8c
--- /dev/null
+++ b/HACKING
@@ -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
+Userid: csaavedra
+
+Felix Riemann
+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
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..6d1b4d6
--- /dev/null
+++ b/NEWS
@@ -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ć [[email protected]]
+- 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ć [[email protected]]
+- 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 [[email protected]]
+- 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 [[email protected]]
+- 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 [[email protected]]
+- 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ć [[email protected]]
+- 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 [[email protected]]
+- 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, [email protected]]
+- 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 [[email protected]]
+- 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, [email protected]]
+- 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 [[email protected]]
+- 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, [email protected]]
+- 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 [[email protected]]
+- 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 [[email protected]]
+- 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 [[email protected]]
+- 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 [[email protected]]
+- 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 [[email protected]]
+- 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 [[email protected]]
+- 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, [email protected]]
+- 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, [email protected]]
+- 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, [email protected]), 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, [email protected]),
+ 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, [email protected]),
+ 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, [email protected]), 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, [email protected]),
+ 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, [email protected]), 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, [email protected]), Å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, [email protected]), 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 ([email protected]),
+ 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.
diff --git a/README b/README
new file mode 100644
index 0000000..922337f
--- /dev/null
+++ b/README
@@ -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])
diff --git a/THANKS b/THANKS
new file mode 100644
index 0000000..b4ac2ae
--- /dev/null
+++ b/THANKS
@@ -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.
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..add5c5b
--- /dev/null
+++ b/TODO
@@ -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.
+
+# 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.
+
+pkgdatadir = $(datadir)/@[email protected]
+pkgincludedir = $(includedir)/@[email protected]
+pkglibdir = $(libdir)/@[email protected]
+pkglibexecdir = $(libexecdir)/@[email protected]
+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 = @[email protected]
+host_triplet = @[email protected]
+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 " [email protected];
+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 = @[email protected]
+ACLOCAL_AMFLAGS = @[email protected]
+ALL_LINGUAS = @[email protected]
+AM_DEFAULT_VERBOSITY = @[email protected]
+AUTOCONF = @[email protected]
+AUTOHEADER = @[email protected]
+AUTOMAKE = @[email protected]
+CATALOGS = @[email protected]
+CATOBJEXT = @[email protected]
+CCDEPMODE = @[email protected]
+CPPFLAGS = @[email protected]
+CYGPATH_W = @[email protected]
+DATADIRNAME = @[email protected]
+DBUS_BINDING_TOOL = @[email protected]
+DBUS_CFLAGS = @[email protected]
+DBUS_LIBS = @[email protected]
+DISABLE_DEPRECATED = @[email protected]
+DISTCHECK_CONFIGURE_FLAGS = @[email protected]
+DLLTOOL = @[email protected]
+DOC_USER_FORMATS = @[email protected]
+DSYMUTIL = @[email protected]
+DUMPBIN = @[email protected]
+EOM_API_VERSION = @[email protected]
+EOM_CFLAGS = @[email protected]
+EOM_DOC_EXIF_START = @[email protected]
+EOM_DOC_EXIF_STOP = @[email protected]
+EOM_LIBS = @[email protected]
+EOM_MAJOR_VERSION = @[email protected]
+EOM_MICRO_VERSION = @[email protected]
+EOM_MINOR_VERSION = @[email protected]
+EXEMPI_CFLAGS = @[email protected]
+EXEMPI_LIBS = @[email protected]
+EXIF_CFLAGS = @[email protected]
+EXIF_LIBS = @[email protected]
+GETTEXT_PACKAGE = @[email protected]
+GLIB_GENMARSHAL = @[email protected]
+GLIB_MKENUMS = @[email protected]
+GMOFILES = @[email protected]
+GMSGFMT = @[email protected]
+GTKDOC_CHECK = @[email protected]
+GTKDOC_DEPS_CFLAGS = @[email protected]
+GTKDOC_DEPS_LIBS = @[email protected]
+GTKDOC_MKPDF = @[email protected]
+GTKDOC_REBASE = @[email protected]
+HELP_DIR = @[email protected]
+HTML_DIR = @[email protected]
+INSTALL = @[email protected]
+INSTALL_DATA = @[email protected]
+INSTALL_PROGRAM = @[email protected]
+INSTALL_SCRIPT = @[email protected]
+INSTALL_STRIP_PROGRAM = @[email protected]
+INSTOBJEXT = @[email protected]
+INTLLIBS = @[email protected]
+INTLTOOL_EXTRACT = @[email protected]
+INTLTOOL_MERGE = @[email protected]
+INTLTOOL_PERL = @[email protected]
+INTLTOOL_UPDATE = @[email protected]
+LCMS_CFLAGS = @[email protected]
+LCMS_LIBS = @[email protected]
+LDFLAGS = @[email protected]
+LIBJPEG = @[email protected]
+LIBOBJS = @[email protected]
+LIBTOOL = @[email protected]
+LIBXML2_CFLAGS = @[email protected]
+LIBXML2_LIBS = @[email protected]
+LTLIBOBJS = @[email protected]
+MAKEINFO = @[email protected]
+MANIFEST_TOOL = @[email protected]
+MATECONFTOOL = @[email protected]
+MATECONF_SCHEMA_CONFIG_SOURCE = @[email protected]
+MATECONF_SCHEMA_FILE_DIR = @[email protected]
+MKDIR_P = @[email protected]
+MKINSTALLDIRS = @[email protected]
+MSGFMT_OPTS = @[email protected]
+MSGMERGE = @[email protected]
+NO_STRICT_ALIASING_CFLAGS = @[email protected]
+OBJDUMP = @[email protected]
+OMF_DIR = @[email protected]
+OTOOL64 = @[email protected]
+PACKAGE = @[email protected]
+PACKAGE_BUGREPORT = @[email protected]
+PACKAGE_NAME = @[email protected]
+PACKAGE_STRING = @[email protected]
+PACKAGE_TARNAME = @[email protected]
+PACKAGE_URL = @[email protected]
+PACKAGE_VERSION = @[email protected]
+PATH_SEPARATOR = @[email protected]
+PKG_CONFIG = @[email protected]
+PKG_CONFIG_LIBDIR = @[email protected]
+PKG_CONFIG_PATH = @[email protected]
+POFILES = @[email protected]
+PO_IN_DATADIR_FALSE = @[email protected]
+PO_IN_DATADIR_TRUE = @[email protected]
+PYGOBJECT_CODEGEN = @[email protected]
+PYGOBJECT_DEFSDIR = @[email protected]
+PYGOBJECT_H2DEF = @[email protected]
+PYGTK_CFLAGS = @[email protected]
+PYGTK_DEFSDIR = @[email protected]
+PYGTK_LIBS = @[email protected]
+PYTHON_CFLAGS = @[email protected]
+PYTHON_EXEC_PREFIX = @[email protected]
+PYTHON_EXTRA_LIBS = @[email protected]
+PYTHON_LIBS = @[email protected]
+PYTHON_LIB_LOC = @[email protected]
+PYTHON_PLATFORM = @[email protected]
+PYTHON_PREFIX = @[email protected]
+PYTHON_VERSION = @[email protected]
+RSVG_CFLAGS = @[email protected]
+RSVG_LIBS = @[email protected]
+SET_MAKE = @[email protected]
+USE_NLS = @[email protected]
+VERSION = @[email protected]
+WARN_CFLAGS = @[email protected]
+X11_CFLAGS = @[email protected]
+X11_LIBS = @[email protected]
+XGETTEXT = @[email protected]
+X_CFLAGS = @[email protected]
+X_EXTRA_LIBS = @[email protected]
+X_PRE_LIBS = @[email protected]
+abs_builddir = @[email protected]
+abs_srcdir = @[email protected]
+abs_top_builddir = @[email protected]
+abs_top_srcdir = @[email protected]
+ac_ct_AR = @[email protected]
+ac_ct_CC = @[email protected]
+ac_ct_DUMPBIN = @[email protected]
+am__include = @[email protected]
+am__leading_dot = @[email protected]
+am__quote = @[email protected]
+am__tar = @[email protected]
+am__untar = @[email protected]
+build_alias = @[email protected]
+build_cpu = @[email protected]
+build_os = @[email protected]
+build_vendor = @[email protected]
+builddir = @[email protected]
+datadir = @[email protected]
+datarootdir = @[email protected]
+exec_prefix = @[email protected]
+host_alias = @[email protected]
+host_cpu = @[email protected]
+host_os = @[email protected]
+host_vendor = @[email protected]
+htmldir = @[email protected]
+includedir = @[email protected]
+infodir = @[email protected]
+install_sh = @[email protected]
+libexecdir = @[email protected]
+localedir = @[email protected]
+localstatedir = @[email protected]
+mkdir_p = @[email protected]
+oldincludedir = @[email protected]
+pkgpyexecdir = @[email protected]
+pkgpythondir = @[email protected]
+program_transform_name = @[email protected]
+pyexecdir = @[email protected]
+pythondir = @[email protected]
+sbindir = @[email protected]
+sharedstatedir = @[email protected]
+sysconfdir = @[email protected]
+target_alias = @[email protected]
+top_build_prefix = @[email protected]
+top_builddir = @[email protected]
+top_srcdir = @[email protected]
+SUBDIRS = $(am__append_1)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @[email protected] $(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 [email protected]; 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)/[email protected] $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/[email protected] $(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: @[email protected] $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @[email protected] $(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 [email protected] | 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 "[email protected]" 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 [email protected] | 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 "[email protected]" "$$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) \
+ "[email protected]" $$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) ) > [email protected]
+
+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.
+
+# 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.
+
+
+pkgdatadir = $(datadir)/@[email protected]
+pkgincludedir = $(includedir)/@[email protected]
+pkglibdir = $(libdir)/@[email protected]
+pkglibexecdir = $(libexecdir)/@[email protected]
+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 = @[email protected]
+host_triplet = @[email protected]
+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 [email protected]
+DEFAULT_INCLUDES = [email protected][email protected] -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 " [email protected];
+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 [email protected]
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " [email protected];
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " [email protected];
+SOURCES = $(nodist_eom_la_SOURCES)
+DIST_SOURCES =
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @[email protected]
+ACLOCAL_AMFLAGS = @[email protected]
+ALL_LINGUAS = @[email protected]
+AM_DEFAULT_VERBOSITY = @[email protected]
+AUTOCONF = @[email protected]
+AUTOHEADER = @[email protected]
+AUTOMAKE = @[email protected]
+CATALOGS = @[email protected]
+CATOBJEXT = @[email protected]
+CCDEPMODE = @[email protected]
+CPPFLAGS = @[email protected]
+CYGPATH_W = @[email protected]
+DATADIRNAME = @[email protected]
+DBUS_BINDING_TOOL = @[email protected]
+DBUS_CFLAGS = @[email protected]
+DBUS_LIBS = @[email protected]
+DISABLE_DEPRECATED = @[email protected]
+DISTCHECK_CONFIGURE_FLAGS = @[email protected]
+DLLTOOL = @[email protected]
+DOC_USER_FORMATS = @[email protected]
+DSYMUTIL = @[email protected]
+DUMPBIN = @[email protected]
+EOM_API_VERSION = @[email protected]
+EOM_CFLAGS = @[email protected]
+EOM_DOC_EXIF_START = @[email protected]
+EOM_DOC_EXIF_STOP = @[email protected]
+EOM_LIBS = @[email protected]
+EOM_MAJOR_VERSION = @[email protected]
+EOM_MICRO_VERSION = @[email protected]
+EOM_MINOR_VERSION = @[email protected]
+EXEMPI_CFLAGS = @[email protected]
+EXEMPI_LIBS = @[email protected]
+EXIF_CFLAGS = @[email protected]
+EXIF_LIBS = @[email protected]
+GETTEXT_PACKAGE = @[email protected]
+GLIB_GENMARSHAL = @[email protected]
+GLIB_MKENUMS = @[email protected]
+GMOFILES = @[email protected]
+GMSGFMT = @[email protected]
+GTKDOC_CHECK = @[email protected]
+GTKDOC_DEPS_CFLAGS = @[email protected]
+GTKDOC_DEPS_LIBS = @[email protected]
+GTKDOC_MKPDF = @[email protected]
+GTKDOC_REBASE = @[email protected]
+HELP_DIR = @[email protected]
+HTML_DIR = @[email protected]
+INSTALL = @[email protected]
+INSTALL_DATA = @[email protected]
+INSTALL_PROGRAM = @[email protected]
+INSTALL_SCRIPT = @[email protected]
+INSTALL_STRIP_PROGRAM = @[email protected]
+INSTOBJEXT = @[email protected]
+INTLLIBS = @[email protected]
+INTLTOOL_EXTRACT = @[email protected]
+INTLTOOL_MERGE = @[email protected]
+INTLTOOL_PERL = @[email protected]
+INTLTOOL_UPDATE = @[email protected]
+LCMS_CFLAGS = @[email protected]
+LCMS_LIBS = @[email protected]
+LDFLAGS = @[email protected]
+LIBJPEG = @[email protected]
+LIBOBJS = @[email protected]
+LIBTOOL = @[email protected]
+LIBXML2_CFLAGS = @[email protected]
+LIBXML2_LIBS = @[email protected]
+LTLIBOBJS = @[email protected]
+MAKEINFO = @[email protected]
+MANIFEST_TOOL = @[email protected]
+MATECONFTOOL = @[email protected]
+MATECONF_SCHEMA_CONFIG_SOURCE = @[email protected]
+MATECONF_SCHEMA_FILE_DIR = @[email protected]
+MKDIR_P = @[email protected]
+MKINSTALLDIRS = @[email protected]
+MSGFMT_OPTS = @[email protected]
+MSGMERGE = @[email protected]
+NO_STRICT_ALIASING_CFLAGS = @[email protected]
+OBJDUMP = @[email protected]
+OMF_DIR = @[email protected]
+OTOOL64 = @[email protected]
+PACKAGE = @[email protected]
+PACKAGE_BUGREPORT = @[email protected]
+PACKAGE_NAME = @[email protected]
+PACKAGE_STRING = @[email protected]
+PACKAGE_TARNAME = @[email protected]
+PACKAGE_URL = @[email protected]
+PACKAGE_VERSION = @[email protected]
+PATH_SEPARATOR = @[email protected]
+PKG_CONFIG = @[email protected]
+PKG_CONFIG_LIBDIR = @[email protected]
+PKG_CONFIG_PATH = @[email protected]
+POFILES = @[email protected]
+PO_IN_DATADIR_FALSE = @[email protected]
+PO_IN_DATADIR_TRUE = @[email protected]
+PYGOBJECT_CODEGEN = @[email protected]
+PYGOBJECT_DEFSDIR = @[email protected]
+PYGOBJECT_H2DEF = @[email protected]
+PYGTK_CFLAGS = @[email protected]
+PYGTK_DEFSDIR = @[email protected]
+PYGTK_LIBS = @[email protected]
+PYTHON_CFLAGS = @[email protected]
+PYTHON_EXEC_PREFIX = @[email protected]
+PYTHON_EXTRA_LIBS = @[email protected]
+PYTHON_LIBS = @[email protected]
+PYTHON_LIB_LOC = @[email protected]
+PYTHON_PLATFORM = @[email protected]
+PYTHON_PREFIX = @[email protected]
+PYTHON_VERSION = @[email protected]
+RSVG_CFLAGS = @[email protected]
+RSVG_LIBS = @[email protected]
+SET_MAKE = @[email protected]
+USE_NLS = @[email protected]
+VERSION = @[email protected]
+WARN_CFLAGS = @[email protected]
+X11_CFLAGS = @[email protected]
+X11_LIBS = @[email protected]
+XGETTEXT = @[email protected]
+X_CFLAGS = @[email protected]
+X_EXTRA_LIBS = @[email protected]
+X_PRE_LIBS = @[email protected]
+abs_builddir = @[email protected]
+abs_srcdir = @[email protected]
+abs_top_builddir = @[email protected]
+abs_top_srcdir = @[email protected]
+ac_ct_AR = @[email protected]
+ac_ct_CC = @[email protected]
+ac_ct_DUMPBIN = @[email protected]
+am__include = @[email protected]
+am__leading_dot = @[email protected]
+am__quote = @[email protected]
+am__tar = @[email protected]
+am__untar = @[email protected]
+build_alias = @[email protected]
+build_cpu = @[email protected]
+build_os = @[email protected]
+build_vendor = @[email protected]
+builddir = @[email protected]
+datadir = @[email protected]
+datarootdir = @[email protected]
+exec_prefix = @[email protected]
+host_alias = @[email protected]
+host_cpu = @[email protected]
+host_os = @[email protected]
+host_vendor = @[email protected]
+htmldir = @[email protected]
+includedir = @[email protected]
+infodir = @[email protected]
+install_sh = @[email protected]
+libexecdir = @[email protected]
+localedir = @[email protected]
+localstatedir = @[email protected]
+mkdir_p = @[email protected]
+oldincludedir = @[email protected]
+pkgpyexecdir = @[email protected]
+pkgpythondir = @[email protected]
+program_transform_name = @[email protected]
+pyexecdir = @[email protected]
+pythondir = @[email protected]
+sbindir = @[email protected]
+sharedstatedir = @[email protected]
+sysconfdir = @[email protected]
+target_alias = @[email protected]
+top_build_prefix = @[email protected]
+top_builddir = @[email protected]
+top_srcdir = @[email protected]
+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: @[email protected] $(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 [email protected]; 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)/[email protected] $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/[email protected] $(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: @[email protected] $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @[email protected] $(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
+
+
+.c.o:
[email protected][email protected] $(AM_V_CC)$(COMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] $<
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+
+.c.obj:
[email protected][email protected] $(AM_V_CC)$(COMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] `$(CYGPATH_W) '$<'`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
[email protected][email protected] $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
[email protected][email protected] $(AM_V_CC)$(LTCOMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] $<
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+
+eom_la-eom.lo: eom.c
[email protected][email protected] $(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
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/eom_la-eom.Tpo $(DEPDIR)/eom_la-eom.Plo
[email protected][email protected]@[email protected] source='eom.c' object='eom_la-eom.lo' libtool=yes @[email protected]
[email protected][email protected] $(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) \
+ "[email protected]" $$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) ) > [email protected]
+
+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.
+
+# 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.
+
+pkgdatadir = $(datadir)/@[email protected]
+pkgincludedir = $(includedir)/@[email protected]
+pkglibdir = $(libdir)/@[email protected]
+pkglibexecdir = $(libexecdir)/@[email protected]
+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 = @[email protected]
+host_triplet = @[email protected]
+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 " [email protected];
+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 = @[email protected]
+ACLOCAL_AMFLAGS = @[email protected]
+ALL_LINGUAS = @[email protected]
+AM_DEFAULT_VERBOSITY = @[email protected]
+AUTOCONF = @[email protected]
+AUTOHEADER = @[email protected]
+AUTOMAKE = @[email protected]
+CATALOGS = @[email protected]
+CATOBJEXT = @[email protected]
+CCDEPMODE = @[email protected]
+CPPFLAGS = @[email protected]
+CYGPATH_W = @[email protected]
+DATADIRNAME = @[email protected]
+DBUS_BINDING_TOOL = @[email protected]
+DBUS_CFLAGS = @[email protected]
+DBUS_LIBS = @[email protected]
+DISABLE_DEPRECATED = @[email protected]
+DISTCHECK_CONFIGURE_FLAGS = @[email protected]
+DLLTOOL = @[email protected]
+DOC_USER_FORMATS = @[email protected]
+DSYMUTIL = @[email protected]
+DUMPBIN = @[email protected]
+EOM_API_VERSION = @[email protected]
+EOM_CFLAGS = @[email protected]
+EOM_DOC_EXIF_START = @[email protected]
+EOM_DOC_EXIF_STOP = @[email protected]
+EOM_LIBS = @[email protected]
+EOM_MAJOR_VERSION = @[email protected]
+EOM_MICRO_VERSION = @[email protected]
+EOM_MINOR_VERSION = @[email protected]
+EXEMPI_CFLAGS = @[email protected]
+EXEMPI_LIBS = @[email protected]
+EXIF_CFLAGS = @[email protected]
+EXIF_LIBS = @[email protected]
+GETTEXT_PACKAGE = @[email protected]
+GLIB_GENMARSHAL = @[email protected]
+GLIB_MKENUMS = @[email protected]
+GMOFILES = @[email protected]
+GMSGFMT = @[email protected]
+GTKDOC_CHECK = @[email protected]
+GTKDOC_DEPS_CFLAGS = @[email protected]
+GTKDOC_DEPS_LIBS = @[email protected]
+GTKDOC_MKPDF = @[email protected]
+GTKDOC_REBASE = @[email protected]
+HELP_DIR = @[email protected]
+HTML_DIR = @[email protected]
+INSTALL = @[email protected]
+INSTALL_DATA = @[email protected]
+INSTALL_PROGRAM = @[email protected]
+INSTALL_SCRIPT = @[email protected]
+INSTALL_STRIP_PROGRAM = @[email protected]
+INSTOBJEXT = @[email protected]
+INTLLIBS = @[email protected]
+INTLTOOL_EXTRACT = @[email protected]
+INTLTOOL_MERGE = @[email protected]
+INTLTOOL_PERL = @[email protected]
+INTLTOOL_UPDATE = @[email protected]
+LCMS_CFLAGS = @[email protected]
+LCMS_LIBS = @[email protected]
+LDFLAGS = @[email protected]
+LIBJPEG = @[email protected]
+LIBOBJS = @[email protected]
+LIBTOOL = @[email protected]
+LIBXML2_CFLAGS = @[email protected]
+LIBXML2_LIBS = @[email protected]
+LTLIBOBJS = @[email protected]
+MAKEINFO = @[email protected]
+MANIFEST_TOOL = @[email protected]
+MATECONFTOOL = @[email protected]
+MATECONF_SCHEMA_CONFIG_SOURCE = @[email protected]
+MATECONF_SCHEMA_FILE_DIR = @[email protected]
+MKDIR_P = @[email protected]
+MKINSTALLDIRS = @[email protected]
+MSGFMT_OPTS = @[email protected]
+MSGMERGE = @[email protected]
+NO_STRICT_ALIASING_CFLAGS = @[email protected]
+OBJDUMP = @[email protected]
+OMF_DIR = @[email protected]
+OTOOL64 = @[email protected]
+PACKAGE = @[email protected]
+PACKAGE_BUGREPORT = @[email protected]
+PACKAGE_NAME = @[email protected]
+PACKAGE_STRING = @[email protected]
+PACKAGE_TARNAME = @[email protected]
+PACKAGE_URL = @[email protected]
+PACKAGE_VERSION = @[email protected]
+PATH_SEPARATOR = @[email protected]
+PKG_CONFIG = @[email protected]
+PKG_CONFIG_LIBDIR = @[email protected]
+PKG_CONFIG_PATH = @[email protected]
+POFILES = @[email protected]
+PO_IN_DATADIR_FALSE = @[email protected]
+PO_IN_DATADIR_TRUE = @[email protected]
+PYGOBJECT_CODEGEN = @[email protected]
+PYGOBJECT_DEFSDIR = @[email protected]
+PYGOBJECT_H2DEF = @[email protected]
+PYGTK_CFLAGS = @[email protected]
+PYGTK_DEFSDIR = @[email protected]
+PYGTK_LIBS = @[email protected]
+PYTHON_CFLAGS = @[email protected]
+PYTHON_EXEC_PREFIX = @[email protected]
+PYTHON_EXTRA_LIBS = @[email protected]
+PYTHON_LIBS = @[email protected]
+PYTHON_LIB_LOC = @[email protected]
+PYTHON_PLATFORM = @[email protected]
+PYTHON_PREFIX = @[email protected]
+PYTHON_VERSION = @[email protected]
+RSVG_CFLAGS = @[email protected]
+RSVG_LIBS = @[email protected]
+SET_MAKE = @[email protected]
+USE_NLS = @[email protected]
+VERSION = @[email protected]
+WARN_CFLAGS = @[email protected]
+X11_CFLAGS = @[email protected]
+X11_LIBS = @[email protected]
+XGETTEXT = @[email protected]
+X_CFLAGS = @[email protected]
+X_EXTRA_LIBS = @[email protected]
+X_PRE_LIBS = @[email protected]
+abs_builddir = @[email protected]
+abs_srcdir = @[email protected]
+abs_top_builddir = @[email protected]
+abs_top_srcdir = @[email protected]
+ac_ct_AR = @[email protected]
+ac_ct_CC = @[email protected]
+ac_ct_DUMPBIN = @[email protected]
+am__include = @[email protected]
+am__leading_dot = @[email protected]
+am__quote = @[email protected]
+am__tar = @[email protected]
+am__untar = @[email protected]
+build_alias = @[email protected]
+build_cpu = @[email protected]
+build_os = @[email protected]
+build_vendor = @[email protected]
+builddir = @[email protected]
+datadir = @[email protected]
+datarootdir = @[email protected]
+exec_prefix = @[email protected]
+host_alias = @[email protected]
+host_cpu = @[email protected]
+host_os = @[email protected]
+host_vendor = @[email protected]
+htmldir = @[email protected]
+includedir = @[email protected]
+infodir = @[email protected]
+install_sh = @[email protected]
+libexecdir = @[email protected]
+localedir = @[email protected]
+localstatedir = @[email protected]
+mkdir_p = @[email protected]
+oldincludedir = @[email protected]
+pkgpyexecdir = @[email protected]
+pkgpythondir = @[email protected]
+program_transform_name = @[email protected]
+pyexecdir = @[email protected]
+pythondir = @[email protected]
+sbindir = @[email protected]
+sharedstatedir = @[email protected]
+sysconfdir = @[email protected]
+target_alias = @[email protected]
+top_build_prefix = @[email protected]
+top_builddir = @[email protected]
+top_srcdir = @[email protected]
+SUBDIRS = toolbar-editor totem-screensaver
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @[email protected] $(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 [email protected]; 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)/[email protected] $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/[email protected] $(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: @[email protected] $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @[email protected] $(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 [email protected] | 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 "[email protected]" 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 [email protected] | 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 "[email protected]" "$$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) \
+ "[email protected]" $$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 \"@[email protected]\" */" \
+ --fprod "\n#include \"@[email protected]\"" \
+ --vhead "static const [email protected]@Value [email protected][email protected]_values[] = {" \
+ --vtail " { 0, NULL, NULL }\n};\n\n" \
+ --vtail "G_GNUC_INTERNAL GType\[email protected][email protected]_get_type (void)\n{\n" \
+ --vtail " static GType type = 0;\n\n" \
+ --vtail " if (G_UNLIKELY (type == 0))\n" \
+ --vtail " type = [email protected]@_register_static (\"@[email protected]\", [email protected][email protected]_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/* --- @[email protected] --- */" \
+ --eprod "#define [email protected]@ @[email protected]_get_type()\n" \
+ --eprod "G_GNUC_INTERNAL GType @[email protected]_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.
+
+# 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.
+
+
+
+pkgdatadir = $(datadir)/@[email protected]
+pkgincludedir = $(includedir)/@[email protected]
+pkglibdir = $(libdir)/@[email protected]
+pkglibexecdir = $(libexecdir)/@[email protected]
+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 = @[email protected]
+host_triplet = @[email protected]
+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 [email protected]
+DEFAULT_INCLUDES = [email protected][email protected] -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 " [email protected];
+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 [email protected]
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " [email protected];
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " [email protected];
+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 = @[email protected]
+ACLOCAL_AMFLAGS = @[email protected]
+ALL_LINGUAS = @[email protected]
+AM_DEFAULT_VERBOSITY = @[email protected]
+AUTOCONF = @[email protected]
+AUTOHEADER = @[email protected]
+AUTOMAKE = @[email protected]
+CATALOGS = @[email protected]
+CATOBJEXT = @[email protected]
+CCDEPMODE = @[email protected]
+CPPFLAGS = @[email protected]
+CYGPATH_W = @[email protected]
+DATADIRNAME = @[email protected]
+DBUS_BINDING_TOOL = @[email protected]
+DBUS_CFLAGS = @[email protected]
+DBUS_LIBS = @[email protected]
+DEPDIR = @D[email protected]
+DISABLE_DEPRECATED = @[email protected]
+DISTCHECK_CONFIGURE_FLAGS = @[email protected]
+DLLTOOL = @[email protected]
+DOC_USER_FORMATS = @[email protected]
+DSYMUTIL = @[email protected]
+DUMPBIN = @[email protected]
+EOM_API_VERSION = @[email protected]
+EOM_CFLAGS = @[email protected]
+EOM_DOC_EXIF_START = @[email protected]
+EOM_DOC_EXIF_STOP = @[email protected]
+EOM_LIBS = @[email protected]
+EOM_MAJOR_VERSION = @[email protected]
+EOM_MICRO_VERSION = @[email protected]
+EOM_MINOR_VERSION = @[email protected]
+EXEMPI_CFLAGS = @[email protected]
+EXEMPI_LIBS = @[email protected]
+EXIF_CFLAGS = @[email protected]
+EXIF_LIBS = @[email protected]
+GETTEXT_PACKAGE = @[email protected]
+GLIB_GENMARSHAL = @[email protected]
+GLIB_MKENUMS = @[email protected]
+GMOFILES = @[email protected]
+GMSGFMT = @[email protected]
+GTKDOC_CHECK = @[email protected]
+GTKDOC_DEPS_CFLAGS = @[email protected]
+GTKDOC_DEPS_LIBS = @[email protected]
+GTKDOC_MKPDF = @[email protected]
+GTKDOC_REBASE = @[email protected]
+HELP_DIR = @[email protected]
+HTML_DIR = @[email protected]
+INSTALL = @[email protected]
+INSTALL_DATA = @[email protected]
+INSTALL_PROGRAM = @[email protected]
+INSTALL_SCRIPT = @[email protected]
+INSTALL_STRIP_PROGRAM = @[email protected]
+INSTOBJEXT = @[email protected]
+INTLLIBS = @[email protected]
+INTLTOOL_EXTRACT = @[email protected]
+INTLTOOL_MERGE = @[email protected]
+INTLTOOL_PERL = @[email protected]
+INTLTOOL_UPDATE = @[email protected]
+LCMS_CFLAGS = @[email protected]
+LCMS_LIBS = @[email protected]
+LDFLAGS = @[email protected]
+LIBJPEG = @[email protected]
+LIBOBJS = @[email protected]
+LIBTOOL = @[email protected]
+LIBXML2_CFLAGS = @[email protected]
+LIBXML2_LIBS = @[email protected]
+LTLIBOBJS = @[email protected]
+MAKEINFO = @[email protected]
+MANIFEST_TOOL = @[email protected]
+MATECONFTOOL = @[email protected]
+MATECONF_SCHEMA_CONFIG_SOURCE = @[email protected]
+MATECONF_SCHEMA_FILE_DIR = @[email protected]
+MKDIR_P = @[email protected]
+MKINSTALLDIRS = @[email protected]
+MSGFMT_OPTS = @[email protected]
+MSGMERGE = @[email protected]
+NO_STRICT_ALIASING_CFLAGS = @[email protected]
+OBJDUMP = @[email protected]
+OMF_DIR = @[email protected]
+OTOOL64 = @[email protected]
+PACKAGE = @[email protected]
+PACKAGE_BUGREPORT = @[email protected]
+PACKAGE_NAME = @[email protected]
+PACKAGE_STRING = @[email protected]
+PACKAGE_TARNAME = @[email protected]
+PACKAGE_URL = @[email protected]
+PACKAGE_VERSION = @[email protected]
+PATH_SEPARATOR = @[email protected]
+PKG_CONFIG = @[email protected]
+PKG_CONFIG_LIBDIR = @[email protected]
+PKG_CONFIG_PATH = @[email protected]
+POFILES = @[email protected]
+PO_IN_DATADIR_FALSE = @[email protected]
+PO_IN_DATADIR_TRUE = @[email protected]
+PYGOBJECT_CODEGEN = @[email protected]
+PYGOBJECT_DEFSDIR = @[email protected]
+PYGOBJECT_H2DEF = @[email protected]
+PYGTK_CFLAGS = @[email protected]
+PYGTK_DEFSDIR = @[email protected]
+PYGTK_LIBS = @[email protected]
+PYTHON_CFLAGS = @[email protected]
+PYTHON_EXEC_PREFIX = @[email protected]
+PYTHON_EXTRA_LIBS = @[email protected]
+PYTHON_LIBS = @[email protected]
+PYTHON_LIB_LOC = @[email protected]
+PYTHON_PLATFORM = @[email protected]
+PYTHON_PREFIX = @[email protected]
+PYTHON_VERSION = @[email protected]
+RSVG_CFLAGS = @[email protected]
+RSVG_LIBS = @[email protected]
+SET_MAKE = @[email protected]
+USE_NLS = @[email protected]
+VERSION = @[email protected]
+WARN_CFLAGS = @[email protected]
+X11_CFLAGS = @[email protected]
+X11_LIBS = @[email protected]
+XGETTEXT = @[email protected]
+X_CFLAGS = @[email protected]
+X_EXTRA_LIBS = @[email protected]
+X_PRE_LIBS = @[email protected]
+abs_builddir = @[email protected]
+abs_srcdir = @[email protected]
+abs_top_builddir = @[email protected]
+abs_top_srcdir = @[email protected]
+ac_ct_AR = @[email protected]
+ac_ct_CC = @[email protected]
+ac_ct_DUMPBIN = @[email protected]
+am__include = @[email protected]
+am__leading_dot = @[email protected]
+am__quote = @[email protected]
+am__tar = @[email protected]
+am__untar = @[email protected]
+build_alias = @[email protected]
+build_cpu = @[email protected]
+build_os = @[email protected]
+build_vendor = @[email protected]
+builddir = @[email protected]
+datadir = @[email protected]
+datarootdir = @[email protected]
+exec_prefix = @[email protected]
+host_alias = @[email protected]
+host_cpu = @[email protected]
+host_os = @[email protected]
+host_vendor = @[email protected]
+htmldir = @[email protected]
+includedir = @[email protected]
+infodir = @[email protected]
+install_sh = @[email protected]
+libexecdir = @libexecd[email protected]
+localedir = @[email protected]
+localstatedir = @[email protected]
+mkdir_p = @[email protected]
+oldincludedir = @[email protected]
+pkgpyexecdir = @[email protected]
+pkgpythondir = @[email protected]
+program_transform_name = @[email protected]
+pyexecdir = @[email protected]
+pythondir = @[email protected]
+sbindir = @[email protected]
+sharedstatedir = @[email protected]
+sysconfdir = @[email protected]
+target_alias = @[email protected]
+top_build_prefix = @[email protected]
+top_builddir = @[email protected]
+top_srcdir = @[email protected]
+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: @[email protected] $(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 [email protected]; 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)/[email protected] $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/[email protected] $(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: @[email protected] $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @[email protected] $(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
+
+
+.c.o:
[email protected][email protected] $(AM_V_CC)$(COMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] $<
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+
+.c.obj:
[email protected][email protected] $(AM_V_CC)$(COMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] `$(CYGPATH_W) '$<'`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
[email protected][email protected] $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
[email protected][email protected] $(AM_V_CC)$(LTCOMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] $<
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+
+libtoolbareditor_la-eggmarshalers.lo: eggmarshalers.c
[email protected][email protected] $(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
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/libtoolbareditor_la-eggmarshalers.Tpo $(DEPDIR)/libtoolbareditor_la-eggmarshalers.Plo
[email protected][email protected]@[email protected] source='eggmarshalers.c' object='libtoolbareditor_la-eggmarshalers.lo' libtool=yes @[email protected]
[email protected][email protected] $(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
[email protected][email protected] $(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
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/libtoolbareditor_la-eggtypebuiltins.Tpo $(DEPDIR)/libtoolbareditor_la-eggtypebuiltins.Plo
[email protected][email protected]@[email protected] source='eggtypebuiltins.c' object='libtoolbareditor_la-eggtypebuiltins.lo' libtool=yes @[email protected]
[email protected][email protected] $(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
[email protected][email protected] $(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
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/libtoolbareditor_la-egg-editable-toolbar.Tpo $(DEPDIR)/libtoolbareditor_la-egg-editable-toolbar.Plo
[email protected][email protected]@[email protected] source='egg-editable-toolbar.c' object='libtoolbareditor_la-egg-editable-toolbar.lo' libtool=yes @[email protected]
[email protected][email protected] $(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
[email protected][email protected] $(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
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/libtoolbareditor_la-egg-toolbars-model.Tpo $(DEPDIR)/libtoolbareditor_la-egg-toolbars-model.Plo
[email protected][email protected]@[email protected] source='egg-toolbars-model.c' object='libtoolbareditor_la-egg-toolbars-model.lo' libtool=yes @[email protected]
[email protected][email protected] $(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
[email protected][email protected] $(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
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/libtoolbareditor_la-egg-toolbar-editor.Tpo $(DEPDIR)/libtoolbareditor_la-egg-toolbar-editor.Plo
[email protected][email protected]@[email protected] source='egg-toolbar-editor.c' object='libtoolbareditor_la-egg-toolbar-editor.lo' libtool=yes @[email protected]
[email protected][email protected] $(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) \
+ "[email protected]" $$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 \"@[email protected]\" */" \
+ --fprod "\n#include \"@[email protected]\"" \
+ --vhead "static const [email protected]@Value [email protected][email protected]_values[] = {" \
+ --vtail " { 0, NULL, NULL }\n};\n\n" \
+ --vtail "G_GNUC_INTERNAL GType\[email protected][email protected]_get_type (void)\n{\n" \
+ --vtail " static GType type = 0;\n\n" \
+ --vtail " if (G_UNLIKELY (type == 0))\n" \
+ --vtail " type = [email protected]@_register_static (\"@[email protected]\", [email protected][email protected]_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/* --- @[email protected] --- */" \
+ --eprod "#define [email protected]@ @[email protected]_get_type()\n" \
+ --eprod "G_GNUC_INTERNAL GType @[email protected]_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.
+
+# 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.
+
+
+pkgdatadir = $(datadir)/@[email protected]
+pkgincludedir = $(includedir)/@[email protected]
+pkglibdir = $(libdir)/@[email protected]
+pkglibexecdir = $(libexecdir)/@[email protected]
+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 = @[email protected]
+host_triplet = @[email protected]
+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 [email protected]
+DEFAULT_INCLUDES = [email protected][email protected] -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 " [email protected];
+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 [email protected]
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " [email protected];
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " [email protected];
+SOURCES = $(libtotemscrsaver_la_SOURCES)
+DIST_SOURCES = $(libtotemscrsaver_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @[email protected]
+ACLOCAL_AMFLAGS = @[email protected]
+ALL_LINGUAS = @[email protected]
+AM_DEFAULT_VERBOSITY = @[email protected]
+AUTOCONF = @[email protected]
+AUTOHEADER = @[email protected]
+AUTOMAKE = @[email protected]
+CATALOGS = @[email protected]
+CATOBJEXT = @[email protected]
+CCDEPMODE = @[email protected]
+CPPFLAGS = @[email protected]
+CYGPATH_W = @[email protected]
+DATADIRNAME = @[email protected]
+DBUS_BINDING_TOOL = @[email protected]
+DBUS_CFLAGS = @[email protected]
+DBUS_LIBS = @[email protected]
+DISABLE_DEPRECATED = @[email protected]
+DISTCHECK_CONFIGURE_FLAGS = @[email protected]
+DLLTOOL = @[email protected]
+DOC_USER_FORMATS = @[email protected]
+DSYMUTIL = @[email protected]
+DUMPBIN = @[email protected]
+EOM_API_VERSION = @[email protected]
+EOM_CFLAGS = @[email protected]
+EOM_DOC_EXIF_START = @[email protected]
+EOM_DOC_EXIF_STOP = @[email protected]
+EOM_LIBS = @[email protected]
+EOM_MAJOR_VERSION = @[email protected]
+EOM_MICRO_VERSION = @[email protected]
+EOM_MINOR_VERSION = @[email protected]
+EXEMPI_CFLAGS = @[email protected]
+EXEMPI_LIBS = @[email protected]
+EXIF_CFLAGS = @[email protected]
+EXIF_LIBS = @[email protected]
+GETTEXT_PACKAGE = @[email protected]
+GLIB_GENMARSHAL = @[email protected]
+GLIB_MKENUMS = @[email protected]
+GMOFILES = @[email protected]
+GMSGFMT = @[email protected]
+GTKDOC_CHECK = @[email protected]
+GTKDOC_DEPS_CFLAGS = @[email protected]
+GTKDOC_DEPS_LIBS = @[email protected]
+GTKDOC_MKPDF = @[email protected]
+GTKDOC_REBASE = @[email protected]
+HELP_DIR = @[email protected]
+HTML_DIR = @[email protected]
+INSTALL = @[email protected]
+INSTALL_DATA = @[email protected]
+INSTALL_PROGRAM = @[email protected]
+INSTALL_SCRIPT = @[email protected]
+INSTALL_STRIP_PROGRAM = @[email protected]
+INSTOBJEXT = @[email protected]
+INTLLIBS = @[email protected]
+INTLTOOL_EXTRACT = @[email protected]
+INTLTOOL_MERGE = @[email protected]
+INTLTOOL_PERL = @[email protected]
+INTLTOOL_UPDATE = @[email protected]
+LCMS_CFLAGS = @[email protected]
+LCMS_LIBS = @[email protected]
+LDFLAGS = @[email protected]
+LIBJPEG = @[email protected]
+LIBOBJS = @[email protected]
+LIBTOOL = @[email protected]
+LIBXML2_CFLAGS = @[email protected]
+LIBXML2_LIBS = @[email protected]
+LTLIBOBJS = @[email protected]
+MAKEINFO = @[email protected]
+MANIFEST_TOOL = @[email protected]
+MATECONFTOOL = @[email protected]
+MATECONF_SCHEMA_CONFIG_SOURCE = @[email protected]
+MATECONF_SCHEMA_FILE_DIR = @[email protected]
+MKDIR_P = @[email protected]
+MKINSTALLDIRS = @[email protected]
+MSGFMT_OPTS = @[email protected]
+MSGMERGE = @[email protected]
+NO_STRICT_ALIASING_CFLAGS = @[email protected]
+OBJDUMP = @[email protected]
+OMF_DIR = @[email protected]
+OTOOL64 = @[email protected]
+PACKAGE = @[email protected]
+PACKAGE_BUGREPORT = @[email protected]
+PACKAGE_NAME = @[email protected]
+PACKAGE_STRING = @[email protected]
+PACKAGE_TARNAME = @[email protected]
+PACKAGE_URL = @[email protected]
+PACKAGE_VERSION = @[email protected]
+PATH_SEPARATOR = @[email protected]
+PKG_CONFIG = @[email protected]
+PKG_CONFIG_LIBDIR = @[email protected]
+PKG_CONFIG_PATH = @[email protected]
+POFILES = @[email protected]
+PO_IN_DATADIR_FALSE = @[email protected]
+PO_IN_DATADIR_TRUE = @[email protected]
+PYGOBJECT_CODEGEN = @[email protected]
+PYGOBJECT_DEFSDIR = @[email protected]
+PYGOBJECT_H2DEF = @[email protected]
+PYGTK_CFLAGS = @[email protected]
+PYGTK_DEFSDIR = @[email protected]
+PYGTK_LIBS = @[email protected]
+PYTHON_CFLAGS = @[email protected]
+PYTHON_EXEC_PREFIX = @[email protected]
+PYTHON_EXTRA_LIBS = @[email protected]
+PYTHON_LIBS = @[email protected]
+PYTHON_LIB_LOC = @[email protected]
+PYTHON_PLATFORM = @[email protected]
+PYTHON_PREFIX = @[email protected]
+PYTHON_VERSION = @[email protected]
+RSVG_CFLAGS = @[email protected]
+RSVG_LIBS = @[email protected]
+SET_MAKE = @SE[email protected]
+USE_NLS = @[email protected]
+VERSION = @[email protected]
+WARN_CFLAGS = @[email protected]
+X11_CFLAGS = @[email protected]
+X11_LIBS = @[email protected]
+XGETTEXT = @[email protected]
+X_CFLAGS = @[email protected]
+X_EXTRA_LIBS = @[email protected]
+X_PRE_LIBS = @[email protected]
+abs_builddir = @[email protected]
+abs_srcdir = @[email protected]
+abs_top_builddir = @[email protected]
+abs_top_srcdir = @[email protected]
+ac_ct_AR = @[email protected]
+ac_ct_CC = @[email protected]
+ac_ct_DUMPBIN = @[email protected]
+am__include = @[email protected]
+am__leading_dot = @[email protected]
+am__quote = @[email protected]
+am__tar = @[email protected]
+am__untar = @[email protected]
+build_alias = @[email protected]
+build_cpu = @[email protected]
+build_os = @[email protected]
+build_vendor = @[email protected]
+builddir = @[email protected]
+datadir = @[email protected]
+datarootdir = @[email protected]
+exec_prefix = @[email protected]
+host_alias = @[email protected]
+host_cpu = @[email protected]
+host_os = @[email protected]
+host_vendor = @[email protected]
+htmldir = @[email protected]
+includedir = @[email protected]
+infodir = @[email protected]
+install_sh = @[email protected]
+libexecdir = @[email protected]
+localedir = @[email protected]
+localstatedir = @[email protected]
+mkdir_p = @[email protected]
+oldincludedir = @[email protected]
+pkgpyexecdir = @[email protected]
+pkgpythondir = @[email protected]
+program_transform_name = @[email protected]
+pyexecdir = @[email protected]
+pythondir = @[email protected]
+sbindir = @[email protected]
+sharedstatedir = @[email protected]
+sysconfdir = @[email protected]
+target_alias = @[email protected]
+top_build_prefix = @[email protected]
+top_builddir = @[email protected]
+top_srcdir = @[email protected]
+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: @[email protected] $(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 [email protected]; 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)/[email protected] $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/[email protected] $(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: @[email protected] $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @[email protected] $(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
+
+
+.c.o:
[email protected][email protected] $(AM_V_CC)$(COMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] $<
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+
+.c.obj:
[email protected][email protected] $(AM_V_CC)$(COMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] `$(CYGPATH_W) '$<'`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
[email protected][email protected] $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
[email protected][email protected] $(AM_V_CC)$(LTCOMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] $<
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+
+libtotemscrsaver_la-totem-scrsaver.lo: totem-scrsaver.c
[email protected][email protected] $(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
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/libtotemscrsaver_la-totem-scrsaver.Tpo $(DEPDIR)/libtotemscrsaver_la-totem-scrsaver.Plo
[email protected][email protected]@[email protected] source='totem-scrsaver.c' object='libtotemscrsaver_la-totem-scrsaver.lo' libtool=yes @[email protected]
[email protected][email protected] $(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) \
+ "[email protected]" $$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);
+}
+