From 28a029a4990d2a84f9d6a0b890eba812ea503998 Mon Sep 17 00:00:00 2001 From: Perberos Date: Thu, 1 Dec 2011 23:52:01 -0300 Subject: moving from https://github.com/perberos/mate-desktop-environment --- AUTHORS | 1 + COPYING | 340 + ChangeLog | 1 + HACKING | 298 + MAINTAINERS | 43 + Makefile.am | 7 + NEWS | 1 + README | 473 ++ autogen.sh | 25 + configure.in | 582 ++ depcomp | 630 ++ distro/archlinux/PKGBUILD | 40 + distro/archlinux/mate-window-manager.install | 17 + distro/archlinux/metacity-restartstyle.patch | 139 + distro/ubuntu/build | 35 + distro/ubuntu/postinst | 9 + distro/ubuntu/preinst | 8 + distro/ubuntu/prerm | 11 + doc/Makefile.am | 4 + doc/Makefile.in | 609 ++ doc/code-overview.txt | 185 + doc/creating_themes/C/calstblx.dtd | 215 + doc/creating_themes/C/creating-marco-themes.xml | 286 + doc/creating_themes/C/dbcentx.mod | 384 + doc/creating_themes/C/dbgenent.mod | 41 + doc/creating_themes/C/dbhierx.mod | 2193 ++++++ doc/creating_themes/C/dbnotnx.mod | 101 + doc/creating_themes/C/dbpoolx.mod | 8701 +++++++++++++++++++++++ doc/creating_themes/C/docbookx.dtd | 170 + doc/creating_themes/C/htmltblx.mod | 245 + doc/creating_themes/C/soextblx.dtd | 321 + doc/creating_themes/Makefile.am | 24 + doc/creating_themes/Makefile.in | 981 +++ doc/dialogs.txt | 32 + doc/how-to-get-focus-right.txt | 253 + doc/man/Makefile.am | 4 + doc/man/Makefile.in | 489 ++ doc/man/marco-message.1 | 60 + doc/man/marco-theme-viewer.1 | 43 + doc/man/marco-window-demo.1 | 25 + doc/man/marco.1 | 60 + doc/marco-theme.dtd | 273 + doc/theme-format.txt | 330 + po/ChangeLog | 4964 +++++++++++++ po/LINGUAS | 95 + po/Makefile.in.in | 217 + po/POTFILES.in | 32 + po/POTFILES.skip | 2 + po/am.po | 2695 +++++++ po/ar.po | 3571 ++++++++++ po/as.po | 3706 ++++++++++ po/ast.po | 2472 +++++++ po/az.po | 3172 +++++++++ po/be.po | 2403 +++++++ po/be@latin.po | 3877 ++++++++++ po/bg.po | 2420 +++++++ po/bn.po | 3570 ++++++++++ po/bn_IN.po | 2404 +++++++ po/br.po | 2058 ++++++ po/bs.po | 3263 +++++++++ po/ca.po | 3947 ++++++++++ po/ca@valencia.po | 3946 ++++++++++ po/crh.po | 2614 +++++++ po/cs.po | 2370 ++++++ po/cy.po | 3804 ++++++++++ po/da.po | 2679 +++++++ po/de.po | 3833 ++++++++++ po/dz.po | 2576 +++++++ po/el.po | 2486 +++++++ po/en@shaw.po | 2291 ++++++ po/en_CA.po | 3631 ++++++++++ po/en_GB.po | 3776 ++++++++++ po/eo.po | 2190 ++++++ po/es.po | 3818 ++++++++++ po/et.po | 1942 +++++ po/eu.po | 2382 +++++++ po/fa.po | 3236 +++++++++ po/fi.po | 2402 +++++++ po/fr.po | 2489 +++++++ po/ga.po | 2169 ++++++ po/gl.po | 2426 +++++++ po/gu.po | 2339 ++++++ po/ha.po | 3599 ++++++++++ po/he.po | 3736 ++++++++++ po/hi.po | 2448 +++++++ po/hr.po | 3679 ++++++++++ po/hu.po | 2422 +++++++ po/hy.po | 2853 ++++++++ po/id.po | 2035 ++++++ po/ig.po | 3513 +++++++++ po/is.po | 2720 +++++++ po/it.po | 2511 +++++++ po/ja.po | 3684 ++++++++++ po/ka.po | 3417 +++++++++ po/kn.po | 2453 +++++++ po/ko.po | 2345 ++++++ po/ku.po | 2383 +++++++ po/la.po | 2182 ++++++ po/lt.po | 3962 +++++++++++ po/lv.po | 2416 +++++++ po/mai.po | 2240 ++++++ po/mg.po | 3484 +++++++++ po/mk.po | 3610 ++++++++++ po/ml.po | 2311 ++++++ po/mn.po | 3312 +++++++++ po/mr.po | 2311 ++++++ po/ms.po | 2754 +++++++ po/nb.po | 2325 ++++++ po/nds.po | 2002 ++++++ po/ne.po | 3338 +++++++++ po/nl.po | 2481 +++++++ po/nn.po | 3809 ++++++++++ po/oc.po | 2462 +++++++ po/or.po | 2475 +++++++ po/pa.po | 3537 +++++++++ po/pl.po | 2436 +++++++ po/pt.po | 3917 ++++++++++ po/pt_BR.po | 3916 ++++++++++ po/ro.po | 2418 +++++++ po/ru.po | 2415 +++++++ po/rw.po | 3240 +++++++++ po/si.po | 2987 ++++++++ po/sk.po | 3822 ++++++++++ po/sl.po | 2078 ++++++ po/sq.po | 3999 +++++++++++ po/sr.po | 3833 ++++++++++ po/sr@latin.po | 3833 ++++++++++ po/sv.po | 2082 ++++++ po/ta.po | 2331 ++++++ po/te.po | 2332 ++++++ po/th.po | 3546 +++++++++ po/tk.po | 2679 +++++++ po/tr.po | 3735 ++++++++++ po/uk.po | 2401 +++++++ po/vi.po | 3752 ++++++++++ po/wa.po | 2715 +++++++ po/xh.po | 3294 +++++++++ po/yo.po | 3493 +++++++++ po/zh_CN.po | 2330 ++++++ po/zh_HK.po | 3396 +++++++++ po/zh_TW.po | 3510 +++++++++ rationales.txt | 79 + src/50-marco-desktop-key.xml.in | 20 + src/50-marco-key.xml.in | 269 + src/Makefile.am | 223 + src/compositor/compositor-private.h | 54 + src/compositor/compositor-xrender.c | 3078 ++++++++ src/compositor/compositor-xrender.h | 31 + src/compositor/compositor.c | 159 + src/core/async-getprop.c | 680 ++ src/core/async-getprop.h | 67 + src/core/atomnames.h | 166 + src/core/bell.c | 397 ++ src/core/bell.h | 108 + src/core/boxes.c | 1926 +++++ src/core/constraints.c | 1382 ++++ src/core/constraints.h | 48 + src/core/core.c | 779 ++ src/core/delete.c | 266 + src/core/display-private.h | 513 ++ src/core/display.c | 5355 ++++++++++++++ src/core/edge-resistance.c | 1277 ++++ src/core/edge-resistance.h | 48 + src/core/effects.c | 735 ++ src/core/effects.h | 170 + src/core/errors.c | 288 + src/core/eventqueue.c | 184 + src/core/eventqueue.h | 40 + src/core/frame-private.h | 88 + src/core/frame.c | 421 ++ src/core/group-private.h | 43 + src/core/group-props.c | 234 + src/core/group-props.h | 37 + src/core/group.c | 274 + src/core/group.h | 53 + src/core/iconcache.c | 849 +++ src/core/iconcache.h | 79 + src/core/keybindings.c | 3352 +++++++++ src/core/keybindings.h | 60 + src/core/main.c | 673 ++ src/core/marco-Xatomtype.h | 136 + src/core/place.c | 932 +++ src/core/place.h | 37 + src/core/prefs.c | 2794 ++++++++ src/core/schema-bindings.c | 195 + src/core/screen-private.h | 226 + src/core/screen.c | 2815 ++++++++ src/core/session.c | 1831 +++++ src/core/session.h | 91 + src/core/stack.c | 1661 +++++ src/core/stack.h | 402 ++ src/core/testasyncgetprop.c | 497 ++ src/core/testboxes.c | 1416 ++++ src/core/util.c | 641 ++ src/core/window-private.h | 640 ++ src/core/window-props.c | 1553 ++++ src/core/window-props.h | 129 + src/core/window.c | 8178 +++++++++++++++++++++ src/core/workspace.c | 1038 +++ src/core/workspace.h | 113 + src/core/xprops.c | 1238 ++++ src/include/all-keybindings.h | 386 + src/include/boxes.h | 290 + src/include/common.h | 300 + src/include/compositor.h | 76 + src/include/core.h | 208 + src/include/display.h | 48 + src/include/errors.h | 51 + src/include/frame.h | 31 + src/include/main.h | 43 + src/include/prefs.h | 233 + src/include/resizepopup.h | 47 + src/include/screen.h | 48 + src/include/tabpopup.h | 67 + src/include/types.h | 31 + src/include/ui.h | 209 + src/include/util.h | 136 + src/include/window.h | 39 + src/include/xprops.h | 227 + src/libmarco-private.pc.in | 12 + src/marco-wm.desktop.in | 20 + src/marco.desktop.in | 17 + src/marco.schemas.in.in | 573 ++ src/themes/ClearlooksRe/metacity-theme-1.xml | 1013 +++ src/themes/Dopple-Left/metacity-theme-1.xml | 1135 +++ src/themes/Dopple/metacity-theme-1.xml | 1135 +++ src/themes/DustBlue/button_close_normal.png | Bin 0 -> 3830 bytes src/themes/DustBlue/button_close_prelight.png | Bin 0 -> 1393 bytes src/themes/DustBlue/button_close_pressed.png | Bin 0 -> 4087 bytes src/themes/DustBlue/button_max_normal.png | Bin 0 -> 3185 bytes src/themes/DustBlue/button_max_prelight.png | Bin 0 -> 1326 bytes src/themes/DustBlue/button_max_pressed.png | Bin 0 -> 4029 bytes src/themes/DustBlue/button_menu_normal.png | Bin 0 -> 3450 bytes src/themes/DustBlue/button_menu_prelight.png | Bin 0 -> 4041 bytes src/themes/DustBlue/button_menu_pressed.png | Bin 0 -> 4065 bytes src/themes/DustBlue/button_min_normal.png | Bin 0 -> 3152 bytes src/themes/DustBlue/button_min_prelight.png | Bin 0 -> 1413 bytes src/themes/DustBlue/button_min_pressed.png | Bin 0 -> 4093 bytes src/themes/DustBlue/menu.png | Bin 0 -> 164 bytes src/themes/DustBlue/metacity-theme-1.xml | 409 ++ src/themes/Makefile.am | 53 + src/themes/Spidey-Left/metacity-theme-1.xml | 1086 +++ src/themes/Spidey/metacity-theme-1.xml | 1086 +++ src/themes/Splint-Left/metacity-theme-1.xml | 802 +++ src/themes/Splint/metacity-theme-1.xml | 802 +++ src/themes/WinMe/close_normal.png | Bin 0 -> 256 bytes src/themes/WinMe/close_normal_small.png | Bin 0 -> 223 bytes src/themes/WinMe/close_pressed.png | Bin 0 -> 256 bytes src/themes/WinMe/close_pressed_small.png | Bin 0 -> 219 bytes src/themes/WinMe/maximize_normal.png | Bin 0 -> 220 bytes src/themes/WinMe/maximize_pressed.png | Bin 0 -> 241 bytes src/themes/WinMe/metacity-theme-1.xml | 375 + src/themes/WinMe/minimize_normal.png | Bin 0 -> 213 bytes src/themes/WinMe/minimize_pressed.png | Bin 0 -> 216 bytes src/themes/WinMe/restore_normal.png | Bin 0 -> 235 bytes src/themes/WinMe/restore_pressed.png | Bin 0 -> 257 bytes src/themes/eOS/close.png | Bin 0 -> 1031 bytes src/themes/eOS/close_unfocused.png | Bin 0 -> 775 bytes src/themes/eOS/close_unfocused_over.png | Bin 0 -> 1031 bytes src/themes/eOS/maximize.png | Bin 0 -> 845 bytes src/themes/eOS/maximize_unfocused.png | Bin 0 -> 775 bytes src/themes/eOS/maximize_unfocused_over.png | Bin 0 -> 845 bytes src/themes/eOS/menu.png | Bin 0 -> 775 bytes src/themes/eOS/menu_prelight.png | Bin 0 -> 755 bytes src/themes/eOS/metacity-theme-1.xml | 537 ++ src/themes/eOS/minimize.png | Bin 0 -> 800 bytes src/themes/eOS/minimize_unfocused.png | Bin 0 -> 775 bytes src/themes/eOS/minimize_unfocused_over.png | Bin 0 -> 800 bytes src/themes/eOS/trough_left.png | Bin 0 -> 322 bytes src/themes/eOS/trough_left_unfocused.png | Bin 0 -> 324 bytes src/themes/eOS/trough_middle.png | Bin 0 -> 188 bytes src/themes/eOS/trough_middle_unfocused.png | Bin 0 -> 195 bytes src/themes/eOS/trough_right.png | Bin 0 -> 330 bytes src/themes/eOS/trough_right_unfocused.png | Bin 0 -> 335 bytes src/themes/eOS/unmaximize.png | Bin 0 -> 845 bytes src/themes/eOS/unmaximize_unfocused.png | Bin 0 -> 775 bytes src/themes/eOS/unmaximize_unfocused_over.png | Bin 0 -> 845 bytes src/tools/Makefile.am | 33 + src/tools/marco-grayscale.c | 109 + src/tools/marco-mag.c | 278 + src/tools/marco-message.c | 187 + src/tools/marco-window-demo.c | 1016 +++ src/tools/marco-window-demo.png | Bin 0 -> 3453 bytes src/ui/draw-workspace.c | 229 + src/ui/draw-workspace.h | 61 + src/ui/fixedtip.c | 133 + src/ui/fixedtip.h | 69 + src/ui/frames.c | 2940 ++++++++ src/ui/frames.h | 163 + src/ui/gradient.c | 842 +++ src/ui/gradient.h | 65 + src/ui/menu.c | 509 ++ src/ui/menu.h | 51 + src/ui/metaaccellabel.c | 456 ++ src/ui/metaaccellabel.h | 106 + src/ui/preview-widget.c | 601 ++ src/ui/preview-widget.h | 87 + src/ui/resizepopup.c | 217 + src/ui/tabpopup.c | 967 +++ src/ui/testgradient.c | 336 + src/ui/theme-parser.c | 4212 +++++++++++ src/ui/theme-parser.h | 32 + src/ui/theme-viewer.c | 1338 ++++ src/ui/theme.c | 6652 +++++++++++++++++ src/ui/theme.h | 1190 ++++ src/ui/themewidget.c | 183 + src/ui/themewidget.h | 78 + src/ui/ui.c | 1117 +++ src/wm-tester/Makefile.am | 25 + src/wm-tester/Makefile.in | 574 ++ src/wm-tester/focus-window.c | 37 + src/wm-tester/main.c | 245 + src/wm-tester/test-gravity.c | 308 + src/wm-tester/test-resizing.c | 257 + src/wm-tester/test-size-hints.c | 136 + 315 files changed, 386687 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 HACKING create mode 100644 MAINTAINERS create mode 100644 Makefile.am create mode 100644 NEWS create mode 100644 README create mode 100755 autogen.sh create mode 100644 configure.in create mode 100755 depcomp create mode 100644 distro/archlinux/PKGBUILD create mode 100644 distro/archlinux/mate-window-manager.install create mode 100644 distro/archlinux/metacity-restartstyle.patch create mode 100755 distro/ubuntu/build create mode 100755 distro/ubuntu/postinst create mode 100755 distro/ubuntu/preinst create mode 100755 distro/ubuntu/prerm create mode 100644 doc/Makefile.am create mode 100644 doc/Makefile.in create mode 100644 doc/code-overview.txt create mode 100644 doc/creating_themes/C/calstblx.dtd create mode 100644 doc/creating_themes/C/creating-marco-themes.xml create mode 100644 doc/creating_themes/C/dbcentx.mod create mode 100644 doc/creating_themes/C/dbgenent.mod create mode 100644 doc/creating_themes/C/dbhierx.mod create mode 100644 doc/creating_themes/C/dbnotnx.mod create mode 100644 doc/creating_themes/C/dbpoolx.mod create mode 100644 doc/creating_themes/C/docbookx.dtd create mode 100644 doc/creating_themes/C/htmltblx.mod create mode 100644 doc/creating_themes/C/soextblx.dtd create mode 100644 doc/creating_themes/Makefile.am create mode 100644 doc/creating_themes/Makefile.in create mode 100644 doc/dialogs.txt create mode 100644 doc/how-to-get-focus-right.txt create mode 100644 doc/man/Makefile.am create mode 100644 doc/man/Makefile.in create mode 100644 doc/man/marco-message.1 create mode 100644 doc/man/marco-theme-viewer.1 create mode 100644 doc/man/marco-window-demo.1 create mode 100644 doc/man/marco.1 create mode 100644 doc/marco-theme.dtd create mode 100644 doc/theme-format.txt create mode 100644 po/ChangeLog create mode 100644 po/LINGUAS create mode 100644 po/Makefile.in.in create mode 100644 po/POTFILES.in create mode 100644 po/POTFILES.skip create mode 100644 po/am.po create mode 100644 po/ar.po create mode 100644 po/as.po create mode 100644 po/ast.po create mode 100644 po/az.po create mode 100644 po/be.po create mode 100644 po/be@latin.po create mode 100644 po/bg.po create mode 100644 po/bn.po create mode 100644 po/bn_IN.po create mode 100644 po/br.po create mode 100644 po/bs.po create mode 100644 po/ca.po create mode 100644 po/ca@valencia.po create mode 100644 po/crh.po create mode 100644 po/cs.po create mode 100644 po/cy.po create mode 100644 po/da.po create mode 100644 po/de.po create mode 100644 po/dz.po create mode 100644 po/el.po create mode 100644 po/en@shaw.po create mode 100644 po/en_CA.po create mode 100644 po/en_GB.po create mode 100644 po/eo.po create mode 100644 po/es.po create mode 100644 po/et.po create mode 100644 po/eu.po create mode 100644 po/fa.po create mode 100644 po/fi.po create mode 100644 po/fr.po create mode 100644 po/ga.po create mode 100644 po/gl.po create mode 100644 po/gu.po create mode 100644 po/ha.po create mode 100644 po/he.po create mode 100644 po/hi.po create mode 100644 po/hr.po create mode 100644 po/hu.po create mode 100644 po/hy.po create mode 100644 po/id.po create mode 100644 po/ig.po create mode 100644 po/is.po create mode 100644 po/it.po create mode 100644 po/ja.po create mode 100644 po/ka.po create mode 100644 po/kn.po create mode 100644 po/ko.po create mode 100644 po/ku.po create mode 100644 po/la.po create mode 100644 po/lt.po create mode 100644 po/lv.po create mode 100644 po/mai.po create mode 100644 po/mg.po create mode 100644 po/mk.po create mode 100644 po/ml.po create mode 100644 po/mn.po create mode 100644 po/mr.po create mode 100644 po/ms.po create mode 100644 po/nb.po create mode 100644 po/nds.po create mode 100644 po/ne.po create mode 100644 po/nl.po create mode 100644 po/nn.po create mode 100644 po/oc.po create mode 100644 po/or.po create mode 100644 po/pa.po create mode 100644 po/pl.po create mode 100644 po/pt.po create mode 100644 po/pt_BR.po create mode 100644 po/ro.po create mode 100644 po/ru.po create mode 100644 po/rw.po create mode 100644 po/si.po create mode 100644 po/sk.po create mode 100644 po/sl.po create mode 100644 po/sq.po create mode 100644 po/sr.po create mode 100644 po/sr@latin.po create mode 100644 po/sv.po create mode 100644 po/ta.po create mode 100644 po/te.po create mode 100644 po/th.po create mode 100644 po/tk.po create mode 100644 po/tr.po create mode 100644 po/uk.po create mode 100644 po/vi.po create mode 100644 po/wa.po create mode 100644 po/xh.po create mode 100644 po/yo.po create mode 100644 po/zh_CN.po create mode 100644 po/zh_HK.po create mode 100644 po/zh_TW.po create mode 100644 rationales.txt create mode 100644 src/50-marco-desktop-key.xml.in create mode 100644 src/50-marco-key.xml.in create mode 100644 src/Makefile.am create mode 100644 src/compositor/compositor-private.h create mode 100644 src/compositor/compositor-xrender.c create mode 100644 src/compositor/compositor-xrender.h create mode 100644 src/compositor/compositor.c create mode 100644 src/core/async-getprop.c create mode 100644 src/core/async-getprop.h create mode 100644 src/core/atomnames.h create mode 100644 src/core/bell.c create mode 100644 src/core/bell.h create mode 100644 src/core/boxes.c create mode 100644 src/core/constraints.c create mode 100644 src/core/constraints.h create mode 100644 src/core/core.c create mode 100644 src/core/delete.c create mode 100644 src/core/display-private.h create mode 100644 src/core/display.c create mode 100644 src/core/edge-resistance.c create mode 100644 src/core/edge-resistance.h create mode 100644 src/core/effects.c create mode 100644 src/core/effects.h create mode 100644 src/core/errors.c create mode 100644 src/core/eventqueue.c create mode 100644 src/core/eventqueue.h create mode 100644 src/core/frame-private.h create mode 100644 src/core/frame.c create mode 100644 src/core/group-private.h create mode 100644 src/core/group-props.c create mode 100644 src/core/group-props.h create mode 100644 src/core/group.c create mode 100644 src/core/group.h create mode 100644 src/core/iconcache.c create mode 100644 src/core/iconcache.h create mode 100644 src/core/keybindings.c create mode 100644 src/core/keybindings.h create mode 100644 src/core/main.c create mode 100644 src/core/marco-Xatomtype.h create mode 100644 src/core/place.c create mode 100644 src/core/place.h create mode 100644 src/core/prefs.c create mode 100644 src/core/schema-bindings.c create mode 100644 src/core/screen-private.h create mode 100644 src/core/screen.c create mode 100644 src/core/session.c create mode 100644 src/core/session.h create mode 100644 src/core/stack.c create mode 100644 src/core/stack.h create mode 100644 src/core/testasyncgetprop.c create mode 100644 src/core/testboxes.c create mode 100644 src/core/util.c create mode 100644 src/core/window-private.h create mode 100644 src/core/window-props.c create mode 100644 src/core/window-props.h create mode 100644 src/core/window.c create mode 100644 src/core/workspace.c create mode 100644 src/core/workspace.h create mode 100644 src/core/xprops.c create mode 100644 src/include/all-keybindings.h create mode 100644 src/include/boxes.h create mode 100644 src/include/common.h create mode 100644 src/include/compositor.h create mode 100644 src/include/core.h create mode 100644 src/include/display.h create mode 100644 src/include/errors.h create mode 100644 src/include/frame.h create mode 100644 src/include/main.h create mode 100644 src/include/prefs.h create mode 100644 src/include/resizepopup.h create mode 100644 src/include/screen.h create mode 100644 src/include/tabpopup.h create mode 100644 src/include/types.h create mode 100644 src/include/ui.h create mode 100644 src/include/util.h create mode 100644 src/include/window.h create mode 100644 src/include/xprops.h create mode 100644 src/libmarco-private.pc.in create mode 100644 src/marco-wm.desktop.in create mode 100644 src/marco.desktop.in create mode 100644 src/marco.schemas.in.in create mode 100644 src/themes/ClearlooksRe/metacity-theme-1.xml create mode 100644 src/themes/Dopple-Left/metacity-theme-1.xml create mode 100644 src/themes/Dopple/metacity-theme-1.xml create mode 100644 src/themes/DustBlue/button_close_normal.png create mode 100644 src/themes/DustBlue/button_close_prelight.png create mode 100644 src/themes/DustBlue/button_close_pressed.png create mode 100644 src/themes/DustBlue/button_max_normal.png create mode 100644 src/themes/DustBlue/button_max_prelight.png create mode 100644 src/themes/DustBlue/button_max_pressed.png create mode 100644 src/themes/DustBlue/button_menu_normal.png create mode 100644 src/themes/DustBlue/button_menu_prelight.png create mode 100644 src/themes/DustBlue/button_menu_pressed.png create mode 100644 src/themes/DustBlue/button_min_normal.png create mode 100644 src/themes/DustBlue/button_min_prelight.png create mode 100644 src/themes/DustBlue/button_min_pressed.png create mode 100644 src/themes/DustBlue/menu.png create mode 100644 src/themes/DustBlue/metacity-theme-1.xml create mode 100644 src/themes/Makefile.am create mode 100644 src/themes/Spidey-Left/metacity-theme-1.xml create mode 100644 src/themes/Spidey/metacity-theme-1.xml create mode 100644 src/themes/Splint-Left/metacity-theme-1.xml create mode 100644 src/themes/Splint/metacity-theme-1.xml create mode 100644 src/themes/WinMe/close_normal.png create mode 100644 src/themes/WinMe/close_normal_small.png create mode 100644 src/themes/WinMe/close_pressed.png create mode 100644 src/themes/WinMe/close_pressed_small.png create mode 100644 src/themes/WinMe/maximize_normal.png create mode 100644 src/themes/WinMe/maximize_pressed.png create mode 100644 src/themes/WinMe/metacity-theme-1.xml create mode 100644 src/themes/WinMe/minimize_normal.png create mode 100644 src/themes/WinMe/minimize_pressed.png create mode 100644 src/themes/WinMe/restore_normal.png create mode 100644 src/themes/WinMe/restore_pressed.png create mode 100644 src/themes/eOS/close.png create mode 100644 src/themes/eOS/close_unfocused.png create mode 100644 src/themes/eOS/close_unfocused_over.png create mode 100644 src/themes/eOS/maximize.png create mode 100644 src/themes/eOS/maximize_unfocused.png create mode 100644 src/themes/eOS/maximize_unfocused_over.png create mode 100644 src/themes/eOS/menu.png create mode 100644 src/themes/eOS/menu_prelight.png create mode 100644 src/themes/eOS/metacity-theme-1.xml create mode 100644 src/themes/eOS/minimize.png create mode 100644 src/themes/eOS/minimize_unfocused.png create mode 100644 src/themes/eOS/minimize_unfocused_over.png create mode 100644 src/themes/eOS/trough_left.png create mode 100644 src/themes/eOS/trough_left_unfocused.png create mode 100644 src/themes/eOS/trough_middle.png create mode 100644 src/themes/eOS/trough_middle_unfocused.png create mode 100644 src/themes/eOS/trough_right.png create mode 100644 src/themes/eOS/trough_right_unfocused.png create mode 100644 src/themes/eOS/unmaximize.png create mode 100644 src/themes/eOS/unmaximize_unfocused.png create mode 100644 src/themes/eOS/unmaximize_unfocused_over.png create mode 100644 src/tools/Makefile.am create mode 100644 src/tools/marco-grayscale.c create mode 100644 src/tools/marco-mag.c create mode 100644 src/tools/marco-message.c create mode 100644 src/tools/marco-window-demo.c create mode 100644 src/tools/marco-window-demo.png create mode 100644 src/ui/draw-workspace.c create mode 100644 src/ui/draw-workspace.h create mode 100644 src/ui/fixedtip.c create mode 100644 src/ui/fixedtip.h create mode 100644 src/ui/frames.c create mode 100644 src/ui/frames.h create mode 100644 src/ui/gradient.c create mode 100644 src/ui/gradient.h create mode 100644 src/ui/menu.c create mode 100644 src/ui/menu.h create mode 100644 src/ui/metaaccellabel.c create mode 100644 src/ui/metaaccellabel.h create mode 100644 src/ui/preview-widget.c create mode 100644 src/ui/preview-widget.h create mode 100644 src/ui/resizepopup.c create mode 100644 src/ui/tabpopup.c create mode 100644 src/ui/testgradient.c create mode 100644 src/ui/theme-parser.c create mode 100644 src/ui/theme-parser.h create mode 100644 src/ui/theme-viewer.c create mode 100644 src/ui/theme.c create mode 100644 src/ui/theme.h create mode 100644 src/ui/themewidget.c create mode 100644 src/ui/themewidget.h create mode 100644 src/ui/ui.c create mode 100644 src/wm-tester/Makefile.am create mode 100644 src/wm-tester/Makefile.in create mode 100644 src/wm-tester/focus-window.c create mode 100644 src/wm-tester/main.c create mode 100644 src/wm-tester/test-gravity.c create mode 100644 src/wm-tester/test-resizing.c create mode 100644 src/wm-tester/test-size-hints.c diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 00000000..9971ab08 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Havoc Pennington diff --git a/COPYING b/COPYING new file mode 100644 index 00000000..d60c31a9 --- /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 geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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. + + , 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/ChangeLog b/ChangeLog new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/ChangeLog @@ -0,0 +1 @@ + diff --git a/HACKING b/HACKING new file mode 100644 index 00000000..e669b7a1 --- /dev/null +++ b/HACKING @@ -0,0 +1,298 @@ +Intro... + +Window managers have a few ways in which they are significantly different +from other applications. This file, combined with the code overview in +doc/code-overview.txt, should hopefully provide a series of relatively +quick pointers (hopefully only a few minutes each) to some of the places +one can look to orient themselves and get started. Some of this will be +general to window managers on X, much will be specific to Marco, and +there's probably some information that's common to programs in general but +is nonetheless useful. + +Overview + Administrative issues + Minimal Building/Testing Environment + Relevant standards and X properties + Debugging and testing + Debugging logs + Adding information to the log + Valgrind + Testing Utilities + Technical gotchas to keep in mind + Other important reading + Extra reading + Ideas for tasks to work on + + +Administrative issues + Don't commit substantive code in here without asking hp@redhat.com. + Adding translations, no-brainer typo fixes, etc. is fine. + + The code could use cleanup in a lot of places, feel free to do so. + + See http://developer.gnome.org/dotplan/for_maintainers.html for + information on how to make a release. The only difference from those + instructions is that the minor version number of a Marco release + should always be a number from the Fibonacci sequence. + +Minimal Building/Testing Environment + You do not need to _install_ a development version of Marco to + build, run and test it; you can run it from some temporary + directory. Also, you do not need to build all of Mate in order to + build a development version of Marco -- odds are, you may be able + to build marco from CVS without building any other modules. + + As long as you have gtk+ >= 2.10 and MateConf with your distro (gtk+ >= + 2.6 if you manually revert the change from bug 348633), you should + be able to install your distro's development packages + (e.g. gtk2-devel, MateConf2-devel, startup-notification-devel on + Fedora; also, remember to install the mate-common package which is + needed for building cvs versions of Mate modules like Marco) as + well as the standard development tools (gcc, autoconf, automake, + pkg-config, intltool, and libtool) and be ready to build and test + Marco. Steps to do so: + + $ svn checkout http://svn.gnome.org/svn/marco/trunk marco + $ cd marco + $ ./autogen.sh --prefix /usr + $ make + $ ./src/marco --replace + + Again, note that you do not need to run 'make install'. + +Relevant standards and X properties + There are two documents that describe some basics about how window + managers should behave: the ICCCM (Inter-Client Communication Conventions + Manual) and EWMH (Extended Window Manager Hints). You can find these at + the following locations: + ICCCM - http://tronche.com/gui/x/icccm/ + EWMH - :pserver:anoncvs@pdx.freedesktop.org:/cvs + The ICCCM is usually available in RPM or DEB format as well. There is + actually an online version of the EWMH, but it is almost always woefully + out of date. Just get it from cvs with these commands (the backslash + means include the stuff from the next line): + cvs -d :pserver:anoncvs@cvs.freedesktop.org:/cvs/icccm-extensions login + cvs -d :pserver:anoncvs@cvs.freedesktop.org:/cvs/icccm-extensions \ + checkout wm-spec + + DO NOT GO AND READ THOSE THINGS. THEY ARE REALLY, REALLY BORING. + + If you do, you'll probably end up catching up on your sleep instead of + hacking on Marco. ;-) Instead, just look at the table of contents and + glance at a page or two to get an idea of what's in there. Then only + refer to it if you see something weird in the code and you don't know + what it is but has some funny looking name like you see in one of those + two documents. + + You can refer to the COMPLIANCE file for additional information on these + specifications and Marco's compliance therewith. + + One of the major things those documents cover that are useful to learn + about immediately are X properties. The right way to learn about those, + though, is through hand on experimentation with the xprop command (and + then look up things you find from xprop in those two manuals if you're + curious enough). First, try running + xprop + in a terminal and click on one of the windows on your screen. That gives + you the x properties for that window. Look through them and get a basic + idea of what's there for kicks. Note that you can get rid of some of the + verboseness by grepping out the _NET_WM_ICON stuff, i.e. + xprop | grep -v _NET_WM_ICON + Next, try running + xprop -root + in a terminal. There's all the properties of the root window (which you + can think of as the "main" Xserver window). You can also manually + specify individual windows that you want the properties of with + xprop -id + if you know the id of the window in question. You can get the id of a + given window by either running xwininfo, e.g. + xwininfo | grep "Window id" | cut -f 4 -d ' ' + or by looking at the _NET_CLIENT_STACKING property of the root + window. Finally, it can also be useful to add "-spy" (without the + quotes) to the xprop command to get it to continually monitor that + window and report any changes to you. + +Debugging information + Trying to run a window manager under a typical debugger, such as gdb, + unfortunately just doesn't work very well. So, we have to resort to + other methods. + + Debugging logs + + First, note that you can start a new version of marco to replace the + existing one by running + marco --replace + (which also comes in handy in the form "./src/marco --replace" when + trying to quickly test a small change while hacking on marco without + doing a full "make install", though I'm going off topic...) This will + allow you to see any warnings printed at the terminal. Sometimes it's + useful to have these directed to a logfile instead, which you can do by + running + MARCO_USE_LOGFILE=1 marco --replace + The logfile it uses will be printed in the terminal. Sometimes, it's + useful to get more information than just warnings. You can set + MARCO_VERBOSE to do that, like so: + MARCO_VERBOSE=1 MARCO_USE_LOGFILE=1 marco --replace + (note that MARCO_VERBOSE=1 can be problematic without + MARCO_USE_LOGFILE=1; avoid it unless running in from something that + won't be managed by the new Marco--see bug 305091 for more details). + There are also other flags, such as MARCO_DEBUG, most of which I + haven't tried and don't know what they do. Go to the source code + directory and run + grep "MARCO_" * | grep getenv + to find out what the other ones are. + + Adding information to the log + + Since we can't single step with a debugger, we often have to fall back to + the primitive method of getting information we want to know: adding + "print" statements. Marco has a fairly structured way to do this, + using the functions meta_warning, meta_topic, and meta_verbose. All + three have the same basic format as printf, except that meta_topic also + takes a leading enumeration parameter to specify the type of message + being shown (makes it easier for grepping in a verbose log). You'll find + tons of examples in the source code if you need them; just do a quick + grep or look in most any file. Note that meta_topic and meta_verbose + messages only appear if verbosity is turned on. I tend to frequently add + temporary meta_warning statements (or switch meta_topic or meta_verbose + ones to meta_warning ones) and then undo the changes once I've learned + the info that I needed. + + There is also a meta_print_backtrace (which again is only active if + verbosity is turned on) that can also be useful if you want to learn how + a particular line of code gets called. And, of course, there's always + g_assert if you want to make sure some section isn't executed (or isn't + executed under certain conditions). + + Valgrind + + Valgrind is awesome for finding memory leaks or corruption and + uninitialized variables. But I also tend to use it in a non-traditional + way as a partial substitute for a normal debugger: it can provide me with + a stack trace of where marco is crashing if I made a change that + caused it to do so, which is one of the major uses of debuggers. (And, + what makes it cooler than a debugger is that there will also often be + warnings pinpointing the cause of the crash from either some kind of + simple memory corruption or an uninitialized variable). Sometimes, when + I merely want to know what is calling a particular function I'll just + throw in an "int i; printf("%d\n", i);" just because valgrind will give + me a full stacktrace whenever it sees that uninitialized variable being + used (yes, I could use meta_print_backtrace, but that means I have to + turn verbosity on). + + To run marco under valgrind, use options typical for any Mate + program, such as + valgrind --log-file=marco.log --tool=memcheck --num-callers=48 \ + --leak-check=yes --leak-resolution=high --show-reachable=yes \ + ./src/marco --replace + where, again, the backslashes mean to join all the stuff on the following + line with the previous one. + + However, there is a downside. Things run a little bit slowly, and it + appears that you'll need about 1.5GB of ram, which unfortunately prevents + most people from trying this. + + Testing Utilities + + src/run-marco.sh + The script src/run-marco.sh is useful to hack on the window manager. + It runs marco in an Xnest. e.g.: + CLIENTS=3 ./run-marco.sh + or + DEBUG=memprof ./run-marco.sh + or + DEBUG_TEST=1 ./run-marco-sh + or whatever. + + marco-message + The tool marco-message can be used as follows: + marco-message reload-theme + marco-message restart + marco-message enable-keybindings + marco-message disable-keybindings + The first of these is useful for testing themes, the second is just + another way (besides the --restart flag to marco itself) of + restarting marco, and the third is useful for testing Marco when + running it under an Xnest (typically, the Marco under the Xnest + wouldn't get keybinding notifications--making keyboard navigation not + work--but if you disable the keybindings for the global Marco then + the Marco under the Xnest can then get those keybinding notifications). + + marco-window-demo + marco-window-demo is good for trying behavior of various kinds + of window without launching a full desktop. + +Technical gotchas to keep in mind + Files that include gdk.h or gtk.h are not supposed to include + display.h or window.h or other core files. Files in the core + (display.[hc], window.[hc]) are not supposed to include gdk.h or + gtk.h. Reasons: + + "Basically you don't want GDK most of the time. It adds + abstractions that cause problems, because they aren't designed to + be used in a WM where we do weird stuff (display grabs, and just + being the WM). At best GDK adds inefficiency, at worst it breaks + things in weird ways where you have to be a GDK guru to figure + them out. Owen also told me that they didn't want to start adding + a lot of hacks to GDK to let a WM use it; we both agreed back in + the mists of time that marco would only use it for the "UI" + bits as it does. + + Having the split in the source code contains and makes very clear + the interface between the WM and GDK/GTK. This keeps people from + introducing extra GDK/GTK usage when it isn't needed or + appropriate. Also, it speeds up the compilation a bit, though this + was perhaps more relevant 5 years ago than it is now. + + There was also a very old worry that the GDK stuff might have to + be in a separate process to work right; that turned out to be + untrue. Though who knows what issues the CM will introduce." + + Remember that strings stored in X properties are not in UTF-8, and they + have to end up in UTF-8 before we try putting them through Pango. + + If you make any X request involving a client window, you have to + meta_error_trap_push() around the call; this is not necessary for X + requests on the frame windows. + + Remember that not all windows have frames, and window->frame can be NULL. + +Other important reading & where to get started + Extra reading + + There are some other important things to read to get oriented as well. + These are: + http://pobox.com/~hp/features.html + rationales.txt + doc/code-overview.txt + + It pays to read http://pobox.com/~hp/features.html in order + to understand the philosophy of Marco. + + The rationales.txt file has two things: (1) a list of design choices with + links in the form of bugzilla bugs that discuss the issue, and (2) a list + outstanding bug categories, each of which is tracked by a particular + tracker bug in bugzilla from which you can find several closely related + bug reports. + + doc/code-overview.txt provides a fairly good overview of the code, + including coverage of the function of the various files, the main + structures and their relationships, and places to start looking in the + code tailored to general categories of tasks. + + Ideas for tasks to work on + + There are a variety of things you could work on in the code. You may + have ideas of your own, but in case you don't, let me provide a list of + ideas you could choose from: + + If you're ambitious, there's a list of things Havoc made that he'd really + like to see tackled, which you can find at + http://log.ometer.com/2004-05.html. Be sure to double check with someone + to make sure the item is still relevant if you're interested in one of + these. Another place to look for ideas, of course, is bugzilla. One can + just do queries and look for things that look fixable. + + However, perhaps the best way of getting ideas of related tasks to work + on, is to look at the second half of the rationales.txt file, which tries + to group bugs by type. diff --git a/MAINTAINERS b/MAINTAINERS new file mode 100644 index 00000000..07873d66 --- /dev/null +++ b/MAINTAINERS @@ -0,0 +1,43 @@ +Currently active maintainers +-------------------------------- + +Elijah Newren +Email: newren gmail com +Userid: newren + + - Usually won't touch the theme bugs (isn't interested) or the + compositor (until open source nvidia drivers are up to snuff). + Tends to be most interested in libwnck/gtk interactions, focus + issues, constraints problems, and raising/stacking, but works on + just about anything other than themes and the compositor. + +Thomas Thurman +Email: thomas thurman org uk +Userid: tthurman + + - Responsible for all theme bugs and the compositor (thank goodness + Thomas got involved, eh?). I'm sure he'll replace this sentence + with his interests when he reads it. ;-) + + +Semi-active maintainers +-------------------------------- + +Havoc Pennington +Email: hp redhat com +Userid: hp + - Original author. Doesn't patch marco anymore, but is active in + answering questions, responding to bugs, providing very helpful + suggestions and insight, and even assisting with debugging. + + +Important historical figureheads +-------------------------------- + +Rob Adams (readams readams net) + - Was the main maintainer of marco for a while; particular areas + of focus included xinerama, placement, and an older version of the + constraints code. Still responds to bugs every once in a while. + +Søren Sandmann (sandmann redhat com) + - Wrote most of the current compositing manager code + libcm diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 00000000..725c69c9 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,7 @@ + +SUBDIRS=src po doc + +EXTRA_DIST = HACKING MAINTAINERS rationales.txt \ + intltool-extract.in intltool-merge.in intltool-update.in + +DISTCLEANFILES = intltool-extract intltool-merge intltool-update po/stamp-it po/.intltool-merge-cache diff --git a/NEWS b/NEWS new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/NEWS @@ -0,0 +1 @@ + diff --git a/README b/README new file mode 100644 index 00000000..66040291 --- /dev/null +++ b/README @@ -0,0 +1,473 @@ +Marco is not a meta-City as in an urban center, but rather +Meta-ness as in the state of being meta. i.e. marco : meta as +opacity : opaque. Also it may have something to do with the Meta key +on UNIX keyboards. + +The first release of Marco was version 2.3. Marco has no need for +your petty hangups about version numbers. + +The stable releases so far are 2.4.x, 2.6.x, 2.8.[01], 2.8.1.x, 2.8.5-, +2.10.x, 2.12.x, 2.14.x, 2.16.x. + +Unstable branches are 2.3.x, 2.5.x, 2.8.2-4, 2.9.x, 2.11.x, 2.13.x, +2.15.x, 2.17.x. + +COMPILING MARCO +=== + +You need GTK+ 2.2. For startup notification to work you need +libstartup-notification at +http://www.freedesktop.org/software/startup-notification/ or on the +MATE ftp site. You also need MateConf 1.2 (unless building a funky +extra-small embedded marco with --disable-mateconf, see below). + +REPORTING BUGS AND SUBMITTING PATCHES +=== + +Report new bugs on http://bugzilla.gnome.org. Please check for +duplicates, *especially* if you are reporting a feature request. + +Please do *not* add "me too!" or "yes I really want this!" comments to +feature requests in bugzilla. Please read +http://pobox.com/~hp/features.html prior to adding any kind of flame +about missing features or misfeatures. + +Feel free to send patches too; Marco is relatively small and +simple, so if you find a bug or want to add a feature it should be +pretty easy. Send me mail, or put the patch in bugzilla. + +See the HACKING file for some notes on hacking Marco. + +SHRINKING MARCO +=== + +Not that marco is huge, but a substantial amount of code is in +preferences handling, in static strings that aren't essential, and in +the theme engine. + +You can strip about 70K from the marco binary by compiling with +options such as: + + --disable-mateconf + --disable-sm + --disable-verbose-mode + --disable-startup-notification + +However the result is no good for desktop use, all prefs have to be +hardcoded in the binary, for example. If you wanted to make a really +small marco, here's some additional stuff you might consider +implementing: + + - add --disable-themes, which would replace theme.c and theme-parser.c + with a hardcoded implementation of the interface in theme.h, + should save about 80K. This should be fairly easy. + + - add --disable-gtk, which would implement the interface in ui.h + without using GTK. This one is easier than you think because the + main part of the window manager doesn't use GTK directly, but is + still fairly hard to do. You would probably have to give up some + of the features, such as window menus, as menus are pretty complex + to implement well. So time may be better spent adding a GTK + configure script feature to build GTK with only a small core set of + functionality. + +MARCO FEATURES +=== + + - Boring window manager for the adult in you. Many window managers + are like Marshmallow Froot Loops; Marco is like Cheerios. + + - Uses GTK+ 2.0 for drawing window frames. This means colors, fonts, + etc. come from GTK+ theme. + + - Does not expose the concept of "window manager" to the user. Some + of the features in the MATE control panel and other parts of the + desktop happen to be implemented in marco, such as changing your + window border theme, or changing your window navigation shortcuts, + but the user doesn't need to know this. + + - Includes only the window manager; does not try to be a desktop + environment. The pager, configuration, etc. are all separate and + modular. The "libwnck" library (which I also wrote) is available + for writing marco extensions, pagers, and so on. (But libwnck + isn't marco specific, or MATE-dependent; it requires only GTK, + and should work with KWin, fvwm2, and other EWMH-compliant WMs.) + + - Has a simple theme system and a couple of extra themes come with it. + Change themes via mateconf-editor or mateconftool or MATE themes control + panel: + mateconftool-2 --type=string --set /apps/marco/general/theme Crux + mateconftool-2 --type=string --set /apps/marco/general/theme Gorilla + mateconftool-2 --type=string --set /apps/marco/general/theme Atlanta + mateconftool-2 --type=string --set /apps/marco/general/theme Bright + + See theme-format.txt for docs on the theme format. Use + marco-theme-viewer to preview themes. + + - Change number of workspaces via mateconf-editor or mateconftool: + mateconftool-2 --type=int --set /apps/marco/general/num_workspaces 5 + + Can also change workspaces from MATE 2 pager. + + - Change focus mode: + mateconftool-2 --type=string --set /apps/marco/general/focus_mode mouse + mateconftool-2 --type=string --set /apps/marco/general/focus_mode sloppy + mateconftool-2 --type=string --set /apps/marco/general/focus_mode click + + - Global keybinding defaults include: + + Alt-Tab forward cycle window focus + Alt-Shift-Tab backward cycle focus + Alt-Ctrl-Tab forward cycle focus among panels + Alt-Ctrl-Shift-Tab backward cycle focus among panels + Alt-Escape cycle window focus without a popup thingy + Ctrl-Alt-Left Arrow previous workspace + Ctrl-Alt-Right Arrow next workspace + Ctrl-Alt-D minimize/unminimize all, to show desktop + + Change keybindings for example: + + unst mateconftool-2 --type=string --set /apps/marco/global_keybindings/switch_to_workspace_1 'F1' + + Also try the MATE keyboard shortcuts control panel, or + mateconf-editor. + + See marco.schemas for all available bindings. + + - Window keybindings: + + Alt-space window menu + + Mnemonics work in the menu. That is, Alt-space then underlined + letter in the menu item works. + + Choose Move from menu, and arrow keys to move the window. + + While moving, hold down Control to move slower, and + Shift to snap to edges. + + Choose Resize from menu, and nothing happens yet, but + eventually I might implement something. + + Keybindings for things like maximize window, vertical maximize, + etc. can be bound, but may not all exist by default. See + marco.schemas. + + - Window mouse bindings: + + Clicking anywhere on frame with button 1 will raise/focus window + + If you click a window control, such as the close button, then the + control will activate on button release if you are still over it + on release (as with most GUI toolkits) + + If you click and drag borders with button 1 it resizes the window + + If you click and drag the titlebar with button 1 it moves the + window. + + If you click anywhere on the frame with button 2 it lowers the + window. + + If you click anywhere on the frame with button 3 it shows the + window menu. + + If you hold down Super (windows key) and click inside a window, it + will move the window (buttons 1 and 2) or show menu (button 3). + Or you can configure a different modifier for this. + + If you pick up a window with button 1 and then switch workspaces + the window will come with you to the new workspace, this is + a feature copied from Enlightenment. + + If you hold down Shift while moving a window, the window snaps + to edges of other windows and the screen. + + - Session management: + + Marco connects to the session manager and will set itself up to + be respawned. It theoretically restores sizes/positions/workspace + for session-aware applications. + + - Marco implements much of the EWMH window manager specification + from freedesktop.org, as well as the older ICCCM. Please refer to + the COMPLIANCE file for information on marco compliance with + these standards. + + - Uses Pango to render text, so has cool i18n capabilities. + Supports UTF-8 window titles and such. + + - There are simple animations for actions such as minimization, + to help users see what is happening. Should probably + have a few more of these and make them nicer. + + - if you have the proper X setup, set the GDK_USE_XFT=1 + environment variable to get antialiased window titles. + + - considers the panel when placing windows and maximizing + them. + + - handles the window manager selection from the ICCCM. Will exit if + another WM claims it, and can claim it from another WM if you pass + the --replace argument. So if you're running another + ICCCM-compliant WM, you can run "marco --replace" to replace it + with Marco. + + - does basic colormap handling + + - and much more! well, maybe not a lot more. + +HOW TO ADD EXTERNAL FEATURES +=== + +You can write a marco "plugin" such as a pager, window list, icon +box, task menu, or even things like "window matching" using the +Extended Window Manager Hints. See http://www.freedesktop.org for the +EWMH specification. An easy-to-use library called "libwnck" is +available that uses the EWMH and is specifically designed for writing +WM accessories. + +You might be interested in existing accessories such as "Devil's Pie" +by Ross Burton, which add features to Marco (or other +EWMH-compliant WMs). + +MARCO BUGS, NON-FEATURES, AND CAVEATS +=== + +See bugzilla: http://bugzilla.gnome.org/query.cgi + +FAQ +=== + +Q: Will you add my feature? + +A: If it makes sense to turn on unconditionally, or is genuinely a + harmless preference that I would not be embarrassed to put in a + simple, uncluttered, user-friendly configuration dialog. + + If the only rationale for your feature is that other window + managers have it, or that you are personally used to it, or + something like that, then I will not be impressed. Marco is + firmly in the "choose good defaults" camp rather than the "offer 6 + equally broken ways to do it, and let the user pick one" camp. + + This is part of a "no crackrock" policy, despite some exceptions + I'm mildly embarrassed about. For example, multiple workspaces + probably constitute crackrock, they confuse most users and really + are not that useful if you have a decent tasklist and so on. But I + am too used to them to turn them off. Or alternatively + iconification/tasklist is crack, and workspaces/pager are good. But + having both is certainly a bit wrong. Sloppy focus is probably + crackrock too. + + But don't think unlimited crack is OK just because I slipped up a + little. No slippery slope here. + + Don't let this discourage patches and fixes - I love those. ;-) + Just be prepared to hear the above objections if your patch adds + some crack-ridden configuration option. + + http://pobox.com/~hp/free-software-ui.html + http://pobox.com/~hp/features.html + +Q: Will Marco be part of MATE? + +A: It is officially part of MATE as of MATE 2.2. Prior to that, + it was unofficially shipped as the default MATE WM by several + OS vendors. + +Q: Is Marco a Red Hat project? + +A: Marco's original creation was in no way funded, endorsed, or + encouraged by Red Hat, Inc. - I'm guessing Red Hat would not + consider "insufficient number of window managers for Linux" an + urgent problem. Just a wild guess though. + + Now that marco is the default WM however, Red Hat supports some + bugfixing and other work. + +Q: Why does Marco remember the workspace/position of some apps + but not others across logout/login? + +A: Marco only stores sizes/positions for apps that are session + managed. As far as I can determine, there is no way to attempt to + remember workspace/position for non-session-aware apps without + causing a lot of weird effects. + + The reason is that you don't know which non-SM-aware apps were + launched by the session. When you initially log in, Marco sees a + bunch of new windows appear. But it can't distinguish between + windows that were stored in your session, or windows you just + launched after logging in. If Marco tried to guess that a window + was from the session, it could e.g. end up maximizing a dialog, or + put a window you just launched on another desktop or in a weird + place. And in fact I see a lot of bugs like this in window managers + that try to handle non-session-aware apps. + + However, for session-aware apps, Marco can tell that the + application instance is from the session and thus restore it + reliably, assuming the app properly restores the windows it had + open on session save. + + So the correct way to fix the situation is to make apps + session-aware. libSM has come with X for years, it's very + standardized, it's shared by MATE and KDE - even twm is + session-aware. So anyone who won't take a patch to add SM is more + archaic than twm - and you should flame them. ;-) + + Docs on session management: + http://www.fifi.org/doc/xspecs/xsmp.txt.gz + http://www.fifi.org/doc/xspecs/SMlib.txt.gz + + See also the ICCCM section on SM. For MATE apps, use the + MateClient object. For a simple example of using libSM directly, + twm/session.c in the twm source code is pretty easy to understand. + +Q: How about adding viewports in addition to workspaces? + +A: I could conceivably be convinced to use viewports _instead_ of + workspaces, though currently I'm not thinking that. But I don't + think it makes any sense to have both; it's just confusing. They + are functionally equivalent. + + You may think this means that you won't have certain keybindings, + or something like that. This is a misconception. The only + _fundamental_ difference between viewports and workspaces is that + with viewports, windows can "overlap" and appear partially on + one and partially on another. All other differences that + traditionally exist in other window managers are accidental - + the features commonly associated with viewports can be implemented + for workspaces, and vice versa. + + So I don't want to have two kinds of + workspace/desktop/viewport/whatever, but I'm willing to add + features traditionally associated with either kind if those + features make sense. + +Q: Why is the panel always on top? + +A: Because it's a better user interface, and until we made this not + configurable a bunch of apps were not getting fixed (the app + authors were just saying "put your panel on the bottom" instead of + properly supporting fullscreen mode, and such). + + rationales.txt has the bugzilla URL for some flamefesting on this, + if you want to go back and relive the glory. + Read these and the bugzilla stuff before asking/commenting: + http://pobox.com/~hp/free-software-ui.html + http://pobox.com/~hp/features.html + +Q: Why is there no edge flipping? + +A: This one is also in rationales.txt. Because "ouija board" UI, where + you just move the mouse around and the computer guesses what you + mean, has a lot of issues. This includes mouse focus, shade-hover + mode, edge flipping, autoraise, etc. Marco has mouse focus and + autoraise as a compromise, but these features are all confusing for + many users, and cause problems with accessibility, fitt's law, and + so on. + + Read these and the bugzilla stuff before asking/commenting: + http://pobox.com/~hp/free-software-ui.html + http://pobox.com/~hp/features.html + +Q: Why does wireframe move/resize suck? + +A: You can turn it on with the reduced_resources setting. + + But: it has low usability, and is a pain + to implement, and there's no reason opaque move/resize should be a + problem on any setup that can run a modern desktop worth a darn to + begin with. + + Read these and the bugzilla stuff before asking/commenting: + http://pobox.com/~hp/free-software-ui.html + http://pobox.com/~hp/features.html + + The reason we had to add wireframe anyway was broken + proprietary apps that can't handle lots of resize events. + +Q: Why no XYZ? + +A: You are probably getting the idea by now - check rationales.txt, + query/search bugzilla, and read http://pobox.com/~hp/features.html + and http://pobox.com/~hp/free-software-ui.html + + Then sit down and answer the question for yourself. Is the feature + good? What's the rationale for it? Answer "why" not just "why not." + Justify in terms of users as a whole, not just users like + yourself. How else can you solve the same problem? etc. If that + leads you to a strong opinion, then please, post the rationale for + discussion to an appropriate bugzilla bug, or to + usability@gnome.org. + + Please don't just "me too!" on bugzilla bugs, please don't think + flames will get you anywhere, and please don't repeat rationale + that's already been offered. + +Q: Your dumb web pages you made me read talk about solving problems in + fundamental ways instead of adding preferences or workarounds. + What are some examples where marco has done this? + +A: There are quite a few, though many opportunities remain. Sometimes + the real fix involves application changes. The marco approach is + that it's OK to require apps to change, though there are also + plenty of workarounds in marco for battles considered too hard + to fight. + + Here are some examples: + + - fullscreen mode was introduced to allow position constraints, + panel-on-top, and other such things to apply to normal windows + while still allowing video players etc. to "just work" + + - "whether to include minimized windows in Alt+Tab" was solved + by putting minimized windows at the *end* of the tab order. + + - Whether to pop up a feedback display during Alt+Tab was solved by + having both Alt+Tab and Alt+Esc + + - Whether to have a "kill" feature was solved by automatically + detecting and offering to kill stuck apps. Better, marco + actually does "kill -9" on the process, it doesn't just + disconnect the process from the X server. You'll appreciate this + if you ever did a "kill" on Netscape 4, and watched it keep + eating 100% CPU even though the X server had booted it. + + - The workspaces vs. viewports mess was avoided by adding + directional navigation and such to workspaces, see discussion + earlier in this file. + + - Instead of configurable placement algorithms, there's just one + that works fairly well most of the time. + + - To avoid excess CPU use during opaque move/resize, we rate limit + the updates to the application window's size. + + - Instead of configurable "show size of window while resizing," + it's only shown for windows where it matters, such as terminals. + (Only use-case given for all windows is for web designers + choosing their web browser size, but there are web sites and + desktop backgrounds that do this for you.) + + - Using startup notification, applications open on the workspace + where you launched them, not the active workspace when their + window is opened. + + - and much more. + +Q: I think marco sucks. + +A: Feel free to use any WM you like. The reason marco follows the + ICCCM and EWMH specifications is that it makes marco a modular, + interchangeable part in the desktop. libwnck-based apps such as the + MATE window list will work just fine with any EWMH-compliant WM. + +Q: Did you spend a lot of time on this? + +A: Originally the answer was no. Sadly the answer is now yes. + +Q: How can you claim that you are anti-crack, while still + writing a window manager? + +A: I have no comment on that. diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 00000000..612e6f4f --- /dev/null +++ b/autogen.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +PKG_NAME="mate-window-manager" + +(test -f $srcdir/configure.in) || { + 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 Git" + exit 1 +} + +REQUIRED_AUTOMAKE_VERSION=1.9 +USE_MATE2_MACROS=1 +USE_COMMON_DOC_BUILD=yes + +. mate-autogen.sh + diff --git a/configure.in b/configure.in new file mode 100644 index 00000000..8a8544f7 --- /dev/null +++ b/configure.in @@ -0,0 +1,582 @@ +AC_PREREQ(2.50) + +m4_define([marco_major_version], [2011]) +m4_define([marco_minor_version], [11]) +# Fibonacci sequence for micro version numbering: +# 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987 +m4_define([marco_micro_version], [28]) + +m4_define([marco_version], + [marco_major_version.marco_minor_version.marco_micro_version]) +AC_INIT([marco], [marco_version], [https://github.com/perberos/mate-desktop-environment]) + +AC_CONFIG_SRCDIR(src/core/display.c) +AC_CONFIG_HEADERS(config.h) + +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE + +# Honor aclocal flags +AC_SUBST(ACLOCAL_AMFLAGS, "\${ACLOCAL_FLAGS}") + +GETTEXT_PACKAGE=marco +AC_SUBST(GETTEXT_PACKAGE) +AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Name of default gettext domain]) + +IT_PROG_INTLTOOL([0.34.90]) +AC_PROG_CC +AC_ISC_POSIX +AC_HEADER_STDC +AC_LIBTOOL_WIN32_DLL +AM_PROG_LIBTOOL + +#### Integer sizes + +AC_CHECK_SIZEOF(char) +AC_CHECK_SIZEOF(short) +AC_CHECK_SIZEOF(long) +AC_CHECK_SIZEOF(int) +AC_CHECK_SIZEOF(void *) +AC_CHECK_SIZEOF(long long) +AC_CHECK_SIZEOF(__int64) + +## byte order +AC_C_BIGENDIAN + +#### Warnings + +changequote(,)dnl +if test "x$GCC" = "xyes"; then + case " $CFLAGS " in + *[\ \ ]-Wall[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wall" ;; + esac + +# case " $CFLAGS " in +# *[\ \ ]-Wshadow[\ \ ]*) ;; +# *) CFLAGS="$CFLAGS -Wshadow" ;; +# esac + + case " $CFLAGS " in + *[\ \ ]-Wchar-subscripts[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wchar-subscripts" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wmissing-declarations[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wmissing-declarations" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wmissing-prototypes[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wmissing-prototypes" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wnested-externs[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wnested-externs" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wpointer-arith[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wpointer-arith" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wcast-align[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wcast-align" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-Wsign-compare[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wsign-compare" ;; + esac + + if test "x$enable_ansi" = "xyes"; then + case " $CFLAGS " in + *[\ \ ]-ansi[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -ansi" ;; + esac + + case " $CFLAGS " in + *[\ \ ]-pedantic[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -pedantic" ;; + esac + fi +fi +changequote([,])dnl + +AC_MSG_CHECKING([which gtk+ version to compile against]) +AC_ARG_WITH([gtk], + AC_HELP_STRING([--with-gtk=2.0|3.0], + [which gtk+ version to compile against (default: 2.0)]), + [case "$with_gtk" in + 2.0|3.0) ;; + *) AC_MSG_ERROR([invalid gtk+ version specified]);; + esac], + [with_gtk=2.0]) +AC_MSG_RESULT([$with_gtk]) + +case "$with_gtk" in + 2.0) GTK_API_VERSION=2.0 + GTK_MIN_VERSION=2.20.0 + CANBERRA_GTK=libcanberra-gtk + ;; + 3.0) GTK_API_VERSION=3.0 + GTK_MIN_VERSION=2.90.0 + CANBERRA_GTK=libcanberra-gtk3 + ;; +esac + +MARCO_PC_MODULES="gtk+-$GTK_API_VERSION >= $GTK_MIN_VERSION pango >= 1.2.0 $CANBERRA_GTK" +AC_SUBST(GTK_API_VERSION) + +AC_ARG_ENABLE(mateconf, + AC_HELP_STRING([--disable-mateconf], + [disable mateconf usage, for embedded/size-sensitive non-MATE builds]),, + enable_mateconf=yes) + +if test x$enable_mateconf = xyes; then + AC_DEFINE(HAVE_MATECONF,1,[Build with mateconf support]) + MARCO_PC_MODULES="$MARCO_PC_MODULES mateconf-2.0 >= 1.2.0" +fi + +AC_ARG_ENABLE(verbose-mode, + AC_HELP_STRING([--disable-verbose-mode], + [disable marco's ability to do verbose logging, for embedded/size-sensitive custom builds]),, + enable_verbose_mode=yes) + +if test x$enable_verbose_mode = xyes; then + AC_DEFINE(WITH_VERBOSE_MODE,1,[Build with verbose mode support]) +fi + +AC_ARG_ENABLE(sm, + AC_HELP_STRING([--disable-sm], + [disable marco's session management support, for embedded/size-sensitive custom non-MATE builds]),, + enable_sm=auto) + +AC_ARG_ENABLE(startup-notification, + AC_HELP_STRING([--disable-startup-notification], + [disable marco's startup notification support, for embedded/size-sensitive custom non-MATE builds]),, + enable_startup_notification=auto) + +AC_ARG_ENABLE(compositor, + AC_HELP_STRING([--disable-compositor], + [disable marco's compositing manager]),, + enable_compositor=auto) + +AC_ARG_ENABLE(xsync, + AC_HELP_STRING([--disable-xsync], + [disable marco's use of the XSync extension]),, + enable_xsync=auto) + +AC_ARG_ENABLE(render, + AC_HELP_STRING([--disable-render], + [disable marco's use of the RENDER extension]),, + enable_render=auto) + +AC_ARG_ENABLE(shape, + AC_HELP_STRING([--disable-shape], + [disable marco's use of the shaped window extension]),, + enable_shape=auto) + +## try definining HAVE_BACKTRACE +AC_CHECK_HEADERS(execinfo.h, [AC_CHECK_FUNCS(backtrace)]) + +AM_GLIB_GNU_GETTEXT + +## here we get the flags we'll actually use +# GOptionEntry requires glib-2.6.0 +PKG_CHECK_MODULES(ALL, glib-2.0 >= 2.6.0) +# gtk_window_set_icon_name requires gtk2+-2.60 +PKG_CHECK_MODULES(MARCO_MESSAGE, gtk+-$GTK_API_VERSION >= $GTK_MIN_VERSION) +PKG_CHECK_MODULES(MARCO_WINDOW_DEMO, gtk+-$GTK_API_VERSION >= $GTK_MIN_VERSION) + +if $PKG_CONFIG --atleast-version 1.2.0 pangoxft; then + echo "pangoxft found" +else + AC_MSG_ERROR("Pango 1.2.0 or greater based on Xft2 is required") +fi + +# Unconditionally use this dir to avoid a circular dep with matecc +MATE_KEYBINDINGS_KEYSDIR="${datadir}/mate-control-center/keybindings" +AC_SUBST(MATE_KEYBINDINGS_KEYSDIR) + +STARTUP_NOTIFICATION_VERSION=0.7 +AC_MSG_CHECKING([Startup notification library >= $STARTUP_NOTIFICATION_VERSION]) +if $PKG_CONFIG --atleast-version $STARTUP_NOTIFICATION_VERSION libstartup-notification-1.0; then + have_startup_notification=yes +else + have_startup_notification=no +fi +AC_MSG_RESULT($have_startup_notification) + +if test x$enable_startup_notification = xyes; then + have_startup_notification=yes + echo "startup-notification support forced on" +elif test x$enable_startup_notification = xauto; then + true +else + have_startup_notification=no +fi + +if test x$have_startup_notification = xyes; then + echo "Building with libstartup-notification" + MARCO_PC_MODULES="$MARCO_PC_MODULES libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_VERSION" + AC_DEFINE(HAVE_STARTUP_NOTIFICATION, , [Building with startup notification support]) +else + echo "Building without libstartup-notification" +fi + +## init this, it gets set either in the compositor check below +## or the render-specific check later +have_xrender=no + +XCOMPOSITE_VERSION=0.2 +if test x$enable_compositor = xyes; then + have_xcomposite=yes +elif test x$enable_compositor = xauto; then + echo "Building compositing manager by default now." + have_xcomposite=yes +else + have_xcomposite=no +fi + +if test x$have_xcomposite = xyes; then + AC_MSG_CHECKING([Xcomposite >= $XCOMPOSITE_VERSION]) + if $PKG_CONFIG --atleast-version $XCOMPOSITE_VERSION xcomposite; then + AC_MSG_RESULT([yes]) + else + AC_MSG_ERROR([no. Use --disable-compositor to disable.]) + fi +fi + +if test x$have_xcomposite = xyes; then + MARCO_PC_MODULES="$MARCO_PC_MODULES xcomposite >= $XCOMPOSITE_VERSION xfixes xrender xdamage" + AC_DEFINE(HAVE_COMPOSITE_EXTENSIONS, 1, [Building with compositing manager support]) + echo "Building with compositing manager" + + ## force on render also + have_xrender=yes +else + echo "Building without compositing manager" +fi + +## if no compositor, still possibly enable render +if test x$have_xcomposite = xno; then + XRENDER_VERSION=0.0 + AC_MSG_CHECKING([xrender >= $XRENDER_VERSION]) + if $PKG_CONFIG --atleast-version $XRENDER_VERSION xrender; then + have_xrender=yes + else + have_xrender=no + fi + AC_MSG_RESULT($have_xrender) + + if test x$enable_render = xyes; then + have_xrender=yes + echo "Render support forced on" + elif test x$enable_render = xauto; then + true + else + have_xrender=no + fi + + if test x$have_xrender = xyes; then + echo "Building with Render" + MARCO_PC_MODULES="$MARCO_PC_MODULES xrender >= $XRENDER_VERSION" + fi +fi ## have_composite + +if test x$have_xrender = xyes; then + AC_DEFINE(HAVE_RENDER, , [Building with Render extension support]) +fi + +AC_MSG_CHECKING([Xcursor]) +if $PKG_CONFIG xcursor; then + have_xcursor=yes + else + have_xcursor=no + fi + AC_MSG_RESULT($have_xcursor) + +if test x$have_xcursor = xyes; then + echo "Building with Xcursor" + MARCO_PC_MODULES="$MARCO_PC_MODULES xcursor" + AC_DEFINE(HAVE_XCURSOR, , [Building with Xcursor support]) +fi + +AC_MSG_CHECKING([libgtop]) +if $PKG_CONFIG libgtop-2.0; then + have_gtop=yes + else + have_gtop=no + fi + AC_MSG_RESULT($have_gtop) + +if test x$have_gtop = xyes; then + echo "Building with libgtop" + MARCO_PC_MODULES="$MARCO_PC_MODULES libgtop-2.0" + AC_DEFINE(HAVE_GTOP, , [Building with libgtop]) +fi + +PKG_CHECK_MODULES(MARCO, $MARCO_PC_MODULES) + +AC_PATH_XTRA + +ALL_X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" + +# Check for Xinerama extension (Solaris impl or Xfree impl) +marco_save_cppflags="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $X_CFLAGS" + +AC_ARG_ENABLE(xinerama, + AC_HELP_STRING([--disable-xinerama], + [disable marco's use of the Xinerama extension]), + try_xinerama=$enable_xinerama,try_xinerama=yes) + +use_solaris_xinerama=no +use_xfree_xinerama=no +if test "${try_xinerama}" != no; then + case "$host" in + *-*-solaris*) + # Check for solaris + use_solaris_xinerama=yes + AC_CHECK_LIB(Xext, XineramaGetInfo, + use_solaris_xinerama=yes, use_solaris_xinerama=no, + $ALL_X_LIBS) + if test "x$use_solaris_xinerama" = "xyes"; then + AC_CHECK_HEADER(X11/extensions/xinerama.h, + if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then + X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS" + fi + AC_DEFINE(HAVE_SOLARIS_XINERAMA, , [Have Solaris-style Xinerama]) + AC_DEFINE(HAVE_XINERAMA, , [Have some version of Xinerama]), + use_solaris_xinerama=no, + [#include ]) + fi + AC_MSG_CHECKING(for Xinerama support on Solaris) + AC_MSG_RESULT($use_solaris_xinerama); + ;; + *) + # Check for XFree + use_xfree_xinerama=yes + AC_CHECK_LIB(Xinerama, XineramaQueryExtension, + [AC_CHECK_HEADER(X11/extensions/Xinerama.h, + X_EXTRA_LIBS="-lXinerama $X_EXTRA_LIBS" + if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then + X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS" + fi + AC_DEFINE(HAVE_XFREE_XINERAMA, , [Have XFree86-style Xinerama]) + AC_DEFINE(HAVE_XINERAMA,, [Have some version of Xinerama]), + use_xfree_xinerama=no, + [#include ])], + use_xfree_xinerama=no, -lXext $ALL_X_LIBS) + AC_MSG_CHECKING(for Xinerama support on XFree86) + AC_MSG_RESULT($use_xfree_xinerama); + ;; + esac +fi + +CPPFLAGS="$marco_save_cppflags" + +SHAPE_LIBS= +found_shape=no +AC_CHECK_LIB(Xext, XShapeQueryExtension, + [AC_CHECK_HEADER(X11/extensions/shape.h, + SHAPE_LIBS=-lXext found_shape=yes)], + , $ALL_X_LIBS) + +if test x$enable_shape = xno; then + found_shape=no +fi + +if test x$enable_shape = xyes; then + if test "$found_shape" = "no"; then + AC_MSG_ERROR([--enable-shape forced and Shape not found]) + exit 1 + fi +fi + +if test "x$found_shape" = "xyes"; then + AC_DEFINE(HAVE_SHAPE, , [Have the shape extension library]) +fi + +found_xkb=no +AC_CHECK_LIB(X11, XkbQueryExtension, + [AC_CHECK_HEADER(X11/XKBlib.h, + found_xkb=yes)], + , $ALL_X_LIBS) + +if test "x$found_xkb" = "xyes"; then + AC_DEFINE(HAVE_XKB, , [Have keyboard extension library]) +fi + + +RANDR_LIBS= +found_randr=no +AC_CHECK_LIB(Xrandr, XRRUpdateConfiguration, + [AC_CHECK_HEADER(X11/extensions/Xrandr.h, + RANDR_LIBS=-lXrandr found_randr=yes,, + [#include ])], + , -lXrender -lXext $ALL_X_LIBS) + +if test "x$found_randr" = "xyes"; then + AC_DEFINE(HAVE_RANDR, , [Have the Xrandr extension library]) +fi + +XSYNC_LIBS= +found_xsync=no +AC_CHECK_LIB(Xext, XSyncQueryExtension, + [AC_CHECK_HEADER(X11/extensions/sync.h, + found_xsync=yes,, + [#include ])], + , $ALL_X_LIBS) + +if test x$enable_xsync = xno; then + found_xsync=no +fi + +if test x$enable_xsync = xyes; then + if test "$found_xsync" = "no"; then + AC_MSG_ERROR([--enable-xsync forced and XSync not found]) + exit 1 + fi +fi + +if test "x$found_xsync" = "xyes"; then + XSYNC_LIBS=-lXext + AC_DEFINE(HAVE_XSYNC, , [Have the Xsync extension library]) +fi + +MARCO_LIBS="$MARCO_LIBS $XSYNC_LIBS $RANDR_LIBS $SHAPE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lm" +MARCO_MESSAGE_LIBS="$MARCO_MESSAGE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" +MARCO_WINDOW_DEMO_LIBS="$MARCO_WINDOW_DEMO_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" +MARCO_PROPS_LIBS="$MARCO_PROPS_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" + +found_sm=no +case "$MARCO_LIBS" in + *-lSM*) + found_sm=yes + ;; + *) + AC_CHECK_LIB(SM, SmcSaveYourselfDone, + [AC_CHECK_HEADERS(X11/SM/SMlib.h, + MARCO_LIBS="-lSM -lICE $MARCO_LIBS" found_sm=yes)], + , $MARCO_LIBS) + ;; +esac + +if test x$enable_sm = xno; then + found_sm=no +fi + +if test x$enable_sm = xyes; then + if test "$found_sm" = "no"; then + AC_MSG_ERROR([--enable-sm forced and -lSM not found]) + exit 1 + fi +fi + +if test "$found_sm" = "yes"; then + AC_DEFINE(HAVE_SM, , [Building with SM support]) +fi + +AM_CONDITIONAL(HAVE_SM, test "$found_sm" = "yes") + +HOST_ALIAS=$host_alias +AC_SUBST(HOST_ALIAS) + +AC_PATH_PROG(GDK_PIXBUF_CSOURCE, gdk-pixbuf-csource, no) + +if test x"$GDK_PIXBUF_CSOURCE" = xno; then + AC_MSG_ERROR([gdk-pixbuf-csource executable not found in your path - should be installed with GTK]) +fi + +AC_SUBST(GDK_PIXBUF_CSOURCE) + +if test x$enable_mateconf = xyes; then + AC_PATH_PROG(MATECONFTOOL, mateconftool-2, no) + if test x"$MATECONFTOOL" = xno; then + AC_MSG_ERROR([mateconftool-2 executable not found in your path - should be installed with MateConf]) + fi + + AM_MATECONF_SOURCE_2 +else + MATECONF_SCHEMAS_INSTALL_TRUE='#' + MATECONF_SCHEMAS_INSTALL_FALSE= +fi + +AC_PATH_PROG(MATEDIALOG, matedialog, no) +if test x"$MATEDIALOG" = xno; then + AC_MSG_ERROR([matedialog not found in your path - needed for dialogs]) +fi + +AC_ARG_ENABLE(debug, + [ --enable-debug enable debugging],, + enable_debug=no) +if test "x$enable_debug" = "xyes"; then + CFLAGS="$CFLAGS -g -O" +fi + +# Warnings are there for a reason +if test "x$GCC" = "xyes"; then + CFLAGS="$CFLAGS -Wall -ansi" + if test "x$enable_maintainer_mode" = "xyes"; then + CFLAGS="$CFLAGS" + fi +fi + +# Use mate-doc-utils: +MATE_DOC_INIT([0.8.0]) + +AC_CONFIG_FILES([ +Makefile +doc/Makefile +doc/creating_themes/Makefile +doc/man/Makefile +src/Makefile +src/wm-tester/Makefile +src/libmarco-private.pc +src/tools/Makefile +src/themes/Makefile +po/Makefile.in +]) + +AC_OUTPUT + +if test x$enable_mateconf = xno; then + echo "*** WARNING WARNING WARNING WARNING WARNING" + echo "*** Building without MateConf. This means there's no" + echo "*** way to change prefs except hacking source code." + echo "*** This is intended for embedded systems etc., not for normal use." +fi + +if test x$enable_verbose_mode = xno; then + echo "*** WARNING WARNING WARNING WARNING WARNING" + echo "*** Building without verbose mode" + echo "*** This means there's no way to debug marco problems." + echo "*** Please build normal desktop versions of marco" + echo "*** with verbose mode enabled so users can use it when they report bugs." +fi + +dnl ========================================================================== +echo " +marco-$VERSION (using gtk+-${GTK_API_VERSION}): + + prefix: ${prefix} + source code location: ${srcdir} + compiler: ${CC} + + MateConf: ${enable_mateconf} + XFree86 Xinerama: ${use_xfree_xinerama} + Solaris Xinerama: ${use_solaris_xinerama} + Startup notification: ${have_startup_notification} + Compositing manager: ${have_xcomposite} + Session management: ${found_sm} + Shape extension: ${found_shape} + Resize-and-rotate: ${found_randr} + Xsync: ${found_xsync} + Render: ${have_xrender} + Xcursor: ${have_xcursor} +" diff --git a/depcomp b/depcomp new file mode 100755 index 00000000..df8eea7e --- /dev/null +++ b/depcomp @@ -0,0 +1,630 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> "$depfile" + echo >> "$depfile" + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/distro/archlinux/PKGBUILD b/distro/archlinux/PKGBUILD new file mode 100644 index 00000000..bf4c4f45 --- /dev/null +++ b/distro/archlinux/PKGBUILD @@ -0,0 +1,40 @@ +pkgname=mate-window-manager +pkgver=2011.11.28 +pkgrel=1 +pkgdesc="A window manager for MATE" +arch=(i686 x86_64) +license=('GPL') +depends=('mate-conf' 'mate-dialogs' 'libgtop' 'libwnck') # 'libcanberra' 'startup-notification' +makedepends=('intltool' 'pkgconfig' 'mate-doc-utils') +options=('!emptydirs' '!libtool') +install=mate-window-manager.install +url="http://matsusoft.com.ar/projects" +groups=('mate') +source=(http://sourceforge.net/projects/matede/files/${pkgver}/${pkgname}.tar.gz/download + metacity-restartstyle.patch) +sha256sums=('bbacc3cd0b7cb0d44d0417613d151cc3178a4b0fcf3ff77b4d254c9927f9942e' + 'ea2450ca3e4fb59166ec18ff4844cc61cb16865880dc6b125078a3ab47bf2caf') + +build() { + cd "${srcdir}/${pkgname}" + patch -Np1 -i "${srcdir}/metacity-restartstyle.patch" || return 1 + ./autogen.sh \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libexecdir=/usr/lib/mate-window-manager \ + --disable-static \ + --disable-startup-notification \ + --disable-scrollkeeper || return 1 + make || return 1 +} + +package() { + cd "${srcdir}/${pkgname}" + + make MATECONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 DESTDIR="${pkgdir}" install || return 1 + + install -m755 -d "${pkgdir}/usr/share/mateconf/schemas" + mateconf-merge-schema "${pkgdir}/usr/share/mateconf/schemas/${pkgname}.schemas" --domain ${pkgname} ${pkgdir}/etc/mateconf/schemas/*.schemas + rm -f ${pkgdir}/etc/mateconf/schemas/*.schemas +} diff --git a/distro/archlinux/mate-window-manager.install b/distro/archlinux/mate-window-manager.install new file mode 100644 index 00000000..7bdd0c02 --- /dev/null +++ b/distro/archlinux/mate-window-manager.install @@ -0,0 +1,17 @@ + pkgname=mate-window-manager + +post_install() { + usr/sbin/mateconfpkg --install ${pkgname} +} + +pre_upgrade() { + pre_remove $1 +} + +post_upgrade() { + post_install $1 +} + +pre_remove() { + usr/sbin/mateconfpkg --uninstall ${pkgname} +} diff --git a/distro/archlinux/metacity-restartstyle.patch b/distro/archlinux/metacity-restartstyle.patch new file mode 100644 index 00000000..99fe864a --- /dev/null +++ b/distro/archlinux/metacity-restartstyle.patch @@ -0,0 +1,139 @@ +From a3de65d5d1861f755ced7cad291fbbd4f1b8ef51 Mon Sep 17 00:00:00 2001 +From: Owen W. Taylor +Date: Sat, 22 Aug 2009 15:00:57 -0400 +Subject: [PATCH] Should set RestartStyleHint to RestartIfRunning when replaced + +This reverts most of commit abbd057eb967e6ab462ffe305f41b2b04d417b25; + + - It's fine to call meta_session_shutdown() after the display + is closed, since it's talking over the ICE connection + - We should not call warn_about_lame_clients_and_finish_interact() + unless we are interacting with the window manager in a session + save. + +However, the part of abbd057 that fixed accessing freed memory was +fixing a real problem; this patches does the same thing in a simpler +way by fixing an obvious type in meta_display_close() where it was +NULL'ing out the local variable 'display' rather than the global +variable 'the_display' and adding keeping the check in meta_finalize() +that was added in abbd057. + +The order of calling meta_session_shutdown() and +calling meta_display_close() is reverted back to the old order to +make it clear that it's OK if the display way already closed previously. + +http://bugzilla.gnome.org/show_bug.cgi?id=588119 +--- + src/core/display-private.h | 2 +- + src/core/display.c | 16 ++++------------ + src/core/main.c | 5 ++--- + src/core/session.c | 8 -------- + 4 files changed, 7 insertions(+), 24 deletions(-) + +diff --git a/src/core/display-private.h b/src/core/display-private.h +index 19287f3..9c8ebc6 100644 +--- a/src/core/display-private.h ++++ b/src/core/display-private.h +@@ -329,7 +329,7 @@ MetaScreen* meta_display_screen_for_xwindow (MetaDisplay *display, + void meta_display_grab (MetaDisplay *display); + void meta_display_ungrab (MetaDisplay *display); + +-void meta_display_unmanage_screen (MetaDisplay **display, ++void meta_display_unmanage_screen (MetaDisplay *display, + MetaScreen *screen, + guint32 timestamp); + +diff --git a/src/core/display.c b/src/core/display.c +index 55c374a..8e35a35 100644 +--- a/src/core/display.c ++++ b/src/core/display.c +@@ -926,7 +926,7 @@ meta_display_close (MetaDisplay *display, + meta_compositor_destroy (display->compositor); + + g_free (display); +- display = NULL; ++ the_display = NULL; + + meta_quit (META_EXIT_SUCCESS); + } +@@ -4762,13 +4762,10 @@ process_selection_clear (MetaDisplay *display, + meta_verbose ("Got selection clear for screen %d on display %s\n", + screen->number, display->name); + +- meta_display_unmanage_screen (&display, ++ meta_display_unmanage_screen (display, + screen, + event->xselectionclear.time); + +- if (!display) +- the_display = NULL; +- + /* display and screen may both be invalid memory... */ + + return; +@@ -4790,12 +4787,10 @@ process_selection_clear (MetaDisplay *display, + } + + void +-meta_display_unmanage_screen (MetaDisplay **displayp, ++meta_display_unmanage_screen (MetaDisplay *display, + MetaScreen *screen, + guint32 timestamp) + { +- MetaDisplay *display = *displayp; +- + meta_verbose ("Unmanaging screen %d on display %s\n", + screen->number, display->name); + +@@ -4805,10 +4800,7 @@ meta_display_unmanage_screen (MetaDisplay **displayp, + display->screens = g_slist_remove (display->screens, screen); + + if (display->screens == NULL) +- { +- meta_display_close (display, timestamp); +- *displayp = NULL; +- } ++ meta_display_close (display, timestamp); + } + + void +diff --git a/src/core/main.c b/src/core/main.c +index a36a396..44d317e 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -361,12 +361,11 @@ static void + meta_finalize (void) + { + MetaDisplay *display = meta_get_display(); +- +- meta_session_shutdown (); +- + if (display) + meta_display_close (display, + CurrentTime); /* I doubt correct timestamps matter here */ ++ ++ meta_session_shutdown (); + } + + static void +diff --git a/src/core/session.c b/src/core/session.c +index 7e3b389..0d69350 100644 +--- a/src/core/session.c ++++ b/src/core/session.c +@@ -376,14 +376,6 @@ meta_session_shutdown (void) + SmProp *props[1]; + char hint = SmRestartIfRunning; + +- if (!meta_get_display ()) +- { +- meta_verbose ("Cannot close session because there is no display"); +- return; +- } +- +- warn_about_lame_clients_and_finish_interact (FALSE); +- + if (session_connection == NULL) + return; + +-- +1.6.4 diff --git a/distro/ubuntu/build b/distro/ubuntu/build new file mode 100755 index 00000000..776572ca --- /dev/null +++ b/distro/ubuntu/build @@ -0,0 +1,35 @@ +#!/bin/bash + +# fill it +pkgname=mate-window-manager +pkgver=2011.11.28 +pkgrel=1 +pkgdesc="A window manager for MATE" +depends=('mate-conf' 'mate-dialogs' 'libgtop2-7' 'libwnck22') +# editar esta funcion! +build() { + cd $pkgsrc + # descomprimir + tar xvzf download + # entramos a la carpeta + cd ${pkgname} + + ./autogen.sh \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libexecdir=/usr/lib/${pkgname} \ + --disable-static \ + --disable-startup-notification \ + --disable-scrollkeeper || return 1 + make || return 1 + + make MATECONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 DESTDIR="${pkgdir}" install + + install -m755 -d "${pkgdir}/usr/share/mateconf/schemas" + mateconf-merge-schema "${pkgdir}/usr/share/mateconf/schemas/${pkgname}.schemas" --domain ${pkgname} ${pkgdir}/etc/mateconf/schemas/*.schemas + rm -f ${pkgdir}/etc/mateconf/schemas/*.schemas +} + +# esto incluye la parte que se repite en la mayoria de los builds +. /usr/share/mate-doc-utils/mate-debian.sh diff --git a/distro/ubuntu/postinst b/distro/ubuntu/postinst new file mode 100755 index 00000000..18863d13 --- /dev/null +++ b/distro/ubuntu/postinst @@ -0,0 +1,9 @@ +#!/bin/sh + +pkgname=mate-window-manager + +if [ -f /usr/sbin/mateconfpkg ]; then + /usr/sbin/mateconfpkg --install ${pkgname} +fi + +exit 0 diff --git a/distro/ubuntu/preinst b/distro/ubuntu/preinst new file mode 100755 index 00000000..85d7a724 --- /dev/null +++ b/distro/ubuntu/preinst @@ -0,0 +1,8 @@ +#!/bin/sh -e + +pkgname=mate-window-manager + +if [ -f /usr/sbin/mateconfpkg ]; then + /usr/sbin/mateconfpkg --uninstall ${pkgname} +fi + diff --git a/distro/ubuntu/prerm b/distro/ubuntu/prerm new file mode 100755 index 00000000..e05519b4 --- /dev/null +++ b/distro/ubuntu/prerm @@ -0,0 +1,11 @@ +#!/bin/bash + +set -e + +pkgname=mate-window-manager + +if [ -f /usr/sbin/mateconfpkg ]; then + /usr/sbin/mateconfpkg --uninstall ${pkgname} +fi + +exit 0 diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 00000000..1c16425a --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,4 @@ +SUBDIRS = man creating_themes + +EXTRA_DIST=theme-format.txt marco-theme.dtd dialogs.txt code-overview.txt \ + how-to-get-focus-right.txt diff --git a/doc/Makefile.in b/doc/Makefile.in new file mode 100644 index 00000000..906b9bbd --- /dev/null +++ b/doc/Makefile.in @@ -0,0 +1,609 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +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 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_CFLAGS = @ALL_CFLAGS@ +ALL_LIBS = @ALL_LIBS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ +DLLTOOL = @DLLTOOL@ +DOC_USER_FORMATS = @DOC_USER_FORMATS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GDK_PIXBUF_CSOURCE = @GDK_PIXBUF_CSOURCE@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTK_API_VERSION = @GTK_API_VERSION@ +HELP_DIR = @HELP_DIR@ +HOST_ALIAS = @HOST_ALIAS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MARCO_CFLAGS = @MARCO_CFLAGS@ +MARCO_LIBS = @MARCO_LIBS@ +MARCO_MESSAGE_CFLAGS = @MARCO_MESSAGE_CFLAGS@ +MARCO_MESSAGE_LIBS = @MARCO_MESSAGE_LIBS@ +MARCO_WINDOW_DEMO_CFLAGS = @MARCO_WINDOW_DEMO_CFLAGS@ +MARCO_WINDOW_DEMO_LIBS = @MARCO_WINDOW_DEMO_LIBS@ +MATECONFTOOL = @MATECONFTOOL@ +MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@ +MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@ +MATEDIALOG = @MATEDIALOG@ +MATE_KEYBINDINGS_KEYSDIR = @MATE_KEYBINDINGS_KEYSDIR@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OMF_DIR = @OMF_DIR@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = man creating_themes +EXTRA_DIST = theme-format.txt marco-theme.dtd dialogs.txt code-overview.txt \ + how-to-get-focus-right.txt + +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# 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/doc/code-overview.txt b/doc/code-overview.txt new file mode 100644 index 00000000..566abd04 --- /dev/null +++ b/doc/code-overview.txt @@ -0,0 +1,185 @@ +This is not meant to be comprehensive by any means. Rather it is +meant as just a brief overview of some of the bigger structures and +files, with guides for a variety of task categories providing places +to start looking in the code and things to look for. + +Overview + Jobs of various files + Major data structures and their relationships + Getting started -- where to look + + +Jobs of various files + src/window.c is where all the guts of the window manager live. This is + basically the only remotely scary file. + + src/frames.c is the GtkWidget that handles drawing window frames. + + src/core.h defines the interface used by the GTK portion of the window + manager to talk to the other portions. There's some cruft in here that's + unused, since nearly all window operations have moved out of this file so + frameless apps can have window operations. + + src/ui.h defines the interface the plain Xlib portion of the window + manager uses to talk to the GTK portion. + + src/theme.c and src/theme-parser.c have the theme system; this is + well-modularized from the rest of the code, since the theme viewer app + links to these files in addition to the WM itself. + +Major data structures and their relationships + Major structs have a "Meta" prefix, thus MetaDisplay, MetaScreen, + MetaWindow, etc. This serves as a way of namespacing in C. It also has + the side effect of avoiding conflicts with common names that X already + uses such as Display, Screen, Window, etc. Note that when I refer to a + display below, I'm meaning a MetaDisplay and not a Display. + + Don't confuse displays and screens. While Marco can run with multiple + displays, it is kind of useless since you might as well just run two + copies of Marco. However, having multiple screens per display is + useful and increasingly common (known as "multiscreen" and "xinerama" + setups, where users make use of more than one monitor). You should + basically think of a display as a combination of one or more monitors + with a single keyboard (...and usually only one mouse). + + There is also a significant difference between multiscreen and xinerama + as well. Basically, each MetaScreen is a root window (root node in the + tree of windows). With Xinerama, a single root window appears to span + multiple monitors, whereas with multiscreen a root window is confined to + a single monitor. To re-emphasize the distinction between a display and + a screen, the pointer and keyboard are shared between all root windows + for a given display. + + The display keeps track of a lot of various global quantities, but in + particular has a compositor and a list (GList) of screens. + + A compositor is an opaque structure (only defined in compositor.c), + meaning that you'll only reference the API for it. It handles (or will + handle) cool stuff with the new X extensions, such as smooth resizing and + alpha transparency. + + A screen keeps track of a number of quantities as well, in particular a + stack and a list of workspaces. + + A stack is basically a list of windows, and the depth order they have + relative to each other (which thus determines which windows are on top + and which are obscured). + + A workspace mostly contains a list of windows for the workspace, but also + has a few other quantities as well (a list of struts which are areas + where windows should not be placed and an mru_list or "most recently used + window list"). + + A window has a huge list of quantities for keeping track of things about + a window on the screen. (We want to avoid making this list larger + because the memory for all these quantities is per window.) One item in + particular that a window has, though, is a frame. + + A frame is the decorations that surround the window (i.e. the titlebar and + the minimize and close buttons and the part that you can use to resize), + and contains a handful of variables related to that, but no other major + structures. + +Getting started -- where to look + Getting started on developing free software projects can often be like + being dropped off in a town that is unknown to you and being told to make + a map, when various road and building signs are missing or fading. To + try to alleviate that initial difficulty in orientation, below I list a + variety of general task categories with file, function, variable, and x + property names that may be useful to fixing bugs or writing features that + fall within that category. + + First, though, it's useful to note that most event and message passing + goes through display.c:event_callback(), so that's often a good place to + start reading for general familiarity with the code (actually, I'd + suggest skipping down to the first switch statement within that + function). Of course, not all events go through that function, as there + are a few other places that handle events too such as frames.c. + + Anyway, without further ado, here are the categories and (hopefully) + useful things to look at for each: + + Focus issues (i.e. issues with which window is active): + doc/how-to-get-focus-right.txt + meta_workspace_focus_default_window + _NET_ACTIVE_WINDOW + _NET_WM_USER_TIME + meta_window_focus + meta_display_(set_input|focus_the_no)_focus_window + XSetInputFocus (only for purposes of understanding how X focus/input works) + CurrentTime (mostly, you should just think "Bad; don't use it") + + Compositor stuff (X extension for eye candy like transparency): + compositor.c + The luminocity module in CVS + + Window depth (i.e. stacking or lowering/raising) issues: + stack.c + _NET_CLIENT_LIST_STACKING + transient_for + WM_TRANSIENT_FOR + meta_window_(raise|lower) + _NET_WM_WINDOW_TYPE + _NET_WM_MOUSE_ACTION/_NET_WM_TAKE_ACTIVITY? (aren't yet in EWMH) + + Window placement issues: + place.c + constraints.c + _NET_WM_STRUT + WM_SIZE_HINTS + + Moving and resizing issues: + constraints.c + update_move + update_resize + meta_window_handle_mouse_grab_op_event + _NET_MOVERESIZE_WINDOW + _NET_WM_STRUT + + Drag and drop issues: + the XDND protocol (see http://www.newplanetsoftware.com/xdnd/ and + http://freedesktop.org/Standards/XDND) + _NET_WM_MOUSE_ACTION/_NET_WM_TAKE_ACTIVITY (aren't yet in EWMH) + A general pointer: what causes the difficulty here is that when the + application receives a mouse click to start a drag, it does a grab + so that the window manager doesn't get any further events; thus + correcting things require standards so that applications and window + managers can collaborate correctly + + Theme issues: ??? + doc/theme-format.txt + theme.c + theme-parser.c + (ui.c, core.c, frames.c, frame.c? I dunno...) + + Session management issues: ??? + session.c + http://www.x.org/X11R6.8.1/doc/SM/xsmp.pdf ? + http://www.x.org/X11R6.8.1/doc/SM/SMlib.pdf ? + meta_window_apply_session_info + + Tasklist and Workspace switcher issues: + window-props.c + various functions in screen.c (especially ones using XChangeProperty) + xprops.c + The libwnck module in cvs + meta_window_client_message + Lots of the EWMH + + Window and workspace selection/changing issues: + tabpopup.c + keybindings.c, functions: *_workspace*, *_tab_* + meta_screen_ensure_*_popup + display.c, functions: *_tab* + + Key and mouse binding actions: + keybindings.c + meta_frames_button_(press|release)_event + display.c: event_callback, but only the (Key|Button)_(Press|Release) cases + + Xinerama and multiscreen: ??? + In general, just search for Xinerama, but in particular see + screen.c + window.c + place.c + constraints.c diff --git a/doc/creating_themes/C/calstblx.dtd b/doc/creating_themes/C/calstblx.dtd new file mode 100644 index 00000000..fac58d77 --- /dev/null +++ b/doc/creating_themes/C/calstblx.dtd @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/creating_themes/C/creating-marco-themes.xml b/doc/creating_themes/C/creating-marco-themes.xml new file mode 100644 index 00000000..a2b6da7c --- /dev/null +++ b/doc/creating_themes/C/creating-marco-themes.xml @@ -0,0 +1,286 @@ + + + + + + + + Understanding Marco Themes + + + + Thomas + Thurman + + + + + + + We very much appreciate any reports of inaccuracies or other errors in + this document. Contributions are also most welcome. Post your + suggestions, critiques or addenda to the team. + + + + + 2008 + Thomas Thurman + + + + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + You may obtain a copy of the GNU Free Documentation License from the Free Software Foundation by visiting their Web site or by writing to: Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + + + + + +Introduction + +This is an article about how to theme Marco. It is a work in progress, and I have had to dig deeply to find some answers; I may well have made mistakes and I welcome corrections and suggestions. +MATE lets you theme a bunch of different things, but we're only talking about window border themes here, which some people call Marco themes; Wikipedia begins a sentence with "Despite the incomplete state of Marco theme development documentation", and though there is documentation in the source, apparently not many people find it, and it's written more for programmers than theme designers. Glynn Foster also wrote a very good introduction to Marco themes ([de]) six years ago, but things have changed a little since then. Marco themes can also be used by Compiz, and perhaps by other window managers for all I know. + +So, a Marco theme is a set of instructions about how to "decorate" (draw the borders around) a window. Presumably you don't want to style all windows identically, so the format lets you specify details for different kinds of window: + + + + + state:Every window must be in exactly one of these states: normal, dialog, modal dialog (i.e. a dialogue which means you can't interact with the rest of the program while it's up), menu (torn off from the main application, not that people do that much these days), utility (that is, palettes and toolboxes and things), and border. X also allows a window to explicitly ask to be undecorated, but of course we don't provide for those in a list of decoration instructions. + + + focusedEvery window is either the active window (which X people call "focused"), or it isn't. + + + maximizedEvery window is either (fully) maximised (horizontal and vertical only don't count), or it isn't. + + + shadedEvery window is either rolled up to show just its titlebar (which techies call "shaded" for some reason I can't fathom), or it isn't. + + + + + + +If a window is not fully maximised and not shaded, it either allows horizontal resizing, or it doesn't. +If a window is not fully maximised and not shaded, it either allows vertical resizing, or it doesn't. + + + + + + +What's in the file + +The files must be called either + + + +~/.themes/N/marco-1/marco-theme-V.xml +for a theme used only by you, or +/usr/share/themes/N/marco-1/marco-theme-V.xml +for a theme installed for all users. + + + +where N is the name of the theme and V is the version of the format. Version 2, introduced in October 2006, adds a few extra features, but it's rarely used. Version 1 is the original format. The formats are fixed once they're stable for both backwards and forwards compatibility; new features can't be added without introducing a new version number, which is why improvements come out rarely and in large clumps. marco-1 in the names is a fossil and doesn't mean version 1 of anything. + +The marco-theme-V.xml files are GMarkup files, which are very similar to XML. For now, you actually have to write these in a text editor or something; you can either start with a blank page, or modify a theme someone else has made. (I am thinking of writing a general theme editor program, but that'll have to wait until I've reduced Marco's open bug queue a little.) If you want to see a fully-fledged one, you can look at the current version of "Atlanta", one of the simplest themes, but even that is quite complicated-looking at first. +So, let's talk about what actually goes inside the files. As in any XML file, <!-- … > are comments. At its most basic, it would go: + + + +<marco_theme> +<!-- Helper stuff: --> +<info …> <!-- to be explained --> +<constant …> <!-- maybe; to be explained --> + +<draw_ops …> <!-- maybe; to be explained --> + +<!-- Things we build the top level onto: --> +<frame_geometry …> <!-- to be explained --> + +<frame_style …> <!-- to be explained --> +<frame_style_set …> <!-- to be explained --> + +<!-- And the top level: --> + +<window type="normal" style_set="…" /> +<window type="dialog" style_set="…" /> +<window type="modal_dialog" style_set="…" /> + +<window type="menu" style_set="…" /> +<window type="utility" style_set="…" /> +<window type="border" style_set="…" /> + +</marco_theme> + + + + + + +Matching windows + + + + + windowYou see that at the top level we have a list of <window> tags, one for each window state we discussed above. The style_set argument of each of these gives the name of a frame_style_set. + + + frame_style_set:tells Marco how to draw windows according to whether they're focused or not, maximised or not, shaded or not, and allowing resizing vertically, horizontally, both, or neither. It looks like this: + + + + + + +<frame_style_set> +<frame focus="F" state="S" resize="R" style="N"/> +<frame… /> + +… +</frame_style_set> + + + +where: + + + + + Fis yes for focused, no for unfocused. + + + Scombines the shaded and maximized flags: normal, maximized, shaded, or maximized_and_shaded. + + + Rrepresents resize permissions that the window gives us: none, vertical, horizontal, or both. Frame settings for maximised windows, which can't be resized, don't have this attribute. + + + + + +N is the name of a frame_style to apply to a window which has these attributes. + +A frame_style_set tag may also have a "parent" tag, which should be the name of another frame_style_set. This means that if Marco wants to know about a kind of window which that frame_style_set doesn't describe, it should look in the parent. Most of the more complicated tags in Marco theme files also have a "parent" attribute which work the same way. This is particularly useful because, taken together, all the frame_style_sets in a theme file must be capable of matching every possible kind of window; if a window turns up that they can't match, there will be an error at runtime. + +Let's recap what we've seen so far. The combination of a window, which matches a window's state (normal, dialog, and so forth), with an entry in the corresponding frame_style_set, which matches its focus, shadedness, maximisedness, and resize permissions where relevant, will allow you to make a list of rules to match any window against. The next piece of this puzzle lets you specify what Marco should do with such windows once it's matched them. + + + + +Actually drawing stuff + +frame_style: This is probably the most complicated part of the whole system. A frame_style a series of pieces and buttons. It looks like this: + + + +<frame_style name="…" geometry="G"> +<piece position="P"> +<draw_ops> +</draw_ops> +</piece> +… +<button function="F" state="S" draw_ops="D"/> + +<draw_ops> +</draw_ops> +</button> +… +</frame_style> + + + +The pieces are pieces of the window frame. When Marco draws a window frame, it renders its various pieces always in the same order. The bolded parts are all the possible values of P: + + + +the entire_background, covering the whole frame + +the titlebar, covering the entire background of the titlebar +the titlebar_middle, the part of the titlebar that doesn't touch its edges +the left_titlebar_edge, right_titlebar_edge, top_titlebar_edge, and bottom_titlebar_edge + +the title, just exactly that area which is covered by the text on the titlebar +the left_edge, right_edge, and bottom_edge of the frame (yes, there is no top_edge: it's identical to top_titlebar_edge, isn't it?) +the overlay, which covers everything– the same as entire_background, but done last instead of first. + + + +What Marco draws in these pieces is decided by the theme. If a frame_style or its parents don't specify a particular piece, nothing will be drawn for that piece. You have two ways to specify what to draw: one is that the piece tag can have a draw_ops tag inside it which lists a sequence of drawing operations in Marco's custom format. You might ask why we don't use SVG; one answer is that SVG support wasn't very strong when this format was designed, and another answer is that these days you can use SVG all you like; just include it as an image and Marco will know what to do. + +An alternative to including a draw_ops tag inside a piece tag is to add a draw_ops attribute to the piece tag. Then you can add a draw_ops tag at top level (inside the marco_theme tag) with a name attribute, and Marco will use that. This is useful if you use similar draw_ops over and over. +I'm not going to document draw_ops at present, because this is already very long. I will write it up later and link it from here. +The button tag tells Marco how, but not where, to draw buttons. Buttons are drawn after all the pieces are finished, and the way to draw them is also given using draw_ops. You ought to provide buttons for all the possible kinds of button; if you don't give one it won't be drawn, which is unfortunate for the user who wants to use it: + + + +left_left_background, left_middle_background, and left_right_background don't represent buttons as such, but the background behind them, assuming there can be at most three buttons on the left. These days there can be more, so the extra ones also use left_middle_background. + +right_left_background, right_middle_background, and right_right_background similarly. +close, minimize, maximize are the obvious original three buttons. +menu is the menu button you can click to get a list of actions you can perform on the window. + +shade, above, stick are similar to the original buttons but only allowed in version 2 +unshade, unabove, unstick are the toggled versions of these buttons. Again, version 2 only. + + + + +The reason there are toggled versions of shade, above, and stick, and not maximize, is that by the time you get this far you've probably already decided whether you're drawing a maximised window. So if you are drawing a maximised window, you can make the button called "maximize" look how you want the restore button to be; otherwise, make it look like you want the maximise button to be. +For each button tag you should also set a "state" attribute; this time the state is either normal (the way you see it most of the time), pressed, or prelight (this makes the buttons subtly light up when you hover over them). You only really need "normal", but the others are good to have too. + +The "geometry" attribute of a frame_style tag is the name of a… + + + + +Geometry + +The geometry tag defines the sizes of things around the window. It is important, but not easy to explain, and again this file has gone on too long. I'll write it up later. + + + + +Other things which lie around a file + +The most important other thing in a theme file is the metadata held in the info tag. This contains a set of tags each of which contains some text explaining something about the theme itself, in a sort of Dublin Core sort of way. (Next time around, we should probably use the actual Dublin Core.) The tags are name, author, copyright, date, and description. + +Version 1 of the format had a menu_icon tag at top level, which let themes specify the icons beside options in the menu you get from the menu icon. This has become redundant; the icons are taken from the icon theme! The tag can still be used in all formats, but does nothing and is deprecated. +Version 2 of the format has a fallback tag at top level, which let the theme specify what icon a window should be considered to have if it doesn't provide an icon of its own. This should also be taken from the icon theme, if anyone fancies fixing it, and the tag should also then be deprecated. It shouldn't be hard. + + + + +When you're working on a theme + +When you're editing a theme, you can view it without using it on the whole desktop using +marco-theme-viewer YourThemeName +and view it on the whole desktop using +mateconftool --type=string --set /apps/marco/general/theme YourThemeName + +Whenever you change the selected theme in MateConf, Marco will load the newly-chosen theme. This is how control-center does it. But when you change a theme, as you're working on it, you might want to ask Marco to reload the theme which is currently used on the whole desktop to reflect your changes. You can do this using the little-known marco-message program, with the command marco-message reload-theme. This works by sending the ClientMessage _MARCO_RELOAD_THEME_MESSAGE to the root window, in case you're interested. + +Once you're done with your theme, consider submitting it to the art.mate.org site, or the mate-look site. + + + + +The future + +Please feel free to link to this so people don't have to keep asking the basic questions and can start asking the deeper ones. One of the important deeper ones is: where should we go in the future? Since this format is becoming something of a de facto standard between window managers, should we set up some kind of freedesktop.org standards discussion? Would it be useful to spin off Marco's theme parsing code into a separate, LGPL-licensed library so that other applications could use it more easily? +What would a version 3 of this format look like? Could we simplify the window / frame_style_set system? (I can imagine abolishing both, and being able to write <frame_style for="normal+unfocused+maximized">… and having Marco assume it applied to all resize permissions and shadednesses.) Maybe we should try to do everything with SVG we can? Getting more wild and handwavey, is it worth keeping XML-like? Maybe if other window managers were dealing with the files, .ini-style files would be more universally useful? Or perhaps not. And then of course we need a decent graphical editor for it. I have a few ideas, but if anyone fancies jumping in... + + + + + diff --git a/doc/creating_themes/C/dbcentx.mod b/doc/creating_themes/C/dbcentx.mod new file mode 100644 index 00000000..60de99f8 --- /dev/null +++ b/doc/creating_themes/C/dbcentx.mod @@ -0,0 +1,384 @@ + + + + + + + + + + + + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + + + +]]> + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/creating_themes/C/dbgenent.mod b/doc/creating_themes/C/dbgenent.mod new file mode 100644 index 00000000..ff5ba90d --- /dev/null +++ b/doc/creating_themes/C/dbgenent.mod @@ -0,0 +1,41 @@ + + + + + + + + + + + diff --git a/doc/creating_themes/C/dbhierx.mod b/doc/creating_themes/C/dbhierx.mod new file mode 100644 index 00000000..5f839f56 --- /dev/null +++ b/doc/creating_themes/C/dbhierx.mod @@ -0,0 +1,2193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +%rdbhier; +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +%rdbhier2; +]]> + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> +]]> + + + + + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> +]]> + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + +]]> +]]> +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> + +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> + +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + +]]> + + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + + + + +]]> + + + +]]> + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + +]]> + + + + +]]> + + + + + +]]> + + + + +]]> + + + + + +]]> + +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> +]]> + + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + + + + + +]]> + + + + + + + +]]> +]]> + + + diff --git a/doc/creating_themes/C/dbnotnx.mod b/doc/creating_themes/C/dbnotnx.mod new file mode 100644 index 00000000..2416049b --- /dev/null +++ b/doc/creating_themes/C/dbnotnx.mod @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/creating_themes/C/dbpoolx.mod b/doc/creating_themes/C/dbpoolx.mod new file mode 100644 index 00000000..53b07044 --- /dev/null +++ b/doc/creating_themes/C/dbpoolx.mod @@ -0,0 +1,8701 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +%rdbpool; +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> + +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + +]]> + + + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> +]]> + + + + + + + + + + + +]]> + + + + + + + +]]> +]]> + + + + + + + + + +]]> + + + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + + + +]]> + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> +]]> + + + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> + +]]> + + + + + + + + + +]]> + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + + +]]> +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> + +]]> + + + + + + + + +]]> + + + +]]> + + +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> + + +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + + + + + +]]> + + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + + + + +%htmltbl; +]]> + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + +]]> + +%tablemodel; + +]]> + + + + + + + + + + + + +]]> + + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> + + + + +]]> +]]> + + + + + + + + + + + + + +]]> + + + +]]> + + +]]> + + + + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + + +]]> +]]> + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + + + +]]> + + + +]]> + ]]> +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + + + +]]> + + + +]]> + ]]> + + +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> + +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + ]]> + + + + +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + + + +]]> + + + +]]> + ]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + +]]> + + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> + +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> + +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> + + + + + + + + +]]> + + + +]]> + ]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> + ]]> + + +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + +]]> + + + + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + +]]> + + + + + + + +]]> +]]> + + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + +]]> + + + +]]> +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> + + + + +]]> + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + +]]> +]]> + + + + + + + + + + +]]> + + + + + + + +]]> +]]> + + + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + + + + + +]]> + + + + + + + + + + +]]> +]]> + + + + + + + + + +]]> + + + + +]]> + + + + + +]]> + + + + +]]> + + + + + +]]> + + + + +]]> + +]]> + + + + + + + + +]]> + + + +]]> + + + + +]]> + + + +]]> +]]> +]]> + + + diff --git a/doc/creating_themes/C/docbookx.dtd b/doc/creating_themes/C/docbookx.dtd new file mode 100644 index 00000000..8b43c59b --- /dev/null +++ b/doc/creating_themes/C/docbookx.dtd @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + +]]> + + + + + + + + + +]]> +]]> + + + +]]> + + + +]]> + + + + + + +%dbnotn; +]]> + + + + + + + +]]> + +]]> +]]> + + +%dbcent; +]]> + + + + + + + + +%dbpool; +]]> + + + + + + +%rdbmods; +]]> + + + + + +%dbhier; +]]> + + + + + + +%dbgenent; +]]> + + + diff --git a/doc/creating_themes/C/htmltblx.mod b/doc/creating_themes/C/htmltblx.mod new file mode 100644 index 00000000..cdaefed4 --- /dev/null +++ b/doc/creating_themes/C/htmltblx.mod @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/creating_themes/C/soextblx.dtd b/doc/creating_themes/C/soextblx.dtd new file mode 100644 index 00000000..4a92e116 --- /dev/null +++ b/doc/creating_themes/C/soextblx.dtd @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/creating_themes/Makefile.am b/doc/creating_themes/Makefile.am new file mode 100644 index 00000000..b848256c --- /dev/null +++ b/doc/creating_themes/Makefile.am @@ -0,0 +1,24 @@ +### This part of Makefile.am can be customized by you. + +# mate-doc-utils standard variables: +include $(top_srcdir)/mate-doc-utils.make +dist-hook: doc-dist-hook + +# The name of the directory in /usr/share/mate/help/, +# and the name of the main .xml file: +DOC_MODULE = creating-marco-themes + +# The names of any files included via entity declarations. +DOC_ENTITIES = + +# The names of any files included by xincluded (preferred): +DOC_INCLUDES = + +# The names of any pictures: +DOC_FIGURES = + +# The names of any locales for which documentation translations exist: +DOC_LINGUAS = + + + diff --git a/doc/creating_themes/Makefile.in b/doc/creating_themes/Makefile.in new file mode 100644 index 00000000..86601c10 --- /dev/null +++ b/doc/creating_themes/Makefile.in @@ -0,0 +1,981 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +### This part of Makefile.am can be customized by you. + +# mate-doc-utils.make - make magic for building documentation +# Copyright (C) 2004-2005 Shaun McCance +# +# 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +################################################################################ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/mate-doc-utils.make +subdir = doc/creating_themes +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +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 = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_CFLAGS = @ALL_CFLAGS@ +ALL_LIBS = @ALL_LIBS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ +DLLTOOL = @DLLTOOL@ +DOC_USER_FORMATS = @DOC_USER_FORMATS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GDK_PIXBUF_CSOURCE = @GDK_PIXBUF_CSOURCE@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTK_API_VERSION = @GTK_API_VERSION@ +HELP_DIR = @HELP_DIR@ +HOST_ALIAS = @HOST_ALIAS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MARCO_CFLAGS = @MARCO_CFLAGS@ +MARCO_LIBS = @MARCO_LIBS@ +MARCO_MESSAGE_CFLAGS = @MARCO_MESSAGE_CFLAGS@ +MARCO_MESSAGE_LIBS = @MARCO_MESSAGE_LIBS@ +MARCO_WINDOW_DEMO_CFLAGS = @MARCO_WINDOW_DEMO_CFLAGS@ +MARCO_WINDOW_DEMO_LIBS = @MARCO_WINDOW_DEMO_LIBS@ +MATECONFTOOL = @MATECONFTOOL@ +MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@ +MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@ +MATEDIALOG = @MATEDIALOG@ +MATE_KEYBINDINGS_KEYSDIR = @MATE_KEYBINDINGS_KEYSDIR@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OMF_DIR = @OMF_DIR@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +_clean_doc_header = $(if $(DOC_H_FILE),clean-doc-header) +_DOC_REAL_FORMATS = $(if $(DOC_USER_FORMATS),$(DOC_USER_FORMATS),$(DOC_FORMATS)) +_DOC_REAL_LINGUAS = $(if $(filter environment,$(origin LINGUAS)), \ + $(filter $(LINGUAS),$(DOC_LINGUAS)), \ + $(DOC_LINGUAS)) + +_DOC_ABS_SRCDIR = @abs_srcdir@ +_xml2po_mode = $(if $(DOC_ID),mallard,docbook) +@ENABLE_SK_TRUE@_ENABLE_SK = true + +################################################################################ +db2omf_args = \ + --stringparam db2omf.basename $(DOC_MODULE) \ + --stringparam db2omf.format $(3) \ + --stringparam db2omf.dtd \ + $(shell xmllint --format $(2) | grep -h PUBLIC | head -n 1 \ + | sed -e 's/.*PUBLIC \(\"[^\"]*\"\).*/\1/') \ + --stringparam db2omf.lang $(notdir $(patsubst %/$(notdir $(2)),%,$(2))) \ + --stringparam db2omf.omf_dir "$(OMF_DIR)" \ + --stringparam db2omf.help_dir "$(HELP_DIR)" \ + --stringparam db2omf.omf_in "$(_DOC_OMF_IN)" \ + $(if $(_ENABLE_SK), \ + --stringparam db2omf.scrollkeeper_cl "$(_skcontentslist)") \ + $(_db2omf) $(2) + +_DOC_OMF_IN = $(if $(DOC_MODULE),$(wildcard $(_DOC_ABS_SRCDIR)/$(DOC_MODULE).omf.in)) +_DOC_OMF_DB = $(if $(_DOC_OMF_IN), \ + $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-$(lc).omf)) + +_DOC_OMF_HTML = $(if $(_DOC_OMF_IN), \ + $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-html-$(lc).omf)) + + +# FIXME +_DOC_OMF_ALL = \ + $(if $(filter docbook,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_DB)) \ + $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_HTML)) + + +################################################################################ +_DOC_C_MODULE = $(if $(DOC_MODULE),C/$(DOC_MODULE).xml) +_DOC_C_PAGES = $(foreach page,$(DOC_PAGES),C/$(page)) +_DOC_C_ENTITIES = $(foreach ent,$(DOC_ENTITIES),C/$(ent)) +_DOC_C_INCLUDES = $(foreach inc,$(DOC_INCLUDES),C/$(inc)) +_DOC_C_DOCS = \ + $(_DOC_C_ENTITIES) $(_DOC_C_INCLUDES) \ + $(_DOC_C_PAGES) $(_DOC_C_MODULE) + +_DOC_C_DOCS_NOENT = \ + $(_DOC_C_MODULE) $(_DOC_C_INCLUDES) \ + $(_DOC_C_PAGES) + +_DOC_C_FIGURES = $(if $(DOC_FIGURES), \ + $(foreach fig,$(DOC_FIGURES),C/$(fig)), \ + $(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/C/figures/*.png))) + + +# FIXME: probably have to shell escape to determine the file names +_DOC_C_HTML = $(foreach f, \ + $(shell xsltproc --xinclude \ + --stringparam db.chunk.basename "$(DOC_MODULE)" \ + $(_chunks) "C/$(DOC_MODULE).xml"), \ + C/$(f).xhtml) + + +############################################################################### +_DOC_POFILES = $(if $(DOC_MODULE)$(DOC_ID), \ + $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(lc).po)) + +_DOC_MOFILES = $(patsubst %.po,%.mo,$(_DOC_POFILES)) +_DOC_LC_MODULES = $(if $(DOC_MODULE), \ + $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xml)) + +_DOC_LC_PAGES = \ + $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach page,$(_DOC_C_PAGES), \ + $(lc)/$(notdir $(page)) )) + +_DOC_LC_INCLUDES = \ + $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach inc,$(_DOC_C_INCLUDES), \ + $(lc)/$(notdir $(inc)) )) + + +# FIXME: probably have to shell escape to determine the file names +_DOC_LC_HTML = \ + $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach doc,$(_DOC_C_HTML), \ + $(lc)/$(notdir $(doc)) )) + +_DOC_LC_DOCS = \ + $(_DOC_LC_MODULES) $(_DOC_LC_INCLUDES) $(_DOC_LC_PAGES) \ + $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_LC_HTML)) + +_DOC_LC_FIGURES = $(foreach lc,$(_DOC_REAL_LINGUAS), \ + $(patsubst C/%,$(lc)/%,$(_DOC_C_FIGURES)) ) + +_DOC_SRC_FIGURES = \ + $(foreach fig,$(_DOC_C_FIGURES), $(foreach lc,C $(_DOC_REAL_LINGUAS), \ + $(wildcard $(srcdir)/$(lc)/$(patsubst C/%,%,$(fig))) )) + +_DOC_POT = $(if $(DOC_MODULE),$(DOC_MODULE).pot) + +################################################################################ +_DOC_HTML_ALL = $(if $(filter html HTML,$(_DOC_REAL_FORMATS)), \ + $(_DOC_C_HTML) $(_DOC_LC_HTML)) + +_DOC_HTML_TOPS = $(foreach lc,C $(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xhtml) +_clean_omf = $(if $(_DOC_OMF_IN),clean-doc-omf) +_clean_dsk = $(if $(_DOC_DSK_IN),clean-doc-dsk) +_clean_lc = $(if $(_DOC_REAL_LINGUAS),clean-doc-lc) +_clean_dir = $(if $(DOC_MODULE)$(DOC_ID),clean-doc-dir) +_doc_install_dir = $(if $(DOC_ID),$(DOC_ID),$(DOC_MODULE)) + +# The name of the directory in /usr/share/mate/help/, +# and the name of the main .xml file: +DOC_MODULE = creating-marco-themes + +# The names of any files included via entity declarations. +DOC_ENTITIES = + +# The names of any files included by xincluded (preferred): +DOC_INCLUDES = + +# The names of any pictures: +DOC_FIGURES = + +# The names of any locales for which documentation translations exist: +DOC_LINGUAS = +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/mate-doc-utils.make $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/creating_themes/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/creating_themes/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +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: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(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-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-local + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-data-local + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic \ + maintainer-clean-local + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool \ + mostlyclean-local + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-local + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + clean-local dist-hook distclean distclean-generic \ + distclean-libtool distclean-local distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-data-local 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 maintainer-clean-local mostlyclean \ + mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-local + + +DOC_H_FILE ?= + +DOC_H_DOCS ?= + +$(DOC_H_FILE): $(DOC_H_DOCS); + @rm -f $@.tmp; touch $@.tmp; + echo 'const gchar* documentation_credits[] = {' >> $@.tmp + list='$(DOC_H_DOCS)'; for doc in $$list; do \ + xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ + if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ + xsltproc --path "$$xmlpath" $(_credits) $$doc; \ + done | sort | uniq \ + | awk 'BEGIN{s=""}{n=split($$0,w,"<");if(s!=""&&s!=substr(w[1],1,length(w[1])-1)){print s};if(n>1){print $$0;s=""}else{s=$$0}};END{if(s!=""){print s}}' \ + | sed -e 's/\\/\\\\/' -e 's/"/\\"/' -e 's/\(.*\)/\t"\1",/' >> $@.tmp + echo ' NULL' >> $@.tmp + echo '};' >> $@.tmp + echo >> $@.tmp + list='$(DOC_H_DOCS)'; for doc in $$list; do \ + xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ + if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ + docid=`echo "$$doc" | sed -e 's/.*\/\([^/]*\)\.xml/\1/' \ + | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`; \ + echo $$xmlpath; \ + ids=`xsltproc --xinclude --path "$$xmlpath" $(_ids) $$doc`; \ + for id in $$ids; do \ + echo '#define HELP_'`echo $$docid`'_'`echo $$id \ + | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`' "'$$id'"' >> $@.tmp; \ + done; \ + echo >> $@.tmp; \ + done; + cp $@.tmp $@ && rm -f $@.tmp + +dist-check-gdu: +@HAVE_MATE_DOC_UTILS_FALSE@ @echo "*** MATE Doc Utils must be installed in order to make dist" +@HAVE_MATE_DOC_UTILS_FALSE@ @false + +.PHONY: dist-doc-header +dist-doc-header: $(DOC_H_FILE) + @if test -f "$(DOC_H_FILE)"; then d=; else d="$(srcdir)/"; fi; \ + echo "$(INSTALL_DATA) $${d}$(DOC_H_FILE) $(distdir)/$(DOC_H_FILE)"; \ + $(INSTALL_DATA) "$${d}$(DOC_H_FILE)" "$(distdir)/$(DOC_H_FILE)"; + +doc-dist-hook: dist-check-gdu $(if $(DOC_H_FILE),dist-doc-header) + +.PHONY: clean-doc-header +clean-local: $(_clean_doc_header) +distclean-local: $(_clean_doc_header) +mostlyclean-local: $(_clean_doc_header) +maintainer-clean-local: $(_clean_doc_header) +clean-doc-header: + rm -f $(DOC_H_FILE) + +all: $(DOC_H_FILE) + +################################################################################ + +DOC_MODULE ?= + +DOC_ID ?= + +DOC_PAGES ?= + +DOC_ENTITIES ?= + +DOC_INCLUDES ?= + +DOC_FIGURES ?= + +DOC_FORMATS ?= docbook + +DOC_LINGUAS ?= + +################################################################################ + +_xml2po ?= `which xml2po` + +_db2html ?= `$(PKG_CONFIG) --variable db2html mate-doc-utils` +_db2omf ?= `$(PKG_CONFIG) --variable db2omf mate-doc-utils` +_malrng ?= `$(PKG_CONFIG) --variable malrng mate-doc-utils` +_chunks ?= `$(PKG_CONFIG) --variable xmldir mate-doc-utils`/mate/xslt/docbook/utils/chunks.xsl +_credits ?= `$(PKG_CONFIG) --variable xmldir mate-doc-utils`/mate/xslt/docbook/utils/credits.xsl +_ids ?= `$(PKG_CONFIG) --variable xmldir mate-doc-utils`/mate/xslt/docbook/utils/ids.xsl +@ENABLE_SK_TRUE@_skpkgdatadir ?= `scrollkeeper-config --pkgdatadir` +@ENABLE_SK_TRUE@_sklocalstatedir ?= `scrollkeeper-config --pkglocalstatedir` +@ENABLE_SK_TRUE@_skcontentslist ?= $(_skpkgdatadir)/Templates/C/scrollkeeper_cl.xml + +$(_DOC_OMF_DB) : $(_DOC_OMF_IN) +$(_DOC_OMF_DB) : $(DOC_MODULE)-%.omf : %/$(DOC_MODULE).xml + @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ + echo "The file '$(_skcontentslist)' does not exist." >&2; \ + echo "Please check your ScrollKeeper installation." >&2; \ + exit 1; } + xsltproc -o $@ $(call db2omf_args,$@,$<,'docbook') || { rm -f "$@"; exit 1; } + +$(_DOC_OMF_HTML) : $(_DOC_OMF_IN) +$(_DOC_OMF_HTML) : $(DOC_MODULE)-html-%.omf : %/$(DOC_MODULE).xml +@ENABLE_SK_TRUE@ @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ +@ENABLE_SK_TRUE@ echo "The file '$(_skcontentslist)' does not exist" >&2; \ +@ENABLE_SK_TRUE@ echo "Please check your ScrollKeeper installation." >&2; \ +@ENABLE_SK_TRUE@ exit 1; } + xsltproc -o $@ $(call db2omf_args,$@,$<,'xhtml') || { rm -f "$@"; exit 1; } + +.PHONY: omf +omf: $(_DOC_OMF_ALL) + +.PHONY: po +po: $(_DOC_POFILES) + +.PHONY: mo +mo: $(_DOC_MOFILES) + +$(_DOC_POFILES): + @if ! test -d $(dir $@); then \ + echo "mkdir $(dir $@)"; \ + mkdir "$(dir $@)"; \ + fi + @if test ! -f $@ -a -f $(srcdir)/$@; then \ + echo "cp $(srcdir)/$@ $@"; \ + cp "$(srcdir)/$@" "$@"; \ + fi; + @docs=; \ + list='$(_DOC_C_DOCS_NOENT)'; for doc in $$list; do \ + docs="$$docs $(_DOC_ABS_SRCDIR)/$$doc"; \ + done; \ + if ! test -f $@; then \ + echo "(cd $(dir $@) && \ + $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ + cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)"; \ + (cd $(dir $@) && \ + $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ + cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp); \ + else \ + echo "(cd $(dir $@) && \ + $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs)"; \ + (cd $(dir $@) && \ + $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs); \ + fi + +$(_DOC_MOFILES): %.mo: %.po + @if ! test -d $(dir $@); then \ + echo "mkdir $(dir $@)"; \ + mkdir "$(dir $@)"; \ + fi + msgfmt -o $@ $< + +# FIXME: fix the dependancy +# FIXME: hook xml2po up +$(_DOC_LC_DOCS) : $(_DOC_MOFILES) +$(_DOC_LC_DOCS) : $(_DOC_C_DOCS) + if ! test -d $(dir $@); then mkdir $(dir $@); fi + if [ -f "C/$(notdir $@)" ]; then d="../"; else d="$(_DOC_ABS_SRCDIR)/"; fi; \ + mo="$(dir $@)$(patsubst %/$(notdir $@),%,$@).mo"; \ + if [ -f "$${mo}" ]; then mo="../$${mo}"; else mo="$(_DOC_ABS_SRCDIR)/$${mo}"; fi; \ + (cd $(dir $@) && \ + $(_xml2po) -m $(_xml2po_mode) -e -t "$${mo}" \ + "$${d}C/$(notdir $@)" > $(notdir $@).tmp && \ + cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp) +.PHONY: pot +pot: $(_DOC_POT) +$(_DOC_POT): $(_DOC_C_DOCS_NOENT) + $(_xml2po) -m $(_xml2po_mode) -e -o $@ $^ + +$(_DOC_HTML_TOPS): $(_DOC_C_DOCS) $(_DOC_LC_DOCS) + xsltproc -o $@ --xinclude --param db.chunk.chunk_top "false()" --stringparam db.chunk.basename "$(DOC_MODULE)" --stringparam db.chunk.extension ".xhtml" $(_db2html) $(patsubst %.xhtml,%.xml,$@) + +################################################################################ + +all: \ + $(_DOC_C_DOCS) $(_DOC_LC_DOCS) \ + $(_DOC_OMF_ALL) $(_DOC_DSK_ALL) \ + $(_DOC_HTML_ALL) $(_DOC_POFILES) + +################################################################################ + +.PHONY: clean-doc-omf clean-doc-dsk clean-doc-lc clean-doc-dir + +clean-doc-omf: ; rm -f $(_DOC_OMF_DB) $(_DOC_OMF_HTML) +clean-doc-dsk: ; rm -f $(_DOC_DSK_DB) $(_DOC_DSK_HTML) +clean-doc-lc: + rm -f $(_DOC_LC_DOCS) + rm -f $(_DOC_MOFILES) + @list='$(_DOC_POFILES)'; for po in $$list; do \ + if ! test "$$po" -ef "$(srcdir)/$$po"; then \ + echo "rm -f $$po"; \ + rm -f "$$po"; \ + fi; \ + done +# .xml2.po.mo cleaning is obsolete as of 0.18.1 and could be removed in 0.20.x + @for lc in C $(_DOC_REAL_LINGUAS); do \ + if test -f "$$lc/.xml2po.mo"; then \ + echo "rm -f $$lc/.xml2po.mo"; \ + rm -f "$$lc/.xml2po.mo"; \ + fi; \ + done +clean-doc-dir: clean-doc-lc + @for lc in C $(_DOC_REAL_LINGUAS); do \ + for dir in `find $$lc -depth -type d`; do \ + if ! test $$dir -ef $(srcdir)/$$dir; then \ + echo "rmdir $$dir"; \ + rmdir "$$dir"; \ + fi; \ + done; \ + done + +clean-local: \ + $(_clean_omf) $(_clean_dsk) \ + $(_clean_lc) $(_clean_dir) +distclean-local: \ + $(_clean_omf) $(_clean_dsk) \ + $(_clean_lc) $(_clean_dir) +mostlyclean-local: \ + $(_clean_omf) $(_clean_dsk) \ + $(_clean_lc) $(_clean_dir) +maintainer-clean-local: \ + $(_clean_omf) $(_clean_dsk) \ + $(_clean_lc) $(_clean_dir) + +################################################################################ + +.PHONY: dist-doc-docs dist-doc-pages dist-doc-figs dist-doc-omf dist-doc-dsk +doc-dist-hook: \ + $(if $(DOC_MODULE)$(DOC_ID),dist-doc-docs) \ + $(if $(_DOC_C_FIGURES),dist-doc-figs) \ + $(if $(_DOC_OMF_IN),dist-doc-omf) +# $(if $(_DOC_DSK_IN),dist-doc-dsk) + +dist-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES) + @for lc in C $(_DOC_REAL_LINGUAS); do \ + echo " $(mkinstalldirs) $(distdir)/$$lc"; \ + $(mkinstalldirs) "$(distdir)/$$lc"; \ + done + @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES)'; \ + for doc in $$list; do \ + if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ + docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ + if ! test -d "$(distdir)/$$docdir"; then \ + echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ + $(mkinstalldirs) "$(distdir)/$$docdir"; \ + fi; \ + echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ + $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ + done + +dist-doc-figs: $(_DOC_SRC_FIGURES) + @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; \ + for fig in $$list; do \ + if test -f "$$fig"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$fig"; then \ + figdir=`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ + if ! test -d "$(distdir)/$$figdir"; then \ + echo "$(mkinstalldirs) $(distdir)/$$figdir"; \ + $(mkinstalldirs) "$(distdir)/$$figdir"; \ + fi; \ + echo "$(INSTALL_DATA) $$d$$fig $(distdir)/$$fig"; \ + $(INSTALL_DATA) "$$d$$fig" "$(distdir)/$$fig"; \ + fi; \ + done; + +dist-doc-omf: + @if test -f "$(_DOC_OMF_IN)"; then d=; else d="$(srcdir)/"; fi; \ + echo "$(INSTALL_DATA) $$d$(_DOC_OMF_IN) $(distdir)/$(notdir $(_DOC_OMF_IN))"; \ + $(INSTALL_DATA) "$$d$(_DOC_OMF_IN)" "$(distdir)/$(notdir $(_DOC_OMF_IN))" + +dist-doc-dsk: + @if test -f "$(_DOC_DSK_IN)"; then d=; else d="$(srcdir)/"; fi; \ + echo "$(INSTALL_DATA) $$d$(_DOC_DSK_IN) $(distdir)/$(notdir $(_DOC_DSK_IN))"; \ + $(INSTALL_DATA) "$$d$(_DOC_DSK_IN)" "$(distdir)/$(notdir $(_DOC_DSK_IN))" + +################################################################################ + +.PHONY: check-doc-docs check-doc-omf +check: \ + $(if $(DOC_MODULE),check-doc-docs) \ + $(if $(DOC_ID),check-doc-pages) \ + $(if $(_DOC_OMF_IN),check-doc-omf) + +check-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) + @for lc in C $(_DOC_REAL_LINGUAS); do \ + if test -f "$$lc"; \ + then d=; \ + xmlpath="$$lc"; \ + else \ + d="$(srcdir)/"; \ + xmlpath="$$lc:$(srcdir)/$$lc"; \ + fi; \ + echo "xmllint --noout --noent --path $$xmlpath --xinclude --postvalid $$d$$lc/$(DOC_MODULE).xml"; \ + xmllint --noout --noent --path "$$xmlpath" --xinclude --postvalid "$$d$$lc/$(DOC_MODULE).xml"; \ + done + +check-doc-pages: $(_DOC_C_PAGES) $(_DOC_LC_PAGES) + for lc in C $(_DOC_REAL_LINGUAS); do \ + if test -f "$$lc"; \ + then d=; \ + xmlpath="$$lc"; \ + else \ + d="$(srcdir)/"; \ + xmlpath="$$lc:$(srcdir)/$$lc"; \ + fi; \ + for page in $(DOC_PAGES); do \ + echo "xmllint --noout --noent --path $$xmlpath --xinclude --relaxng $(_malrng) $$d$$lc/$$page"; \ + xmllint --noout --noent --path "$$xmlpath" --xinclude --relaxng "$(_malrng)" "$$d$$lc/$$page"; \ + done; \ + done + +check-doc-omf: $(_DOC_OMF_ALL) + @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ + echo "xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf"; \ + xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf; \ + done + +################################################################################ + +.PHONY: install-doc-docs install-doc-html install-doc-figs install-doc-omf install-doc-dsk + +install-data-local: \ + $(if $(DOC_MODULE)$(DOC_ID),install-doc-docs) \ + $(if $(_DOC_HTML_ALL),install-doc-html) \ + $(if $(_DOC_C_FIGURES),install-doc-figs) \ + $(if $(_DOC_OMF_IN),install-doc-omf) +# $(if $(_DOC_DSK_IN),install-doc-dsk) + +install-doc-docs: + @for lc in C $(_DOC_REAL_LINGUAS); do \ + echo "$(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc"; \ + $(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc; \ + done + @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS)'; for doc in $$list; do \ + if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ + docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ + docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \ + if ! test -d "$$docdir"; then \ + echo "$(mkinstalldirs) $$docdir"; \ + $(mkinstalldirs) "$$docdir"; \ + fi; \ + echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ + $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \ + done + +install-doc-figs: + @list='$(patsubst C/%,%,$(_DOC_C_FIGURES))'; for fig in $$list; do \ + for lc in C $(_DOC_REAL_LINGUAS); do \ + figsymlink=false; \ + if test -f "$$lc/$$fig"; then \ + figfile="$$lc/$$fig"; \ + elif test -f "$(srcdir)/$$lc/$$fig"; then \ + figfile="$(srcdir)/$$lc/$$fig"; \ + else \ + figsymlink=true; \ + fi; \ + figdir="$$lc/"`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ + figdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$figdir"; \ + if ! test -d "$$figdir"; then \ + echo "$(mkinstalldirs) $$figdir"; \ + $(mkinstalldirs) "$$figdir"; \ + fi; \ + figbase=`echo $$fig | sed -e 's/^.*\///'`; \ + if $$figsymlink; then \ + echo "cd $$figdir && $(LN_S) -f ../../C/$$fig $$figbase"; \ + ( cd "$$figdir" && $(LN_S) -f "../../C/$$fig" "$$figbase" ); \ + else \ + echo "$(INSTALL_DATA) $$figfile $$figdir$$figbase"; \ + $(INSTALL_DATA) "$$figfile" "$$figdir$$figbase"; \ + fi; \ + done; \ + done + +install-doc-html: + echo install-html + +install-doc-omf: + $(mkinstalldirs) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir) + @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ + echo "$(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ + $(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf; \ + done + @if test "x$(_ENABLE_SK)" = "xtrue"; then \ + echo "scrollkeeper-update -p $(DESTDIR)$(_sklocalstatedir) -o $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ + scrollkeeper-update -p "$(DESTDIR)$(_sklocalstatedir)" -o "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ + fi; + +install-doc-dsk: + echo install-dsk + +################################################################################ + +.PHONY: uninstall-doc-docs uninstall-doc-html uninstall-doc-figs uninstall-doc-omf uninstall-doc-dsk +uninstall-local: \ + $(if $(DOC_MODULE)$(DOC_ID),uninstall-doc-docs) \ + $(if $(_DOC_HTML_ALL),uninstall-doc-html) \ + $(if $(_DOC_C_FIGURES),uninstall-doc-figs) \ + $(if $(_DOC_OMF_IN),uninstall-doc-omf) +# $(if $(_DOC_DSK_IN),uninstall-doc-dsk) + +uninstall-doc-docs: + @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS)'; for doc in $$list; do \ + echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ + rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ + done + +uninstall-doc-figs: + @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; for fig in $$list; do \ + echo "rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ + rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ + done; + +uninstall-doc-omf: + @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ + if test "x$(_ENABLE_SK)" = "xtrue"; then \ + echo "scrollkeeper-uninstall -p $(_sklocalstatedir) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ + scrollkeeper-uninstall -p "$(_sklocalstatedir)" "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ + fi; \ + echo "rm -f $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ + rm -f "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ + done + +# mate-doc-utils standard variables: +dist-hook: doc-dist-hook + +# 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/doc/dialogs.txt b/doc/dialogs.txt new file mode 100644 index 00000000..1a28e6ab --- /dev/null +++ b/doc/dialogs.txt @@ -0,0 +1,32 @@ +Dialogs which have no transient parent or root window being +their tranisent parent are the ones which will be visible in +the tasklist. + +All such dialogs will be *always* on top of the window +group i.e they would transients for the whole group. + + +1) Modal dialogs + + + * If you wish to open another window from a modal dialog + + open *only* a modal dialog and set it's transient parent. + + +2) Normal dialog + + + without transient parent + + * If you wish to open another window from a normal dialog + + open either a normal dialog or a modal dialog only. + Set the transient parent for the child dialog if you do not + want them to be transient for all the other windows in the group. + + with transient parent + + * If you wish to open another window from a normal dialog + + you could open any type of window. diff --git a/doc/how-to-get-focus-right.txt b/doc/how-to-get-focus-right.txt new file mode 100644 index 00000000..45c0f378 --- /dev/null +++ b/doc/how-to-get-focus-right.txt @@ -0,0 +1,253 @@ +To make choice of focus window consistent for each focus method, a +number of guidelines should be followed. (For purposes of discussion +here, I'm excluding things like the panel and the desktop from +"windows". It is technically incorrect to do this, but I'm lazy and +"windows" is shorter than something like "normal windows". See the +end of the discussion for how these special cases are handled.) The +basics are easy: + +Focus method Behavior + click When a user clicks on a window, focus it + sloppy When an EnterNotify is received, focus the window + mouse Same as sloppy, but also defocus when mouse enters DESKTOP + window + +Note that these choices (along with the choice that clicking on a +window raises it for the click focus method) introduces the following +invariants for focus from mouse activity: + +Focus method Invariant + click The window on top is focused + sloppy If the mouse is in a window, then it is focused; if the + mouse is not in a window, then the most recently used + window is focused. + mouse If the mouse is in a non-DESKTOP window, then it is focused; + otherwise, the designated "no_focus_window" is focused + +However, there are a number of cases where the current focus window +becomes invalid and another should be chosen. Some examples are when +a focused window is closed or minimized, or when the user changes +workspaces. In these cases, there needs to be a rule consistent with +the above about the new window to choose. + +Focus method Behavior + click Focus the most recently used window (same as the window + on top) + sloppy Focus the window containing the pointer if there is such + a window, otherwise focus the most recently used window. + mouse Focus the non-DESKTOP window containing the pointer if + there is one, otherwise focus the designated + "no_focus_window". + +Note that "most recently used window", as used here, has a slightly +different connotation than "most recent to have keyboard focus". This +is because when a user activates a window that is a transient, its +ancestor(s) should be considered to be more recently used than other +windows that have had the keyboard focus more recently. (See bug +157360; this may mean that the alt-tab order should also change +simultaneously, although the current implementation does not do that.) + +Also, sometimes a new window will be mapped (e.g. unminimizing a +window or launching a new application). Most users want to interact +with new windows right away, so these should typically be focused. +This does conflict with the invariants for sloppy and mouse focus +modes, so this wouldn't be true for a strict-pointer-focus mode. For +all other modes (non-strict-pointer-focus modes), there are only two +cases in which a new window shouldn't be focused: + + 1) If the window takes a while to launch and the user starts + interacting with a different application, the new window should + not take focus. + 2) If the window that will appear was not launched by the user + (error dialogs, instant messaging windows, etc.), then the window + should not take focus when it appears. + +To handle these cases, Marco compares timestamps of the event that +caused the launch and the timestamp of the last interaction with the +focused window. (Case 2 is handled by the application providing a +special timestamp of 0 for the launch time, which ensures that the +window that appears doesn't get focus) + +If the newly launched window isn't focused, some things should be done +to alert the user that there is a window to work with: + 1) The _NET_WM_DEMANDS_ATTENTION hint should be set + 2) If the new window isn't modal for the focused window, it should + appear below the focused window so that it doesn't obscure the + focused window that the user is interacting with. + 3) If the new window is modal to the focused window, the currently + focused window should lose focus but the modal window should + appear on top. + +Additionally, the user may decide to use the keyboard instead of the mouse +to navigate between windows (referred to as "keynav"). This poses no +problems for click-to-focus (because the same invariant can be +maintained), but for sloppy and mouse focus it requires extra work to +attempt to handle the INHERENTLY CONFLICTING CONSTRAINTS. Marco does +this by having a mouse_mode boolean used to determine which of the two +sets of invariants holds. This mode is set according to which method was +most recently used to choose a focus window: + 1) When receiving EnterNotify events from mouse movement, set + mouse_mode to TRUE. + 2) When using keynav to choose a focus window (e.g. alt-tab, alt-esc, + alt-f2, move-window-to-workspace keybindings), set mouse_mode to FALSE. + 3) When handling events that don't choose a focus window but rather need + a focus_window chosen for them (e.g. switch-to-workspace keybindings), + don't change the mouse_mode and just use the current value. +Note that grabs present a special case since they can generate EnterNotify +and LeaveNotify events without using the mouse, thus these events should be +ignored when the crossing mode is NotifyGrab or NotifyUngrab. THIS +MOUSENAV/KEYNAV MODERATION METHOD IS NOT PERFECT--there are corner cases +when trying to mix-and-match between mousenav and keynav simultaneously +that cause problems; but it appears to be the most reasonable tradeoff and +works well in most cases, especially if the user sticks to just mousenav +for a long time or just keynav for a long time. + +Finally, windows of type WM_DOCK or WM_DESKTOP (e.g. the desktop and +the panel) present a special case, at least partially due to the lack +of decorations. For WM_DESKTOP windows, we only focus them if the +user explicitly requests it (e.g. clicks on the window, uses +Ctrl-Alt-Tab to navigate to it, uses a keybinding to show the desktop, +etc.). For WM_DOCK windows, we do not focus unless we receive a very +explicit request (e.g. Ctrl-Alt-Tab or a _NET_ACTIVE_WINDOW message; +not normal clicks). + + + + +To read more about the bugs that inspired these choices: + - When a focused window becomes invalid and another should be chosen + http://bugzilla.gnome.org/show_bug.cgi?id=135810 + - When a new window is mapped + http://bugzilla.gnome.org/show_bug.cgi?id=118372 + Also, the EWMH spec, especially the parts relating to _NET_WM_USER_TIME + - Modal vs. non-modal dialogs that get denied focus when mapped + http://bugzilla.gnome.org/show_bug.cgi?id=151996 + - Mousenav vs. Keynav in mouse and sloppy focus modes + http://bugzilla.gnome.org/show_bug.cgi?id=167545 + http://bugzilla.gnome.org/show_bug.cgi?id=101190 + http://bugzilla.gnome.org/show_bug.cgi?id=357695 + - Not focusing panels + http://bugzilla.gnome.org/show_bug.cgi?id=160470 + http://bugzilla.gnome.org/show_bug.cgi?id=120100 + +There were many bugs which had to be fixed to get all the above +working; they helped form these policies and/or show the difficulties +in implementing this policy (my apologies in advance for producing a +list heavily lopsided to what I've done; it's just that these bugs are +the ones I'm the most familiar with): + bug 72314 ignore LeaveNotify events from grabs + bug 82921 focus windows on map + bug 87531 only show focus for sticky windows on active workspace (pager) + bug 94545 focus window on workspace switch is non-deterministic + bug 95747 should ignore EnterNotify events with NotifyInferior detail set + bug 97635 sticky windows always keep focus when switching workspaces + bug 102665 a window unminimized from the tasklist should be focused + bug 107347 focus windows that manually position themselves too + bug 108643 focus in MRU order instead of stack order + bug 110970 moving a window to another workspace loses focus + bug 112031 closing a dialog can result in a strange focus window + bug 115650 add _NET_WM_USER_TIME support to gtk+ (see also 150502) + bug 120100 panel shouldn't be focused after workspace applet usage + bug 123803 need final EnterNotify after workspace switch (see also 124798) + bug 124981 focus clicked window in pager only if on current workspace + bug 125492 catch the xserver unfocusing everything and fix its braindeadedness + bug 128200 focus correct window on libwnck window minimize (see 107681 too) + bug 131582 fix race condition on window minimize/close + bug 133120 wrong window focused when changing workspaces + bug 135024 _NET_ACTIVE_WINDOW messages need timestamps + bug 135786 middle-clicking on focused window to lower it should defocus too + bug 136581 window minimization vs. activation for mouse focus + bug 144900 fix focus choice on "un-showing" the desktop + bug 147475 don't lock keyboard on workspace change + bug 148364 DEMANDS_ATTENTION support for marco & libwnck (and other stuff) + bug 149028 focus-stealing-prevention for marco-dialog (and other stuff) + bug 149366 windows denied focus on map occur in wrong order in alt-tab list + bug 149543 consistent focus window when unshowing desktop + bug 149589 race in focus choice from libwnck messages + bug 150271 make sure "run application" dialog gets focused + bug 150668 update gtk+ _NET_ACTIVE_WINDOW support + bug 151245 application startup notification forwarding (partially rejected) + bug 151984 Soeren's idea--backup timestamp when startup notification not used + bug 151990 prevent focus inconsistencies by only providing one focus method + bug 151996 modal dialogs denied focus should not be lowered + bug 152000 fix race on window close followed by rapid mouse movement + bug 152004 ways to handle new window versus mouse invariants + bug 153220 catch the root window getting focus and reset to default window + bug 157360 focus parents of dismissed transient windows in preference to + the window that most recently had focus + bug 159257 focus the desktop when showing it + bug 160470 don't focus panels on click + bug 163450 correct highlighting in workspace switcher popup + bug 164716 refuse to focus a window with a modal transient, and focus + the transient instead + bug 166524 avoid new windows being obscured by the focus window + bug 167545 mousenav vs. keynav in mouse and sloppy focus modes + + + +Addendum on sloppy and mouse focus + You may occasionally hear people refer to sloppy or mouse focus + modes as inherently buggy. This is what they mean by that: + + 1) Keynav doesn't maintain the same invariants as mouse navigation + for these focus modes; switching back and forth between + navigation methods, therefore, may have or appear to have + inconsistencies. Examples: + a) If the user uses Alt-Tab to change the window with focus, then + starts to move the mouse, at that moment the window where the + mouse is does not have focus. + b) Users expect that a workspace they previously used will not + change when the return to it. This means things like window + position and stacking order, but also the focus window. + Unfortunately, using the original focus window (which would be + the most recently used window on that workspace) will + sometimes conflict with the invariants for mouse and sloppy + focus modes. Users are much more surprised by the invariant + being broken than by having the focus window changed (see bug + 94545 and probably others), so we maintain the invariant. + This only matters when using Ctrl-Alt-Arrow to switch + workspaces instead of clicking in the workspace switcher, so + this really is a keynav vs mouse issue. Either that, or a + windows-are-being-mapped exception. ;-) + c) Opening a menu, then moving the mouse to a different window, + and then pressing escape to dismiss the menu will result in + the window containing the mouse not being focused. This is + actually correct behavior (because pressing escape shows that + the user is using key navigation to interact with the window + containing the menu) but is one of those hard-to-get-right + keynav and mouse focus mixture cases. (See bug 101190 for + more details) + d) Similar to (c), moving the mouse off the menu doesn't immediately + focus the window that the mouse goes over, due to an application + grab (we couldn't change this and wouldn't want to, but + technically it does break the invariant). + e) If mouse_mode is off and the user does something to cause focus to + change (e.g. switch workspaces, close or minimize a window, etc.) + and simultaneously tries to move the mouse, the choice of which + window to focus is inherently race-y. (You probably can't satisfy + both keynav and mousenav invariants simultaneously...) + 2) The sloppy/mouse invariants are often not strictly maintained; + for example, we provide an exception to the invariant for newly + mapped windows. (Most find that not allowing this exception is + confusing) + 3) There are an awful lot of little cases to handle to get any focus + mode right, even for click-to-focus. Since mouse and sloppy + focus have sometimes been hard to even determine what correct + behavior is, it is much harder to get them completely right. + Plus mouse and sloppy focus users are a minority, decreasing the + motivation of window manager implementors to get those focus + modes right. + 4) Because of -1-, -2-, and -3-, implementations are often buggy or + inconsistent and people form their opinions from usage of these + implementations. + 5) Sloppy focus suffers from a bit of a discoverability problem (for + example, I have seen a scientist sit down to a computer for which + sloppy focus was in use and take a few minutes before figuring + out how window activation worked; granted the layout of the + windows in that situation was a bit unusual but it still + illustrates that sloppy focus is harder than it should be to + figure out). Mouse focus solves this problem; however, people + that have experience with other computing environments are + accustomed to being able to move their mouse outside the window + they are working with and still continue interacting with that + window, which conflicts with mouse focus. diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am new file mode 100644 index 00000000..cca52d5c --- /dev/null +++ b/doc/man/Makefile.am @@ -0,0 +1,4 @@ +man_MANS = marco.1 marco-theme-viewer.1 \ + marco-window-demo.1 marco-message.1 + +EXTRA_DIST = $(man_MANS) diff --git a/doc/man/Makefile.in b/doc/man/Makefile.in new file mode 100644 index 00000000..797b06f7 --- /dev/null +++ b/doc/man/Makefile.in @@ -0,0 +1,489 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc/man +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +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 = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +man1dir = $(mandir)/man1 +am__installdirs = "$(DESTDIR)$(man1dir)" +NROFF = nroff +MANS = $(man_MANS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_CFLAGS = @ALL_CFLAGS@ +ALL_LIBS = @ALL_LIBS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ +DLLTOOL = @DLLTOOL@ +DOC_USER_FORMATS = @DOC_USER_FORMATS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GDK_PIXBUF_CSOURCE = @GDK_PIXBUF_CSOURCE@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTK_API_VERSION = @GTK_API_VERSION@ +HELP_DIR = @HELP_DIR@ +HOST_ALIAS = @HOST_ALIAS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MARCO_CFLAGS = @MARCO_CFLAGS@ +MARCO_LIBS = @MARCO_LIBS@ +MARCO_MESSAGE_CFLAGS = @MARCO_MESSAGE_CFLAGS@ +MARCO_MESSAGE_LIBS = @MARCO_MESSAGE_LIBS@ +MARCO_WINDOW_DEMO_CFLAGS = @MARCO_WINDOW_DEMO_CFLAGS@ +MARCO_WINDOW_DEMO_LIBS = @MARCO_WINDOW_DEMO_LIBS@ +MATECONFTOOL = @MATECONFTOOL@ +MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@ +MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@ +MATEDIALOG = @MATEDIALOG@ +MATE_KEYBINDINGS_KEYSDIR = @MATE_KEYBINDINGS_KEYSDIR@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OMF_DIR = @OMF_DIR@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +man_MANS = marco.1 marco-theme-viewer.1 \ + marco-window-demo.1 marco-message.1 + +EXTRA_DIST = $(man_MANS) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/man/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/man/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @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 $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +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-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-man1 \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-man uninstall-man1 + + +# 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/doc/man/marco-message.1 b/doc/man/marco-message.1 new file mode 100644 index 00000000..62e7a36f --- /dev/null +++ b/doc/man/marco-message.1 @@ -0,0 +1,60 @@ +.\" Hey, EMACS: -*- nroff -*- +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.\" ----- +.\" This file was confirmed to be licenced under the GPL +.\" by its author and copyright holder, Akira TAGOH, on June 1st 2008: +.\" +.\" > I'm comfortable with DFSG-free. that sounds great if you think it's +.\" > useful and worth containing it in upstream. +.\" ... +.\" > Right I know. any licenses that is DFSG-free, I'm ok with whatever, +.\" > since I have contributed that for Debian. so GPL is no problem for me. +.\" ----- +.TH MARCO\-MESSAGE 1 "28 August 2002" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +MARCO\-MESSAGE \- a command to send a message to Marco +.SH SYNOPSIS +.B MARCO\-MESSAGE +[restart|reload\-theme|enable\-keybindings|disable\-keybindings] +.SH DESCRIPTION +This manual page documents briefly the +.B marco\-message\fP. +This manual page was written for the Debian distribution +because the original program does not have a manual page. +.PP +.\" TeX users may be more comfortable with the \fB\fP and +.\" \fI\fP escape sequences to invode bold face and italics, +.\" respectively. +\fBmarco\-message\fP send a specified message to \fBmarco\fP(1). +.SH OPTIONS +.TP +.B restart +Restart \fBmarco\fP(1) which is running. +.TP +.B reload-theme +Reload a theme which is specified on mateconf database. +.TP +.B enable-keybindings +Enable all of keybindings which is specified on mateconf database. +.TP +.B disable-keybindings +Disable all of keybindings which is specified on mateconf database. +.SH SEE ALSO +.BR marco (1) +.SH AUTHOR +This manual page was written by Akira TAGOH , +for the Debian GNU/Linux system (but may be used by others). diff --git a/doc/man/marco-theme-viewer.1 b/doc/man/marco-theme-viewer.1 new file mode 100644 index 00000000..6aafabda --- /dev/null +++ b/doc/man/marco-theme-viewer.1 @@ -0,0 +1,43 @@ +.\" In .TH, FOO should be all caps, SECTION should be 1-8, maybe w/ subsection +.\" other parms are allowed: see man(7), man(1) +.\" +.\" Based on template provided by Tom Christiansen . +.\" +.TH MARCO-THEME-VIEWER 1 "1 June 2004" +.SH NAME +marco-theme-viewer \- view marco themes +.SH SYNOPSIS +.B marco-theme-viewer +[ +.I THEMENAME +] +.SH DESCRIPTION +.\" Putting a newline after each sentence can generate better output. +.B marco-theme-viewer +allows you to preview any installed Marco theme. +.PP +When designing a new Marco theme, you can use +.B marco-theme-viewer +to measure the performance of a window frame option, and to preview +the option. +.SH OPTIONS +.TP +.I THEMENAME +Name of the theme to be shown (\fIAtlanta\fR by default). +It is case-sensitive. +.SH FILES +.br +.nf +.TP +.I /usr/share/themes +system themes directory +.TP +.I /usr/share/themes/*/marco-1/marco-theme-1.xml +theme specification file +.SH AUTHOR +This manual page was written by Jose M. Moya , for +the Debian GNU/Linux system (but may be used by others). +.SH "SEE ALSO" +.\" Always quote multiple words for .SH +.BR marco (1), +.BR marco-window-demo (1). diff --git a/doc/man/marco-window-demo.1 b/doc/man/marco-window-demo.1 new file mode 100644 index 00000000..268cb9a4 --- /dev/null +++ b/doc/man/marco-window-demo.1 @@ -0,0 +1,25 @@ +.\" In .TH, FOO should be all caps, SECTION should be 1-8, maybe w/ subsection +.\" other parms are allowed: see man(7), man(1) +.\" +.\" Based on template provided by Tom Christiansen . +.\" +.TH MARCO-WINDOW-DEMO 1 "1 June 2004" +.SH NAME +marco-window-demo \- demo of window features +.SH SYNOPSIS +.B marco-window-demo +.SH DESCRIPTION +.\" Putting a newline after each sentence can generate better output. +This program demonstrates various kinds of windows that window +managers and window manager themes should handle. +.PP +Be sure to tear off the menu and toolbar, those are also a special +kind of window. +.SH AUTHOR +This manual page was written by Jose M. Moya , for +the Debian GNU/Linux system (but may be used by others). +.SH "SEE ALSO" +.\" Always quote multiple words for .SH +.BR x-window-manager (1), +.BR marco (1), +.BR marco-theme-viewer (1). diff --git a/doc/man/marco.1 b/doc/man/marco.1 new file mode 100644 index 00000000..793893ba --- /dev/null +++ b/doc/man/marco.1 @@ -0,0 +1,60 @@ +.\" Hey, EMACS: -*- nroff -*- +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.TH MARCO 1 "11 February 2006" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +MARCO \- minimal GTK2 Window Manager +.SH SYNOPSIS +.B marco +[\-\-display=\fIDISPLAY\fP] [\-\-replace] [\-\-sm\-client\-id=\fIID\fP] [\-\-sm\-disable] [\-\-sm\-save\-file=\fIFILENAME\fP] [\-\-version] [\-\-help] +.SH DESCRIPTION +This manual page documents briefly +.B marco\fP. +.PP +.\" TeX users may be more comfortable with the \fB\fP and +.\" \fI\fP escape sequences to invode bold face and italics, +.\" respectively. +\fBmarco\fP is a minimal X window manager aimed at nontechnical users and is designed to integrate well with the MATE desktop. \fBmarco\fP lacks some features that may be expected by traditional UNIX or other technical users; these users may want to investigate other available window managers for use with MATE or standalone. +.SH OPTIONS +.TP +.B \-\-display=DISPLAY +Connect to X display \fIDISPLAY\fP. +.TP +.B \-\-replace +a window manager which is running is replaced by \fBmarco\fP. Users are encouraged to change the MATE window manager by running the new WM with the --replace or -replace option, and subsequently saving the session. +.TP +.B \-\-sm\-client\-id=ID +Specify a session management \fIID\fP. +.TP +.B \-\-sm\-disable +Disable the session management. +.TP +.B \-\-sm\-save\-file=FILENAME +Load a session from \fIFILENAME\fP. +.TP +.B \-\-version +Print the version number. +.TP +.B \-?, \-\-help +Show summary of options. +.SH CONFIGURATION +\fBmarco\fP configuration can be found under \fIPreferences\fP->\fIWindows\fP and \fIPreferences\fP->\fIKeyboard Shortcuts\fP on the menu-panel. Advanced configuration can be achieved directly through mateconf editing (mateconf-editor or mateconftool-2). +.SH SEE ALSO +.BR marco-message (1) +.SH AUTHOR +The original manual page was written by Thom May . It was updated by Akira TAGOH +for the Debian GNU/Linux system (with permission to use by others), and then updated by Luke Morton and Philip O'Brien +for inclusion in marco. diff --git a/doc/marco-theme.dtd b/doc/marco-theme.dtd new file mode 100644 index 00000000..7c9d3d20 --- /dev/null +++ b/doc/marco-theme.dtd @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/theme-format.txt b/doc/theme-format.txt new file mode 100644 index 00000000..4881815f --- /dev/null +++ b/doc/theme-format.txt @@ -0,0 +1,330 @@ +Themes are in a simple XML-subset format. There are multiple versions +of the theme format, and a given theme can support more than one format. + +Version 1: THEMEDIR/metacity-1/metacity-theme-1.xml + (original metacity format) +Version 2: THEMEDIR/metacity-1/metacity-theme-2.xml + +The subdirectory name is "metacity-1" in all versions. + +As you might expect, older versions of marco will not understand +newer theme formats. However, newer versions will use old themes. +Marco will always use the newest theme format it understands that +the X server supports. Some format versions are only supported if you +have the right X server features. + +Each format *requires* the corresponding filename. If you put version +2 format features in the metacity-1/metacity-theme-1.xml file, then +marco will get angry. + +This document has separate sections for each format version. You may +want to read the document in reverse order, since the base features +are discussed under version 1. + +New Features in Theme Format Version 2 +====================================== + +The optional attributes rounded_top_left, rounded_top_right, +rounded_bottom_left and rounded_bottom_right on +should now be the radius of the corner in pixels. You may still use +the values "false" for 0 and "true" for 5, which means v1 values will +still work just fine. + + has a new optional attribute, hide_buttons. If this +is true, no buttons will be displayed on the titlebar. + +Anywhere you can use a positive integer, you can use an integer constant. + +As well as constant integers and reals, you may define constant colours, +thus: + + + + has two new optional attributes, background and alpha. +If you specify alpha, you must specify background. background is a +colour used for the background of the frame. alpha is the transparency +as a real between 0.0 and 1.0. If the current X server does not support +alpha channels, the value is ignored. + +The filename attribute of may begin with "theme:". If so, the +rest of the string is the name of a theme icon. The 64x64 version of the +icon is used, except for fallback mini_icons, which use the 16x16 version. +This does not affect ordinary resizing. For example: + + +s are parsed but ignored. + +Fallback icons can be specified using . There are two +optional arguments, icon and mini_icon. The values of these arguments +are identical to that of the filename attribute of . Fallback +icons are used when a window does not supply its own icon. If a fallback +icon is not specified with , Marco will use a built-in +icon, as in metacity-theme-1. + +The element, as well as the original start_angle and end_angle +attributes, may be given from and to attributes. The values of these +attributes are given in degrees clockwise, with 0 being straight up. +For example: + + + may now take an optional resize attribute, with +the same interpretation as the resize attribute on . +If this attribute is omitted for state="shaded", it defaults to "both". +(If it is omitted for state="normal", it remains an error.) + +In addition to the four