summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2021-04-01 19:25:51 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2021-04-01 19:25:51 +0000
commit4f6aa8429e3910973cfdcbd5a245fc23cc6ccfd3 (patch)
tree2a83d7350ec7b2877249a1588891d718caf56c06
parentInitial commit. (diff)
downloadgnome-session-upstream.tar.xz
gnome-session-upstream.zip
Adding upstream version 3.38.0.upstream/3.38.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--AUTHORS22
-rw-r--r--COPYING339
-rw-r--r--ChangeLog50
-rw-r--r--ChangeLog-200202122587
-rw-r--r--ChangeLog-200803101598
-rw-r--r--ChangeLog.pre-git4082
-rw-r--r--HACKING31
-rw-r--r--MAINTAINERS24
-rw-r--r--NEWS39
-rw-r--r--README45
-rw-r--r--data/gnome-custom-session.desktop.in.in5
-rw-r--r--data/gnome-dummy.session.desktop.in.in2
-rw-r--r--data/gnome-launched-override.scope.conf6
-rw-r--r--data/gnome-session-failed.service.in19
-rw-r--r--data/gnome-session-failed.target10
-rw-r--r--data/gnome-session-initialized.target17
-rw-r--r--data/gnome-session-manager.target12
-rw-r--r--data/gnome-session-manager@.service.in19
-rw-r--r--data/gnome-session-monitor.service.in15
-rw-r--r--data/gnome-session-pre.target12
-rw-r--r--data/gnome-session-restart-dbus.service.in10
-rw-r--r--data/gnome-session-shutdown.target32
-rw-r--r--data/gnome-session-signal-init.service.in8
-rw-r--r--data/gnome-session-wayland.target10
-rw-r--r--data/gnome-session-wayland@.target20
-rw-r--r--data/gnome-session-x11-services-ready.target8
-rw-r--r--data/gnome-session-x11-services.target11
-rw-r--r--data/gnome-session-x11.target13
-rw-r--r--data/gnome-session-x11@.target20
-rw-r--r--data/gnome-session.convert3
-rw-r--r--data/gnome-session.target13
-rw-r--r--data/gnome-session@.target14
-rw-r--r--data/gnome-wayland.desktop.in.in7
-rw-r--r--data/gnome-xorg.desktop.in.in8
-rw-r--r--data/gnome.desktop.in.in8
-rw-r--r--data/gnome.session.conf.in5
-rw-r--r--data/gnome.session.desktop.in.in4
-rw-r--r--data/hardware-compatibility32
-rw-r--r--data/meson.build193
-rw-r--r--data/org.gnome.SessionManager.gschema.xml.in24
-rw-r--r--data/session-selector.ui195
-rw-r--r--doc/dbus/config.xsl6
-rw-r--r--doc/dbus/dbus-introspect-docs.dtd32
-rw-r--r--doc/dbus/docbook.css78
-rw-r--r--doc/dbus/gnome-session.xml.in52
-rw-r--r--doc/dbus/meson.build46
-rw-r--r--doc/dbus/spec-to-docbook.xsl555
-rw-r--r--doc/man/gnome-session-inhibit.xml106
-rw-r--r--doc/man/gnome-session-quit.134
-rw-r--r--doc/man/gnome-session-selector.xml52
-rw-r--r--doc/man/gnome-session.1184
-rw-r--r--doc/man/meson.build43
-rw-r--r--doc/meson.build9
-rw-r--r--gnome-session.doap58
-rw-r--r--gnome-session/README69
-rw-r--r--gnome-session/gdm-log.c205
-rw-r--r--gnome-session/gdm-log.h50
-rwxr-xr-xgnome-session/gnome-session.in32
-rw-r--r--gnome-session/gsm-app.c569
-rw-r--r--gnome-session/gsm-app.h134
-rw-r--r--gnome-session/gsm-autostart-app.c1516
-rw-r--r--gnome-session/gsm-autostart-app.h78
-rw-r--r--gnome-session/gsm-client.c563
-rw-r--r--gnome-session/gsm-client.h154
-rw-r--r--gnome-session/gsm-consolekit.c978
-rw-r--r--gnome-session/gsm-consolekit.h59
-rw-r--r--gnome-session/gsm-dbus-client.c456
-rw-r--r--gnome-session/gsm-dbus-client.h57
-rw-r--r--gnome-session/gsm-fail-whale-dialog.c461
-rw-r--r--gnome-session/gsm-fail-whale-dialog.h36
-rw-r--r--gnome-session/gsm-fail-whale.c66
-rw-r--r--gnome-session/gsm-fail-whale.h34
-rw-r--r--gnome-session/gsm-icon-names.h28
-rw-r--r--gnome-session/gsm-inhibitor-flag.h36
-rw-r--r--gnome-session/gsm-inhibitor.c649
-rw-r--r--gnome-session/gsm-inhibitor.h88
-rw-r--r--gnome-session/gsm-manager-logout-mode.h34
-rw-r--r--gnome-session/gsm-manager.c3846
-rw-r--r--gnome-session/gsm-manager.h137
-rw-r--r--gnome-session/gsm-presence-flag.h33
-rw-r--r--gnome-session/gsm-presence.c499
-rw-r--r--gnome-session/gsm-presence.h75
-rw-r--r--gnome-session/gsm-process-helper.c113
-rw-r--r--gnome-session/gsm-process-helper.h32
-rw-r--r--gnome-session/gsm-session-fill.c338
-rw-r--r--gnome-session/gsm-session-fill.h32
-rw-r--r--gnome-session/gsm-session-save.c296
-rw-r--r--gnome-session/gsm-session-save.h34
-rw-r--r--gnome-session/gsm-shell-extensions.c199
-rw-r--r--gnome-session/gsm-shell-extensions.h61
-rw-r--r--gnome-session/gsm-shell.c507
-rw-r--r--gnome-session/gsm-shell.h87
-rw-r--r--gnome-session/gsm-store.c408
-rw-r--r--gnome-session/gsm-store.h96
-rw-r--r--gnome-session/gsm-system.c297
-rw-r--r--gnome-session/gsm-system.h136
-rw-r--r--gnome-session/gsm-systemd.c1189
-rw-r--r--gnome-session/gsm-systemd.h59
-rw-r--r--gnome-session/gsm-util.c847
-rw-r--r--gnome-session/gsm-util.h69
-rw-r--r--gnome-session/gsm-xsmp-client.c1359
-rw-r--r--gnome-session/gsm-xsmp-client.h89
-rw-r--r--gnome-session/gsm-xsmp-server.c748
-rw-r--r--gnome-session/gsm-xsmp-server.h59
-rw-r--r--gnome-session/main.c623
-rw-r--r--gnome-session/meson.build111
-rw-r--r--gnome-session/org.gnome.SessionManager.App.xml43
-rw-r--r--gnome-session/org.gnome.SessionManager.Client.xml73
-rw-r--r--gnome-session/org.gnome.SessionManager.ClientPrivate.xml123
-rw-r--r--gnome-session/org.gnome.SessionManager.Inhibitor.xml66
-rw-r--r--gnome-session/org.gnome.SessionManager.Presence.xml95
-rw-r--r--gnome-session/org.gnome.SessionManager.xml492
-rw-r--r--gnome-session/test-client-dbus.c265
-rw-r--r--gnome-session/test-inhibit.c197
-rw-r--r--gnome-session/test-process-helper.c56
-rw-r--r--meson.build228
-rw-r--r--meson_options.txt8
-rw-r--r--meson_post_install.py26
-rw-r--r--po/ChangeLog.pre-git7382
-rw-r--r--po/LINGUAS113
-rw-r--r--po/POTFILES.in21
-rw-r--r--po/POTFILES.skip9
-rw-r--r--po/af.po807
-rw-r--r--po/am.po486
-rw-r--r--po/an.po525
-rw-r--r--po/ar.po573
-rw-r--r--po/as.po492
-rw-r--r--po/ast.po632
-rw-r--r--po/az.po484
-rw-r--r--po/be.po433
-rw-r--r--po/be@latin.po558
-rw-r--r--po/bg.po293
-rw-r--r--po/bn.po611
-rw-r--r--po/bn_IN.po569
-rw-r--r--po/br.po505
-rw-r--r--po/bs.po315
-rw-r--r--po/ca.po1300
-rw-r--r--po/ca@valencia.po1243
-rw-r--r--po/ckb.po331
-rw-r--r--po/crh.po921
-rw-r--r--po/cs.po376
-rw-r--r--po/csb.po478
-rw-r--r--po/cy.po522
-rw-r--r--po/da.po802
-rw-r--r--po/de.po388
-rw-r--r--po/dz.po649
-rw-r--r--po/el.po814
-rw-r--r--po/en@shaw.po532
-rw-r--r--po/en_CA.po657
-rw-r--r--po/en_GB.po1148
-rw-r--r--po/eo.po660
-rw-r--r--po/es.po873
-rw-r--r--po/et.po548
-rw-r--r--po/eu.po639
-rw-r--r--po/fa.po641
-rw-r--r--po/fi.po747
-rw-r--r--po/fr.po384
-rw-r--r--po/fur.po934
-rw-r--r--po/fy.po657
-rw-r--r--po/ga.po531
-rw-r--r--po/gd.po568
-rw-r--r--po/gl.po390
-rw-r--r--po/gu.po566
-rw-r--r--po/ha.po811
-rw-r--r--po/he.po1121
-rw-r--r--po/hi.po701
-rw-r--r--po/hr.po431
-rw-r--r--po/hu.po373
-rw-r--r--po/hy.po492
-rw-r--r--po/id.po371
-rw-r--r--po/ig.po801
-rw-r--r--po/is.po664
-rw-r--r--po/it.po375
-rw-r--r--po/ja.po397
-rw-r--r--po/ka.po797
-rw-r--r--po/kab.po297
-rw-r--r--po/kk.po490
-rw-r--r--po/km.po530
-rw-r--r--po/kn.po494
-rw-r--r--po/ko.po362
-rw-r--r--po/ku.po879
-rw-r--r--po/lt.po491
-rw-r--r--po/lv.po387
-rw-r--r--po/mai.po511
-rw-r--r--po/meson.build1
-rw-r--r--po/mg.po488
-rw-r--r--po/mi.po459
-rw-r--r--po/mjw.po303
-rw-r--r--po/mk.po590
-rw-r--r--po/ml.po565
-rw-r--r--po/mn.po496
-rw-r--r--po/mr.po655
-rw-r--r--po/ms.po725
-rw-r--r--po/nb.po345
-rw-r--r--po/nds.po509
-rw-r--r--po/ne.po704
-rw-r--r--po/nl.po466
-rw-r--r--po/nn.po1137
-rw-r--r--po/nso.po497
-rw-r--r--po/oc.po555
-rw-r--r--po/or.po670
-rw-r--r--po/pa.po842
-rw-r--r--po/pl.po373
-rw-r--r--po/ps.po549
-rw-r--r--po/pt.po1246
-rw-r--r--po/pt_BR.po629
-rw-r--r--po/ro.po738
-rw-r--r--po/ru.po395
-rw-r--r--po/rw.po567
-rw-r--r--po/si.po587
-rw-r--r--po/sk.po535
-rw-r--r--po/sl.po651
-rw-r--r--po/sq.po647
-rw-r--r--po/sr.po499
-rw-r--r--po/sr@latin.po427
-rw-r--r--po/sv.po404
-rw-r--r--po/ta.po740
-rw-r--r--po/te.po413
-rw-r--r--po/tg.po512
-rw-r--r--po/th.po1054
-rw-r--r--po/tk.po459
-rw-r--r--po/tr.po403
-rw-r--r--po/ug.po784
-rw-r--r--po/uk.po370
-rw-r--r--po/uz.po523
-rw-r--r--po/uz@cyrillic.po523
-rw-r--r--po/vi.po596
-rw-r--r--po/wa.po499
-rw-r--r--po/xh.po501
-rw-r--r--po/yo.po803
-rw-r--r--po/zh_CN.po624
-rw-r--r--po/zh_HK.po557
-rw-r--r--po/zh_TW.po584
-rw-r--r--po/zu.po494
-rw-r--r--tools/gnome-session-check-accelerated-common.h29
-rw-r--r--tools/gnome-session-check-accelerated-gl-helper.c517
-rw-r--r--tools/gnome-session-check-accelerated-gles-helper.c201
-rw-r--r--tools/gnome-session-check-accelerated.c312
-rw-r--r--tools/gnome-session-ctl.c304
-rwxr-xr-xtools/gnome-session-custom-session4
-rw-r--r--tools/gnome-session-inhibit.c411
-rw-r--r--tools/gnome-session-quit.c216
-rw-r--r--tools/gnome-session-selector.c698
-rw-r--r--tools/meson.build71
244 files changed, 107568 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..509accf
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,22 @@
+new code base authors
+---------------------
+
+Dan Winship <danw@gnome.org>
+Lucas Rocha <lucasr@gnome.org>
+William Jon McCann <jmccann@redhat.com>
+
+original gnome-session authors
+------------------------------
+
+Tom Tromey <tromey@cygnus.com>
+Felix Bellaby <felix@pooh.u-net.com>
+
+smproxy authors
+---------------
+
+Ralph Mor, X Consortium
+
+with modifications from
+
+Tom Tromey <tromey@cygnus.com>
+Felix Bellaby <felix@pooh.u-net.com>
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..d159169
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..f329195
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,50 @@
+=== ChangeLog discontinued ===
+
+ With the move to git, this module is switching from a ChangeLog file to
+ relying on commit messages to provide change history. Please write commit
+ messages in the format described at http://live.gnome.org/Git/CommitMessages
+
+ Below is a copy of this format:
+
+=== begin example commit ===
+tag: Short explanation of the commit
+
+Longer explanation explaining exactly what's changed, whether any
+external or private interfaces changed, what bugs were fixed (with bug
+tracker reference if applicable) and so forth. Be concise but not too brief.
+=== end example commit ===
+
+ - The commit message is mainly for the other people, so they should be able
+ to understand it now and six months later.
+
+ - Always add a brief description of the commit to the _first_ line of the
+ commit and terminate by two newlines (it will work without the second
+ newline, but that is not nice for the interfaces).
+
+ - First line (the brief description) must only be one sentence and should
+ start with a capital letter unless it starts with a lowercase symbol or
+ identifier. Don't use a trailing period either. Don't exceed 72 characters.
+
+ - You can prefix the first line with one tag, to make it easier to know to
+ which part of the module the commit applies. For example, a commit with
+ "fish: Make it work with newer fortune" in the gnome-panel module clearly
+ applies to the fish applet.
+
+ - The main description (the body) is normal prose and should use normal
+ punctuation and capital letters where appropriate. Normally, for patches
+ sent to a mailing list, the body is copied from there. This main
+ description can be empty if the change is self-explanatory (eg: "Add DOAP
+ file").
+
+ - When committing code on behalf of others use the --author option, e.g. git
+ commit -a --author "Joe Coder <joe@coder.org>".
+
+ - When referring to a bug, you can use this form: bgo#12345. Use bgo for
+ bugzilla.gnome.org, but you can also reference bugs in other bug trackers:
+ rh means bugzilla.redhat.com, bnc means bugzilla.novell.com, lp means
+ launchpad.net, etc. Whenever possible, use the full URL of the bug, though.
+
+ - When a commit closes a bug, the commit message should contain a line like:
+ Closes: http://bugzilla.gnome.org/show_bug.cgi?id=12345
+ or simply:
+ http://bugzilla.gnome.org/show_bug.cgi?id=12345
diff --git a/ChangeLog-20020212 b/ChangeLog-20020212
new file mode 100644
index 0000000..36ee3e1
--- /dev/null
+++ b/ChangeLog-20020212
@@ -0,0 +1,2587 @@
+2002-02-12 Alfons Hoogervorst <alfons@proteus.demon.nl>
+
+ reviewed by: Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: add -lz to png check.
+
+2002-02-12 Gediminas Paulauskas <menesis@delfi.lt>
+
+ * configure.in: removed GNOME_COMMON_INIT,
+ GNOME_PLATFORM_GNOME_2 -- obsolete.
+ GNOME_COMPILE_WARNINGS does not take arguments.
+ * TRANSLATABLE_FILES: removed, intltool handles all of them.
+
+2002-02-11 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 1.5.8
+
+ * configure.in: update required versions to
+ recent versions. Check version of gtk-doc.
+
+2002-02-11 Mark McLoughlin <mark@skynet.ie>
+
+ * Makefile.am: add man directory.
+
+ * configure.in: remove gnome-terminal.
+
+2002-02-11 Mark McLoughlin <mark@skynet.ie>
+
+ * Makefile.am: (SUBDIRS): remove gnome-terminal. See
+ the profterm module for the Gnome 2.0 terminal.
+
+2002-02-11 Mark McLoughlin <mark@skynet.ie>
+
+ * Netscape.desktop.in: just point at netscape. We don't
+ ship gnome-moz-remote anymore.
+
+2002-02-10 John Fleck <jfleck@inkstain.net>
+
+ * applets/gen_util/help/C/mailcheck:
+ * added mailcheck-C.omf, legal.xml
+ * removed mailcheck.sgml, mailcheck_applet.sgml,
+ mailcheck_applet-C.omf
+ modified:
+ * configure.in, applets/gen_util/help/C/Makefile.am,
+ mailcheck.xml, Makefile.am
+
+ adding build stuff for mailcheck docs
+
+2002-02-11 Jorn Baayen <jorn@nl.linux.org>
+
+ * applets/gen_util/pager.c:
+ * applets/gen_util/tasklist.c: replace the "pressed" signal on the Done
+ buttons in the preference dialogs with the "clicked" signal. Fixes an
+ odd bug where the button would be pressed on hover the next time you
+ opened the dialog.
+
+2002-02-11 Kjartan Maraas <kmaraas@gnome.org>
+
+ * man/*: Added man pages from Christian Marillat.
+ * configure.in: Create Makefile in man/
+
+2002-02-10 John Fleck <jfleck@inkstain.net>
+
+ * applets/gen_util/help/C/clock/clock.xml, clock/figures/*.png
+ update figures and text of clock applet
+
+2002-02-09 John Fleck <jfleck@inkstain.net>
+
+ * configure.in
+ * applets/gen_util/help/Makefile.am
+ * applets/gen_util/help/C/Makefile.am
+ * applets/gen_util/help/C/clock/Makefile.am, clock.xml
+ added
+ * applets/gen_util/help/C/legal.xml, clock-C.omf
+ removed
+ * clock_applet.xml clock_applet.sgml clock.sgml clock_applet-C.omf
+ updated
+ adding clock applet docs build stuff
+
+2002-02-04 John Fleck <jfleck@inkstain.net>
+ * configure.in
+ * applets/gen_util/help/C/Makefile.am
+ added:
+ * applets/gen_util/help/C/tasklist/legal.xml
+ * applets/gen_util/help/C/tasklist/Makefile.am
+ * applets/gen_util/help/C/tasklist/tasklist.xml
+ * applets/gen_util/help/C/tasklist/tasklist-C.omf
+ adding initial documentation for tasklist applet
+
+2002-02-04 Mark McLoughlin <mark@skynet.ie>
+
+ * Version 1.5.7
+
+2002-02-03 John Fleck <jfleck@inkstain.net>
+
+ * configure.in
+ * applets/gen_util/Makefile.am
+ * applets/gen_util/help/Makefile.am
+ * applets/gen_util/help/C/Makefile.am
+ added:
+ * applets/gen_util/help/C/pager/legal.xml
+ * applets/gen_util/help/C/pager/Makefile.am
+ * applets/gen_util/help/C/pager/pager.xml
+ * applets/gen_util/help/C/pager/pager-C.omf
+ adding initial documentation for pager applet
+
+2002-02-02 Seth Nickell <snickell@stanford.edu>
+
+ * pixmaps/gnome-globe.png:
+
+ Use a more photorealistic, colourful
+ globe.
+
+ * pixmaps/gnome-settings.png:
+
+ Use the Control Center icon.
+
+2002-02-02 The Icon Butcher <snickell@stanford.edu>
+
+ * pixmaps/gnome-multimedia.png:
+
+ Butcher a few jimmac/tigert icons and slap
+ 'em together to get what I'm looking for :-)
+
+2002-01-30 Mark McLoughlin <mark@skynet.ie>
+
+ * Version 1.5.6
+
+2002-01-30 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: use AM_GCONF_SOURCE_2.
+
+2002-01-29 Glynn Foster <glynn.foster@sun.com>
+
+ * Version 1.5.5
+
+2002-01-28 Glynn Foster <glynn.foster@sun.com>
+
+ * configure.in: Add new pkg-config check for libpanel_applet.
+
+2002-01-20 John Fleck
+
+ * Makefile.am
+ * configure.in
+ * applets/Makefile.am
+ * core-docs/Makefile.am
+ * core-docs/fdl/C/Makefile.am
+ * core-docs/fdl/C/fdl-C.omf
+ * core-docs/gpl/C/Makefile.am
+ * core-docs/gpl/C/gpl-C.omf
+ * core-docs/lgpl/C/Makefile.am
+ * core-docs/lgpl/C/lgpl-C.omf
+
+ add core-docs into the build with xml versions of gpl, fdl and
+ lgpl, remove the old tasklist applet from the build as it was
+ screwing up distcheck
+
+2002-01-19 Seth Nickell <snickell@stanford.edu>
+
+ * pixmaps/Makefile.am:
+ * pixmaps/gnome-panel-type-corner.png:
+ * pixmaps/gnome-panel-type-edge.png:
+ * pixmaps/gnome-panel-type-floating.png:
+ * pixmaps/gnome-panel-type-menu.png:
+ * pixmaps/gnome-panel-type-sliding.png:
+
+ Add new icons for the "Create panel->"
+ items of the panel context menu.
+
+2002-01-19 Seth Nickell <snickell@stanford.edu>
+
+ * pixmaps/Makefile.am:
+ * pixmaps/gnome-workspace.png:
+
+ Add a new icon for the "Workspace List" applet.
+
+2002-01-16 John Fleck <jfleck@inkstain.net>
+
+ * core-docs - update lgpl.xml, gpl.xml and fdl.xml
+ so the xml validates - they're not yet in the build
+
+2002-01-14 Mark McLoughlin <mark@skynet.ie>
+
+ * Version 1.5.4
+
+2002-01-12 Glynn Foster <glynn.foster@sun.com>
+
+ * configure.in: Add libglade dependancy on wncklet applets. Thanks to
+ MCArkan for pointing this out.
+
+2002-01-03 Glynn Foster <glynn.foster@sun.com>
+
+ * configure.in: Make gnome-core build on Solaris again. Don't know
+ how this was left out. Thanks to Laca for patch.
+
+2001-12-24 Seth Nickell <snickell@stanford.edu>
+
+ * pixmaps/gnome-panel.png:
+
+ Off with the hand!
+
+2001-12-21 Anders Carlsson <andersca@gnu.org>
+
+ * configure.in: Add libpng check.
+
+Wed Dec 19 20:18:53 2001 George Lebl <jirka@5z.com>
+
+ * pixmaps/Makefile.am, pixmaps/gnome-day.png, pixmaps/gnome-month.png,
+ pixmaps/gnome-set-time.png, pixmaps/gnome-week.png: add some
+ icons from "Dennis M. Cranston" <dennis_cranston@yahoo.com>
+
+Sun Dec 09 2001 Miles Lane <miles@megapathdsl.net>
+
+ * configure.in: Add gnome-vfs-module-2.0 to the
+ PANELCONFIG definition so that the panel code builds
+ again. There are new dependencies on gnome-vfs-mime.h.
+ Approved by seth.
+
+Sun Dec 09 02:19:46 2001 George Lebl <jirka@5z.com>
+
+ * configure.in: require libwnck for the panel also
+
+2001-12-08 Alex Larsson <alexl@redhat.com>
+
+ * doc/panel-session-handling.txt:
+ * doc/Makefile.am:
+ Added the new panel session handling proposal.
+
+2001-12-08 Gediminas Paulauskas <menesis@delfi.lt>
+
+ * Makefile.am: (SUBDIRS): remove intl
+ * various other Makefile.am: (INCLUDES): remove intl
+ (*_LDADD): remove INTLLIBS
+
+2001-12-07 Glynn Foster <glynn.foster@sun.com>
+
+ * configure.in: Bump up version number to
+ 1.5.3
+
+2001-12-07 Glynn Foster <glynn.foster@sun.com>
+
+ * panel/Makefile.am:
+
+ Fix stuff..again.
+
+2001-12-07 Glynn Foster <glynn.foster@sun.com>
+
+ * gnome-terminal/Makefile.am:
+ * panel/Makefile.am:
+
+ Fix up stuff for distcheck.
+
+Sun Dec 2 13:14:22 2001 Owen Taylor <otaylor@redhat.com>
+
+ * configure.in: Add .pc file for gnome-desktop-2.0.
+
+2001-11-29 Stephen Browne <stephen.browne@sun.com>
+
+ *configure.in
+
+ Added pkgcheck for gnome-panel-properties
+ Got rid of LIBCAPPLET stuff - no more libcapplet
+
+2001-11-29 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: version 1.5.2.
+
+2001-11-28 Seth Nickell <snickell@stanford.edu>
+
+ * Makefile.am:
+ * configure.in:
+
+ Generate desktop-links/Makefile, and recurse into it.
+
+2001-11-27 Alexander Larsson <alla@lysator.liu.se>
+
+ * configure.in:
+ Added WNCKLET_CFLAGS/LIBS for applets that link against libwnck.
+
+ * applets/gen_util/pager.[ch]:
+ New files, implement a pager using libwnck.
+
+ * applets/gen_util/GNOME_GenUtilApplet_Factory.server.in.in:
+ * applets/gen_util/Makefile.am:
+ * applets/gen_util/main.c:
+ Add Pager applet
+
+2001-11-27 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: version 1.5.1.
+
+2001-11-27 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: generate libpanel-applet/Makefile and
+ libpanel-applet/libpanelapplet-2.0.pc
+
+ * Makefile.am (SUBDIRS): add libpanel-applet.
+
+2001-11-27 Gediminas Paulauskas <menesis@delfi.lt>
+
+ * all files containing main(): always get translated messages in
+ UTF-8.
+
+2001-11-26 Mark McLoughlin <mark@skynet.ie>
+
+ * doc/reference/panel-applet/Makefile.am: fixup.
+
+2001-11-26 Mark McLoughlin <mark@skynet.ie>
+
+ * AUTHORS, BUGS, NEWS, README, DEPENDS, HACKING: try to bring
+ some way up to date.
+
+ * COPYING.LIB: add LGPL file.
+
+ * Makefile.am: add doc to SUNDIRS.
+
+ * configure.in: build doc/ Makefiles
+
+ * doc/Makefile.am, doc/reference/Makefile.am: new files.
+
+2001-11-25 Sander Vesik <sander.vesik@sun.com>
+
+ * panel/quick-desktop-reader.c,
+ gnome-desktop/gnome-desktop-item.c:
+ Remove libgnomevfs/gnome-vfs-mime-utils.h that neither
+ exists nor is needed any more.
+
+2001-11-23 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: enable gnome-core/panel/doc/Makefile.am,
+ gnome-core/panel/doc/reference/Makefile.am.
+
+2001-11-21 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: re-enable applets/Makefile and
+ applets/fish/Makefile.
+
+ * applet/Makefile.am: enable fish/ subdir.
+
+Mon, 19 Nov 2001 02:06:20 -0500 Frank Belew <frb@ximian.com>
+
+ * Makefile.am: replaced xml-i18n-* with intltool-*
+ cleaned up EXTRA_SUBDIRS
+ * configure.in: removed AM_PROG_XML_I18N_TOOLS
+ added GETTEXT_PACKAGE definition, and added AC_SUBST
+ and AC_DEFINE_UNQUOTED to complete the change
+ * acconfig.h: added #undef GETTEXT_PACKAGE
+
+2001-11-09 Fatih Demir <kabalak@gtranslator.org>
+
+ * configure.in: Added "ms" to the languages list.
+
+2001-11-08 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: add gconf stuff.
+
+2001-11-05 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: pull in gnome-vfs-module-2.0 for
+ gnome-desktop-item.
+
+2001-10-25 Joe Shaw <joe@ximian.com>
+
+ * configure.in: Remove the bonobo-conf dependency.
+
+2001-10-24 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: add maximum compile warnings.
+
+2001-10-20 Seth Nickell <snickell@stanford.edu>
+
+ * configure.in:
+
+ Invoke INTLTOOL since we use INTLTOOL_SERVER_RULE
+ for the Panel's .server file.
+
+2001-10-20 Seth Nickell <snickell@stanford.edu>
+
+ * configure.in:
+
+ Fetch the IDL flags for Bonobo Activation for use
+ with orbit-idl2 on GNOME_Panel.idl.
+
+ * panel/main.c:
+
+ Remove inclusion of "panel-unique-factory.h" which
+ Jacob probably forgot to cvs add. Fixes the build.
+
+2001-10-19 Mark McLoughlin <mark@skynet.ie>
+
+ * Makefile.am, configure.in, pixmaps/Makefile.am:
+ install pixmaps again. Don't install tiles, though.
+
+2001-10-13 Seth Nickell <snickell@stanford.edu>
+
+ * configure.in:
+
+ And actually generate gnome-about/Makefile so there's
+ something for make to do when it reaches gnome-about ;-)
+
+2001-10-12 Alex Larsson <alexl@redhat.com>
+
+ * configure.in:
+ Added GNOME_ABOUT_CFLAGS/LIBS.
+
+ * Makefile.am:
+ build gnome-about
+
+2001-10-05 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: removed lots of unused cruft.
+
+ * gnome-terminal/Makefile.am, gsm/Makefile.am,
+ panel/Makefile.am: cleaned up generated file handling.
+
+2001-09-27 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: add -lm to libpng check for non-glibc systems.
+
+2001-09-20 Wang Jian <lark@linux.net.cn>
+
+ * configure.in(ALL_LINGUAS): Renamed zh_CN.GB2312 to zh_CN.
+
+2001-09-14 jacob berkman <jacob@ximian.com>
+
+ * configure.in: look for libglade-convert, and error out if it
+ isn't present
+
+2001-09-12 jacob berkman <jacob@ximian.com>
+
+ * configure.in:
+ * Makefile.am (SUBDIRS): build gsm/ and smproxy/
+
+2001-09-04 Abel Cheung <maddog@linux.org.hk>
+
+ * (recursive)*.desktop, *.directory, *.soundlist, *.hint: Rename zh_TW.Big5 to zh_TW .
+
+2001-09-01 Darin Adler <darin@bentspoon.com>
+
+ * Makefile.am:
+ * configure.in:
+ Don't bother with intl directory.
+
+2001-08-30 jacob berkman <jacob@ximian.com>
+
+ * Makefile.am (SUBDIRS):
+ * configure.in: build gnome-terminal
+ : update things to not need gnome1-compat - at least until the
+ libgnome* thing is more stabilized
+ : check if libgnomeui was linked against -lSM (for gnome-session,
+ which i won't be comimtting yet)
+
+2001-08-22 Abel Cheung <maddog@linux.org.hk>
+
+ * configure.in (ALL_LINGUAS): zh_TW.Big5 -> zh_TW .
+
+2001-08-18 Martin Baulig <baulig@suse.de>
+
+ * configure.in (MAINT): Define and AC_SUBST this.
+
+2001-08-17 Martin Baulig <baulig@suse.de>
+
+ * configure.in (GNOME_DESKTOP): Require bonobo-config.
+
+2001-08-09 Martin Baulig <baulig@suse.de>
+
+ * configure.in (PANEL): Require libgnome1-compat.
+
+2001-08-06 Gregory Leblanc <gleblanc@linuxweasel.com>
+
+ * gnome-core.spec.in: a few tiny updates, preparing for a
+ flamewar, err, discussion, about this strategy.
+
+2001-08-06 Martin Baulig <baulig@suse.de>
+
+ * configure.in (GNOME_DESKTOP): Added pkg-config checks for the
+ gnome-desktop directory.
+
+2001-08-06 Martin Baulig <baulig@suse.de>
+
+ * configure.in, autogen.sh: Updated for the GNOME 2 platform.
+
+ * Makefile.am: Disabled all subdirs except idl, gnome-ditem and panel.
+
+2001-08-06 Martin Baulig <baulig@suse.de>
+
+ * gnome-desktop/: New directory. This is the ditem code which was
+ in libgnome/monikers and libgnome/libgnome/gnome-ditem.[ch].
+
+2001-08-06 Martin Baulig <baulig@suse.de>
+
+ gnome-core has been branched for GNOME 1.4 - please use the gnome-core-1-4
+ branch for GNOME 1.4 - the HEAD is for GNOME 2.0.
+
+ If you have a checked out copy of gnome-core, do a
+
+ cvs update -r gnome-core-1-4
+
+ To check out the gnome-core-1-4 branch, do a
+
+ cvs co -r gnome-core-1-4 gnome-core
+
+ * README.STABLE_BRANCH: Updated to point to gnome-core-1.4.
+
+2001-07-31 Malcolm Tredinnick <malcolm@commsecure.com.au>
+
+ * applets/gen_util/help/es/printer/figures/*:
+ * applets/gen_util/help/es/printer/printer.sgml: moved PNG
+ files here from the parent directory for consistency with other
+ doc dirs. Changed sgml file to use the right images.
+ * applets/gen_util/help/es/mailcheck/figures/mailcheck-applet.png:
+ Added. Required to make build work (and no translation required).
+ * help-browser/help/es/Makefile.am, default-page.html: use the
+ gnome foot image from the 'C' subdir. No need to put a copy in
+ each translation dir.
+ * app-docs.am.template, app-docs.make, applet-docs.make, Makefile.am:
+ Remove these old ways of buiding docs. They have been obsoleted by
+ sgmldocs.make.
+ * Updated various .cvsignore files to ignore generated
+ documentation related files.
+
+
+2001-07-29 Manuel de Vega Barreiro <mbarreiro@red.madritel.es>
+
+ Some Spanish translation updates and bug fixes
+ * */help/es/*
+ * configure.in
+
+2001-07-28 Dan Mueth <d-mueth@uchicago.edu>
+
+ Updating doc build stuff to use jw on RH 7.1 and any other dist which
+ has moved to docbook-utils.
+
+ * configure.in:
+ * sgmldocs.make:
+
+2001-07-28 Dan Mueth <d-mueth@uchicago.edu>
+
+ Moving a couple screenshots and removing one from a Makefile
+ which doesn't actually exist so that make dist will work.
+
+ * applets/gen_util/help/es/mailcheck/Makefile.am:
+ * applets/gen_util/help/es/mailcheck/figures/mailcheck-properties-m
+ ailbox.png:
+ * applets/gen_util/help/es/mailcheck/figures/mailcheck-properties-m
+ ailcheck.png:
+ * applets/gen_util/help/es/mailcheck/mailcheck-properties-mailbox.p
+ ng:
+ * applets/gen_util/help/es/mailcheck/mailcheck-properties-mailcheck
+ .png:
+
+2001-07-15 Manuel de Vega Barreiro <mbarreiro@red.madritel.es>
+
+ New Sanish translation.
+ * applets/tasklist/help/es/*
+ * applets/tasklist/help/Makefile.am
+ * configure.in
+
+2001-07-05 Manuel de Vega Barreiro <mbarreiro@red.madritel.es>
+
+ * panel/help: New Sanish translation.
+ * configure.in: add panel/help/es/Makefile
+
+2001-07-06 Marius Andreiana <mandreiana@yahoo.com>
+
+ * gnome-about/contributors.h: Added myself (with Dan's blessing)
+
+2001-06-23 Manuel de Vega Barreiro <mbarreiro@red.madritel.es>
+
+ * confifure.in : Included es for mailcheck
+ * applets/gen_util/help/Makefile.am: Included es for mailcheck
+ Spanish Translation.
+ * applets/gen_util/help/es/mailcheck: Spanish Translation
+
+Tue Jun 05 02:21:42 2001 George Lebl <jirka@5z.com>
+
+ * configure.in, acconfig.h: Optionally check for gnome-print (we
+ already sort of did). If found we'll compile the print code
+ in the screenshooter thinige in the panel.
+
+Wed May 30 22:53:47 2001 George Lebl <jirka@5z.com>
+
+ * configure.in: check for libpng (PNG_LIBS) and setup GLADE_LIBS/CFLAGS
+
+Wed May 30 04:09:10 2001 George Lebl <jirka@5z.com>
+
+ * configure.in, gnome-core.spec.in: By the fact that no one yelled
+ when I forgot to commit this it seems not many people actually
+ build gnome-core HEAD :) This adds the config dir in the panel
+ makefile
+
+2001-05-27 Stanislav Brabec <utx@penguin.cz>
+
+ * applets/*/*.directory, */*/*.desktop, */*/*/*.desktop,
+ */*/*/*.soundlist: Updated from 1-2 branch and completed
+ Czech. Alphabetical resort of languages, removed duplicated
+ translations.
+
+Sat May 19 16:54:24 2001 George Lebl <jirka@5z.com>
+
+ * configure.in, acconfig.h: add xinerama check (if it ain't installed,
+ nothing happens) and niceify the help output
+
+2001-05-15 Jacob "Ulysses" Berkman <jacob@helixcode.com>
+
+ * configure.in: disable libice check since it's probably
+ unnecessary
+
+2001-05-04 Dan Mueth <dan@eazel.com>
+
+ Fixed URL for help document. Before it was broken because it
+ used "launcher.html" instead of "launchers.html".
+
+ * panel/launcher.c: (window_clicked):
+
+2001-04-26 Dan Mueth <dan@eazel.com>
+
+ Adding a few contributors who were missing.
+
+ * gnome-about/contributors.h:
+
+2001-04-19 Dan Mueth <dan@eazel.com>
+
+ Adding Sasha's doc, "Reporting GNOME bugs and other feedback"
+ Alexander Kirillov <kirillov@math.sunysb.edu>
+
+ * configure.in:
+ * core-docs/Makefile.am:
+ * core-docs/gnome-feedback/C/Makefile.am:
+ * core-docs/gnome-feedback/C/gnome-feedback-C.omf:
+ * core-docs/gnome-feedback/C/gnome-feedback.sgml:
+ * core-docs/gnome-feedback/Makefile.am:
+
+2001-04-18 Stanislav Brabec <utx@penguin.cz>
+
+ * configure.in, acconfig.h: Added test for
+ zvt_term_set_del_is_del. Needed for gnome-terminal del_is_del
+ support.
+
+2001-04-03 Christopher R. Gabriel <cgabriel@softwarelibero.org>
+
+ * configure.in (AC_OUTPUT): added italian documentation for fish
+ and desk-guide.
+
+2001-04-02 Gregory Leblanc <gleblanc@cu-portland.edu>
+
+ * gnome-core.spec.in: Fixed %files section to include some
+ directories as well as their contents.
+ Updated to do the scrollkeeper ditty.
+
+2001-03-28 Gregory Leblanc <gleblanc@cu-portland.edu>
+
+ Reviewed by: George Lebl <jirka@5z.com>
+
+ * configure.in: updates to make dependancy tracking easier
+ * gnome-core.spec.in: dependancy tracking updates, huge cleanup,
+ complete re-write of the %files section. See enclosed changelog
+ for details.
+
+2001-03-28 Dan Mueth <dan@eazel.com>
+
+ Linking GNOME hint capplet to doc
+
+ * gnome-hint/gnome-hint-properties.c: (help):
+
+2001-03-26 Darin Adler <darin@eazel.com>
+
+ * omf-install/.cvsignore: Quick fix to ignore .omf files.
+
+2001-03-25 Dan Mueth <dan@eazel.com>
+
+ Updated index page for gnome-help-browser to point to current
+ GNOME User's Guide.
+
+ * help-browser/help/C/default-page.html:
+ * help-browser/help/ca/default-page.html:
+ * help-browser/help/da/default-page.html:
+ * help-browser/help/de/default-page.html:
+ * help-browser/help/el/default-page.html:
+ * help-browser/help/es/default-page.html:
+ * help-browser/help/et/default-page.html:
+ * help-browser/help/fr/default-page.html:
+ * help-browser/help/gl/default-page.html:
+ * help-browser/help/hu/default-page.html:
+ * help-browser/help/it/default-page.html:
+ * help-browser/help/ja/default-page.html:
+ * help-browser/help/ko/default-page.html:
+ * help-browser/help/lt/default-page.html:
+ * help-browser/help/no/default-page.html:
+ * help-browser/help/uk/default-page.html:
+ * help-browser/help/wa/default-page.html:
+
+2001-03-25 Jens Finke <jens@gnome.org>
+
+ * gnome.spec.in: Include gnome-terminal datadir stuff. Make use
+ of rpm macros.
+
+2001-03-23 Yukihiro Nakai <nakai@gnome.gr.jp>
+
+ * configure.in: Generate Makefile of Japanese gsm help.
+
+2001-03-23 Dan Mueth <dan@eazel.com>
+
+ Fixed error in metadata, placing it in the wrong locale.
+
+ * panel/help/ja/panel-ja.omf:
+
+2001-03-22 Dan Mueth <dan@eazel.com>
+
+ A couple bug fixes from the previous huge commit.
+
+ * applets/desk-guide/help/C/Makefile.am:
+ * applets/desk-guide/help/de/Makefile.am:
+
+2001-03-22 Dan Mueth <dan@eazel.com>
+
+ Updating doc build stuff to use sgmldocs.make. Making sure
+ screenshots are in figures directory. A few other small
+ doc fixes.
+
+ * applets/desk-guide/help/C/Makefile.am:
+ * applets/desk-guide/help/C/desk-guide.sgml:
+ * applets/desk-guide/help/C/deskguide-fig.png:
+ * applets/desk-guide/help/C/deskguide-properties-advanced-fig.png:
+ * applets/desk-guide/help/C/deskguide-properties-geometry-fig.png:
+ * applets/desk-guide/help/C/deskguide-properties-tasks-fig.png:
+ * applets/desk-guide/help/C/deskguide-properties.png:
+ * applets/desk-guide/help/C/deskguide-tasklist-fig.png:
+ * applets/desk-guide/help/C/figures/deskguide-fig.png:
+ * applets/desk-guide/help/C/figures/deskguide-properties-advanced-f
+ ig.png:
+ * applets/desk-guide/help/C/figures/deskguide-properties-geometry-f
+ ig.png:
+ * applets/desk-guide/help/C/figures/deskguide-properties-tasks-fig.
+ png:
+ * applets/desk-guide/help/C/figures/deskguide-properties.png:
+ * applets/desk-guide/help/C/figures/deskguide-tasklist-fig.png:
+ * applets/desk-guide/help/de/Makefile.am:
+ * applets/desk-guide/help/de/desk-guide.sgml:
+ * applets/desk-guide/help/de/deskguide-fig.png:
+ * applets/desk-guide/help/de/deskguide-properties-advanced-fig.png:
+ * applets/desk-guide/help/de/deskguide-properties-geometry-fig.png:
+ * applets/desk-guide/help/de/deskguide-properties-tasks-fig.png:
+ * applets/desk-guide/help/de/deskguide-properties.png:
+ * applets/desk-guide/help/de/deskguide-tasklist-fig.png:
+ * applets/desk-guide/help/de/figures/deskguide-fig.png:
+ * applets/desk-guide/help/de/figures/deskguide-properties-advanced-
+ fig.png:
+ * applets/desk-guide/help/de/figures/deskguide-properties-geometry-
+ fig.png:
+ * applets/desk-guide/help/de/figures/deskguide-properties-tasks-fig
+ .png:
+ * applets/desk-guide/help/de/figures/deskguide-properties.png:
+ * applets/desk-guide/help/de/figures/deskguide-tasklist-fig.png:
+ * applets/desk-guide/help/es/Makefile.am:
+ * applets/desk-guide/help/es/desk-guide.sgml:
+ * applets/desk-guide/help/es/desk-guide_applet-es.omf:
+ * applets/desk-guide/help/es/figures/deskguide-fig.png:
+ * applets/desk-guide/help/es/figures/deskguide-properties-advanced-
+ fig.png:
+ * applets/desk-guide/help/es/figures/deskguide-properties-geometry-
+ fig.png:
+ * applets/desk-guide/help/es/figures/deskguide-properties-tasks-fig
+ .png:
+ * applets/desk-guide/help/es/figures/deskguide-properties.png:
+ * applets/desk-guide/help/es/figures/deskguide-tasklist-fig.png:
+ * applets/fish/help/C/Makefile.am:
+ * applets/fish/help/C/figures/fish_applet.png:
+ * applets/fish/help/C/figures/fish_settings.png:
+ * applets/fish/help/C/fish.sgml:
+ * applets/fish/help/C/fish_applet.png:
+ * applets/fish/help/C/fish_settings.png:
+ * applets/fish/help/da/Makefile.am:
+ * applets/fish/help/da/figures/fish_applet.png:
+ * applets/fish/help/da/figures/fish_settings.png:
+ * applets/fish/help/da/fish.sgml:
+ * applets/fish/help/da/fish_applet.png:
+ * applets/fish/help/da/fish_settings.png:
+ * applets/fish/help/no/Makefile.am:
+ * applets/fish/help/no/figures/fish_applet.png:
+ * applets/fish/help/no/figures/fish_settings.png:
+ * applets/fish/help/no/fish.sgml:
+ * applets/fish/help/no/fish_applet.png:
+ * applets/fish/help/no/fish_settings.png:
+ * applets/gen_util/help/C/clock/Makefile.am:
+ * applets/gen_util/help/C/clock/clock.sgml:
+ * applets/gen_util/help/C/clock/clock_applet.png:
+ * applets/gen_util/help/C/clock/clock_settings.png:
+ * applets/gen_util/help/C/clock/figures/clock_applet.png:
+ * applets/gen_util/help/C/clock/figures/clock_settings.png:
+ * applets/gen_util/help/C/mailcheck/Makefile.am:
+ * applets/gen_util/help/C/mailcheck/figures/mailcheck-applet.png:
+ * applets/gen_util/help/C/mailcheck/figures/mailcheck-properties-ma
+ ilbox.png:
+ * applets/gen_util/help/C/mailcheck/figures/mailcheck-properties-ma
+ ilcheck.png:
+ * applets/gen_util/help/C/mailcheck/mailcheck-applet.png:
+ * applets/gen_util/help/C/mailcheck/mailcheck-properties-mailbox.pn
+ g:
+ * applets/gen_util/help/C/mailcheck/mailcheck-properties-mailcheck.
+ png:
+ * applets/gen_util/help/C/mailcheck/mailcheck.sgml:
+ * applets/gen_util/help/C/printer/Makefile.am:
+ * applets/gen_util/help/C/printer/figures/printer-fig.png:
+ * applets/gen_util/help/C/printer/figures/printer-properties.png:
+ * applets/gen_util/help/C/printer/printer-fig.png:
+ * applets/gen_util/help/C/printer/printer-properties.png:
+ * applets/gen_util/help/C/printer/printer.sgml:
+ * applets/gen_util/help/da/clock/Makefile.am:
+ * applets/gen_util/help/da/clock/clock.sgml:
+ * applets/gen_util/help/da/clock/clock_applet.png:
+ * applets/gen_util/help/da/clock/clock_settings.png:
+ * applets/gen_util/help/da/clock/figures/clock_applet.png:
+ * applets/gen_util/help/da/clock/figures/clock_settings.png:
+ * applets/gen_util/help/da/mailcheck/Makefile.am:
+ * applets/gen_util/help/da/mailcheck/figures/mailcheck-applet.png:
+ * applets/gen_util/help/da/mailcheck/figures/mailcheck-properties-m
+ ailbox.png:
+ * applets/gen_util/help/da/mailcheck/figures/mailcheck-properties-m
+ ailcheck.png:
+ * applets/gen_util/help/da/mailcheck/mailcheck-applet.png:
+ * applets/gen_util/help/da/mailcheck/mailcheck-properties-mailbox.p
+ ng:
+ * applets/gen_util/help/da/mailcheck/mailcheck-properties-mailcheck
+ .png:
+ * applets/gen_util/help/da/mailcheck/mailcheck.sgml:
+ * applets/gen_util/help/da/printer/Makefile.am:
+ * applets/gen_util/help/da/printer/figures/printer-fig.png:
+ * applets/gen_util/help/da/printer/figures/printer-properties.png:
+ * applets/gen_util/help/da/printer/printer-fig.png:
+ * applets/gen_util/help/da/printer/printer-properties.png:
+ * applets/gen_util/help/da/printer/printer.sgml:
+ * applets/tasklist/help/C/Makefile.am:
+ * applets/tasklist/help/C/figures/tasklist-fig.png:
+ * applets/tasklist/help/C/figures/tasklist-properties-size.png:
+ * applets/tasklist/help/C/figures/tasklist-properties.png:
+ * applets/tasklist/help/C/figures/tasklist-rightclick-fig.png:
+ * applets/tasklist/help/C/tasklist-fig.png:
+ * applets/tasklist/help/C/tasklist-properties-size.png:
+ * applets/tasklist/help/C/tasklist-properties.png:
+ * applets/tasklist/help/C/tasklist-rightclick-fig.png:
+ * applets/tasklist/help/C/tasklist.sgml:
+ * core-docs/fdl/C/Makefile.am:
+ * core-docs/gpl/C/Makefile.am:
+ * core-docs/lgpl/C/Makefile.am:
+ * gnome-terminal/C/Makefile.am:
+ * gnome-terminal/da/gnome-terminal.sgml:
+ * gnome-terminal/de/Makefile.am:
+ * gnome-terminal/es/Makefile.am:
+ * gsm/help/C/Makefile.am:
+ * gsm/help/C/button_remove.png:
+ * gsm/help/C/figures/button_remove.png:
+ * gsm/help/C/figures/session-properties.png:
+ * gsm/help/C/figures/stock_exec.png:
+ * gsm/help/C/figures/stock_help.png:
+ * gsm/help/C/figures/stock_preferences.png:
+ * gsm/help/C/figures/stock_refresh.png:
+ * gsm/help/C/figures/stock_save.png:
+ * gsm/help/C/figures/stock_timer.png:
+ * gsm/help/C/figures/stock_trash.png:
+ * gsm/help/C/session-properties.png:
+ * gsm/help/C/session.sgml:
+ * gsm/help/C/stock_exec.png:
+ * gsm/help/C/stock_help.png:
+ * gsm/help/C/stock_preferences.png:
+ * gsm/help/C/stock_refresh.png:
+ * gsm/help/C/stock_save.png:
+ * gsm/help/C/stock_timer.png:
+ * gsm/help/C/stock_trash.png:
+ * panel/help/C/Makefile.am:
+ * panel/help/de/Makefile.am:
+ * panel/help/it/Makefile.am:
+ * panel/help/ja/Makefile.am:
+ * panel/help/no/Makefile.am:
+
+2001-03-20 Dan Mueth <dan@eazel.com>
+
+ Update some of the build stuff to the latest state of
+ OMF/SK system. Plus, added ScrollKeeper stuff into configure.in
+ and added sgmldocs.make so we can start using that to stay
+ uniform with other packages.
+
+ * Makefile.am:
+ * configure.in:
+ * omf-install/Makefile.am:
+ * sgmldocs.make:
+
+2001-03-09 Kjartan Maraas <kmaraas@gnome.org>
+
+ * configure.in: Generate Makefile for the japanese panel docs.
+
+2001-03-07 jacob berkman <jacob@ximian.com>
+
+ * pixmaps: use some of tigert's nice icons
+
+Tue Mar 06 18:36:33 2001 George Lebl <jirka@5z.com>
+
+ * configure.in, acconfig.h: Add a with argument for the KDE
+ documentation path
+
+2001-03-02 Christian Schaller <Uraeus@linuxrising.org>
+ * Norwegian Nynorsk translation
+
+2001-02-28 Martin Baulig <baulig@suse.de>
+
+ * configure.in (configure.in): Added applets/gen_util/help/es.
+
+Tue Feb 27 02:15:15 2001 George Lebl <jirka@5z.com>
+
+ * configure.in: give a useful message when the canvas gdkpixbuf
+ thingie isn't found
+
+2001-02-26 Dan Mueth <dan@eazel.com>
+
+ Include FDL as required by the FDL, and l10n of categories for
+ OMF metadata.
+
+ * COPYING-DOCS: Added this file - the FDL
+ * Makefile.am: Include COPYING-DOCS
+ * applets/fish/help/no/fish_applet-no.omf: l10n of category
+ * applets/gen_util/help/no/gen_util_applet-no.omf: l10n of category
+
+2001-02-25 Gediminas Paulauskas <menesis@delfi.lt>
+
+ * configure.in: don't create grdb Makefiles.
+
+2001-02-19 Dan Mueth <dan@eazel.com>
+
+ * Localized categories in OMF metadata for:
+ applets/fish/help/da/fish_applet-da.omf
+ applets/gen_util/help/da/clock/clock_applet-da.omf
+ applets/gen_util/help/da/mailcheck/mailcheck_applet-da.omf
+ applets/gen_util/help/da/printer/printer_applet-da.omf
+ gnome-terminal/es/gnome-termainal-es.omf
+
+Sat Feb 17 23:28:01 2001 George Lebl <jirka@5z.com>
+
+ * gnome-core.spec.in: update so that /var/lib files are installed
+ properly
+
+2001-02-15 Dan Mueth <dan@eazel.com>
+
+ * omf-install/Makefile.am: Changed to install under
+ $(datadir)/omf/ instead of $(prefix)/doc/omf because
+ this is The Right Way, and scrollkeeper was recently fixed
+ to work this way.
+
+2001-02-14 Christophe Merlet <redfox@eikonex.org>
+
+ * */*.desktop: Updated French translations.
+
+2001-02-13 Dan Mueth <dan@eazel.com>
+
+ * core-docs/lgpl/C/lgpl.sgml: Added a </para> to make it
+ validate with nsgmls and produce a valid TOC. Now it has
+ an extra <para> somewhere, which is lame, but at least
+ it validates and makes a good TOC. Finding the extra
+ <para> and removing it is left as an excercise for the reader.
+
+ * applet-docs.make: Less broken OMF bits than before
+
+2001-02-13 Dan Mueth <dan@eazel.com>
+
+ * app-docs.make: Fixed(TM)
+ * applet-docs.make: Fixed(TM)
+
+2001-02-13 Dan Mueth <dan@eazel.com>
+
+ * applet-docs.make: fixing previous non-fix
+ * app-docs.make: fixing previous non-fix
+
+2001-02-13 Dan Mueth <dan@eazel.com>
+
+ * OMF files: Updated to new category list in scrollkeeper-0.0.6
+
+2001-02-12 Dan Mueth <dan@eazel.com>
+
+ * applet-docs.make: Fixed to do directories without OMF files
+ correctly.
+
+2001-02-12 Dan Mueth <dan@eazel.com>
+
+ * app-docs.make: Fixed to do directories without OMF files
+ correctly.
+
+2001-02-08 Kjartan Maraas <kmaraas@gnome.org>
+
+ * configure.in: Added Norwegian (nynorsk) to ALL_LINGUAS.
+
+2001-02-06 Dan Mueth <dan@eazel.com>
+
+ * Commented out the OMF files for 3 translations of gnome-terminal
+ because the SGML is broken, preventing TOC extraction
+
+2001-02-06 Dan Mueth <dan@eazel.com>
+
+ * Modified Makefile.am's to register the new OMF files
+ * Added many OMF files:
+ applets/desk-guide/help/C/desk-guide_applet-C.omf
+ applets/desk-guide/help/de/desk-guide_applet-de.omf
+ applets/fish/help/C/fish_applet-C.omf
+ applets/fish/help/da/fish_applet-da.omf
+ applets/fish/help/no/fish_applet-no.omf
+ applets/gen_util/help/C/clock/clock_applet-C.omf
+ applets/gen_util/help/C/mailcheck/mailcheck_applet-C.omf
+ applets/gen_util/help/C/printer/printer_applet-C.omf
+ applets/gen_util/help/da/clock/clock_applet-da.omf
+ applets/gen_util/help/da/mailcheck/mailcheck_applet-da.omf
+ applets/gen_util/help/da/printer/printer_applet-da.omf
+ applets/gen_util/help/de/clock-de.omf
+ applets/gen_util/help/de/gen_util_applet-de.omf
+ applets/gen_util/help/de/mailcheck-de.omf
+ applets/gen_util/help/no/mailcheck-no.omf
+ applets/gen_util/help/no/gen_util_applet-no.omf
+ applets/tasklist/help/C/tasklist_applet-C.omf
+ core-docs/fdl/C/fdl-C.omf
+ core-docs/gpl/C/gpl-C.omf
+ core-docs/lgpl/C/lgpl-C.omf
+ gnome-terminal/C/gnome-terminal-C.omf
+ gnome-terminal/da/gnome-terminal-da.omf
+ gnome-terminal/de/gnome-terminal-de.omf
+ gnome-terminal/es/gnome-terminal-es.omf
+ gnome-terminal/it/gnome-terminal-it.omf
+ gnome-terminal/no/gnome-terminal-no.omf
+ gsm/help/C/session-C.omf
+ panel/help/C/panel-C.omf
+ panel/help/de/panel-de.omf
+ panel/help/it/panel-it.omf
+ panel/help/no/panel-no.omf
+
+
+2001-02-06 Dan Mueth <dan@eazel.com>
+
+ * po/POTFILES.in: Removed lines for mini-commander. It seems that
+ mini-commander is now in gnome-applets, so having these two lines
+ was breaking the build.
+
+2001-02-06 Dan Mueth <dan@eazel.com>
+
+ (initial setup of SK - just doing for Panel Manual for now)
+ * omf-install/: created this directory
+ * omf-install/Makefile.am: new
+ * app-docs.make: updated for scrollkeeper(SK)
+ * applet-docs.make: updated for scrollkeeper(SK)
+ * configure.in: updated for scrollkeeper(SK)
+ * Makefile.am: updated for scrollkeeper(SK)
+ * panel/help/C/panel-C.omf: added
+ * panel/help/C/Makefile.am: updated for SK
+
+2001-02-05 Eric Baudais <baudais@okstate.edu>
+
+ * configure.in: Added core-docs/lgpl/Makefile and
+ core-docs/lgpl/C/Makefile to AC_OUPUT.
+
+2001-02-04 jacob berkman <jacob@ximian.com>
+
+ * Makefile.am:
+ * configure.in:
+ * grdb: remove grdb
+
+Sat Feb 03 19:36:34 2001 George Lebl <jirka@5z.com>
+
+ * Makefile.am: Cleanup some OOOOOOOLD cruft
+
+ * configure.in, Makefile.am, po/POTFILES.in, grdb/**/*:
+ Integrate grdb. The author fell of the face of the planet and
+ didn't integrate it as was planned apparently, so here it goes,
+ still needs to get called from gsm, and either control-center
+ or something else monitoring theme changes
+
+Wed Jan 31 20:36:25 2001 George Lebl <jirka@5z.com>
+
+ * configure.in: s/Gnumeric/gnome-core/ fix some cut'n'paste fun
+
+2001-01-26 Marius Andreiana <mandreiana@yahoo.com>
+
+ * configure.in: Added ro (Romanian) to ALL_LINGUAS.
+
+2001-01-18 Gregory Leblanc <gleblanc@cu-portland.edu>
+
+ * applets/desk-guide/help/C/desk-guide.sgml:
+ * applets/desk-guide/help/de/desk-guide.sgml:
+ * applets/fish/help/C/fish.sgml:
+ * applets/fish/help/da/fish.sgml:
+ * applets/fish/help/da/fish_applet.sgml:
+ * applets/fish/help/no/fish_applet.sgml:
+ * applets/gen_util/help/C/clock/clock.sgml:
+ * applets/gen_util/help/C/mailcheck/mailcheck.sgml:
+ * applets/gen_util/help/da/clock/clock.sgml:
+ * applets/gen_util/help/da/mailcheck/mailcheck.sgml:
+ * applets/gen_util/help/da/mailcheck/mailcheck_applet.sgml:
+ * applets/gen_util/help/da/printer/printer.sgml:
+ * applets/gen_util/help/da/printer/printer_applet.sgml:
+ * applets/gen_util/help/de/clock.sgml:
+ * applets/gen_util/help/de/gen_util_applet.sgml:
+ * applets/gen_util/help/de/mailcheck.sgml:
+ * applets/gen_util/help/no/gen_util_applet.sgml:
+ * applets/gen_util/help/no/mailcheck.sgml:
+ * applets/tasklist/help/C/tasklist.sgml:
+ * gnome-terminal/C/gnome-terminal.sgml:
+ * gnome-terminal/de/gnome-terminal.sgml:
+ * gnome-terminal/es/gnome-terminal.sgml:
+ * gsm/help/C/session.sgml:
+ * panel/help/C/panel.sgml:
+ * panel/help/de/panel.sgml:
+ * panel/help/it/panel.sgml:
+ * panel/help/no/panel.sgml: Final pass of nautilizing. I can't
+ wait for Alan to get back and help out with this some more.
+
+2001-01-11 Miguel de Icaza <miguel@ximian.com>
+
+ * configure.in: Add glade detection. Customize the gnome-terminal
+ ldflags/cflags to be perfect.
+
+Wed Jan 10 11:15:02 2001 George Lebl <jirka@5z.com>
+
+ * configure.in: Make sure GNOME_ICONDIR gets expand it to the
+ datadir corectly
+
+2000-12-11 Marius Andreiana <mandreiana@yahoo.com>
+
+ * *.desktop, *.directory: Added Romanian (ro) translations
+
+2000-12-08 John E. Gotts <jgotts@linuxsavvy.com>
+
+ * pixmaps/gnome-gnomoku.png: Extracted from Red Hat Linux 7.0.
+
+ * pixmaps/Makefile.am: Updated.
+
+2000-11-20 Dan Mueth <d-mueth@uchicago.edu>
+
+ * applet-docs.make: Have it install GIF's in stylesheet-images/
+ * app-docs.make: Have it install GIF's in stylesheet-images/
+ (I'm not sure why it is trying to install PNG's and leaving
+ out the GIF's which these normally are. However we need
+ this to work both for people who like their system to work
+ properly and also so that we can actually test that other
+ parts of the system and the help browser are not broken.)
+
+2000-11-10 Gregory Leblanc <gleblanc@cu-portland.edu>
+
+ * *.sgml: Updates to all docs for compliance with the doc
+ standards for GNOME 1.4
+
+2000-11-09 Yukihiro Nakai <nakai@gnome.gr.jp>
+
+ * *.desktop, *.directory: Add Slovak translation from
+ Stanislav Visnovsky.
+
+Mon Nov 6 13:08:18 2000 Jonathan Blandford <jrb@redhat.com>
+
+ * *-applet.sgml: Removed all these files, and renamed them to
+ _applet.sgml on the server.
+
+2000-11-06 Dan Mueth <d-mueth@uchicago.edu>
+
+ * Nautilus requires that the doc names match the directory names:
+ .../gnome/help/<appname>/<lang>/<appname>.sgml where one would
+ type "gnome-help:<appname>" in Nautilus. It is currently broken
+ for all applets, since we use
+ .../gnome/help/<name>_applet/<lang>/<name>-applet.sgml.
+ Thus, we have to change all <name>-applet.sgml to
+ <name>_applet.sgml.
+ * First, jrb is renaming the files as described above:
+ applets/gen_util/help/C/clock/clock-applet.sgml
+ applets/gen_util/help/da/clock/clock-applet.sgml
+ applets/desk-guide/help/C/desk-guide-applet.sgml
+ applets/desk-guide/help/de/desk-guide-applet.sgml
+ applets/fish/help/C/fish-applet.sgml
+ applets/fish/help/da/fish-applet.sgml
+ applets/fish/help/no/fish-applet.sgml
+ applets/gen_util/help/de/gen_util-applet.sgml
+ applets/gen_util/help/no/gen_util-applet.sgml
+ applets/gen_util/help/C/mailcheck/mailcheck-applet.sgml
+ applets/gen_util/help/da/mailcheck/mailcheck-applet.sgml
+ applets/gen_util/help/C/printer/printer-applet.sgml
+ applets/gen_util/help/da/printer/printer-applet.sgml
+ applets/tasklist/help/C/tasklist-applet.sgml
+ * applet-docs.make: Change all "-applet" to "_applet"
+
+2000-11-04 Dan Mueth <d-mueth@uchicago.edu>
+
+ * app-docs.make: Have it install $(app).sgml
+ * applet-docs.make: Fixed one bug. Have it install $(sgml_files).
+
+2000-11-03 Jacob "Ulysses" Berkman <jacob@helixcode.com>
+
+ * configure.in: do the libICE check only on Solaris
+
+2000-11-03 Jarkko Ranta <jjranta@cc.joensuu.fi>
+
+ * applets/fish/fish_applet.desktop
+ * applets/gen_util/mailcheck.soundlist
+ * desktop-links/GIMP.desktop
+ * desktop-links/gaspell.desktop
+ Finnish entries added or changed.
+
+2000-10-26 Robert Brady <robert@suse.co.uk>
+
+ * configure.in: Added ta (Tamil).
+
+2000-10-21 Dan Mueth <d-mueth@uchicago.edu>
+
+ * Reactivating core-docs with FSF licenses in it
+
+2000-09-26 Jacob Berkman <jacob@helixcode.com>
+
+ * core-docs/:
+ * gemvt/: remove these obsolete directories
+
+2000-09-25 Christophe Merlet <christophe@merlet.net>
+
+ * applets/applet-dirs/*,desktop-links/*,gnome-hint/*.desktop,
+ panel/g*.desktop: added various French strings
+
+2000-09-03 Matt Wilson <msw@redhat.com>
+
+ * acconfig.h: added HAVE_LIBBZ2_1_0, set to 1 if 1.0 is present
+
+ * configure.in (BZ_LIBS): add check for bzip2-1.0 library
+
+Sun Sep 03 06:31:46 2000 George Lebl <jirka@5z.com>
+
+ * configure.in: Add an explicit check for capplet module (finally)
+
+2000-08-30 Pablo Saratxaga <pablo@mandrakesoft.com>
+
+ * applets/applet-dirs/*,desktop-links/*: added various Greek strings
+
+2000-06-17 Pablo Saratxaga <pablo@mandrakesoft.com>
+
+ * configure.in,po/sp.po,po/sr.po: Added Serbian language files
+ (Cyrillic (sp) and Latin2 (sr))
+
+2000-05-25 Pauli Virtanen <pauli.virtanen@saunalahti.fi>
+
+ * Finnish update on files:
+ applets/desk-guide/deskguide_applet.desktop
+ applets/fish/fish_applet.desktop
+ applets/gen_util/mailcheck_applet.desktop
+ applets/gen_util/clock_applet.desktop
+ applets/gen_util/printer.desktop
+ applets/tasklist/tasklist_applet.desktop
+ applets/applet-dirs/Amusements.directory
+ applets/applet-dirs/Clocks.directory
+ applets/applet-dirs/Monitors.directory
+ applets/applet-dirs/Multimedia.directory
+ applets/applet-dirs/Network.directory
+ applets/applet-dirs/Utility.directory
+ desktop-links/Emacs.desktop
+ desktop-links/Eterm.desktop
+ desktop-links/GIMP.desktop
+ desktop-links/Gmc.desktop
+ desktop-links/Imlib_config.desktop
+ desktop-links/Kterm.desktop
+ desktop-links/Netscape.desktop
+ desktop-links/XMcd.desktop
+ desktop-links/Tkrat.desktop
+ desktop-links/UNIX-regular.desktop
+ desktop-links/UNIX.desktop
+ desktop-links/Vim.desktop
+ desktop-links/Vnterm.desktop
+ desktop-links/FileRunner.desktop
+ desktop-links/GXanim.desktop
+ desktop-links/TkSETI.desktop
+ desktop-links/WordPerfect.desktop
+ desktop-links/XEphem.desktop
+ desktop-links/Xemacs.desktop
+ desktop-links/gaspell.desktop
+ desktop-links/lynx.desktop
+ desktop-links/realplayer.desktop
+ desktop-links/rxvt.desktop
+ desktop-links/xbmbrowser.desktop
+ desktop-links/xcolsel.desktop
+ desktop-links/xmix.desktop
+ desktop-links/xv.desktop
+ desktop-links/Applications.directory
+ desktop-links/Development.directory
+ desktop-links/Games.directory
+ desktop-links/Graphics.directory
+ desktop-links/Internet.directory
+ desktop-links/Multimedia.directory
+ desktop-links/Root.directory
+ desktop-links/Settings.directory
+ desktop-links/System.directory
+ desktop-links/Utilities.directory
+ gmenu/gmenu.desktop
+ gnome-hint/gnome-hint-properties.desktop
+ gnome-hint/gnome-hint.desktop
+ gnome-terminal/gnome-terminal.desktop
+ gsm/save-session.desktop
+ gsm/session.desktop
+ help-browser/gnome-help.desktop
+ panel/gnome-panel-properties.desktop
+
+
+2000-05-18 Pablo Saratxaga <pablo@mandrakesoft.com>
+
+ * panel/menu.c: small change to make the strings in authors[]
+ translatable
+ * gnome-about/contributors.h: use N_( ) to tag some names, so
+ they can be "translated" for languages using the proper charsets
+ * gnome-about/gnome-about.c: corrected i18n support (the StarTrek-like
+ list of people is now displayed using a gdk_fontset instead of gdk_font
+ allowing for CJK displaying)
+
+2000-05-11 Miguel de Icaza <miguel@helixcode.com>
+
+ * configure.in (AC_OUTPUT): Add galician
+
+ * acconfig.h: Added HAVE_ICELISTENFORWELLKNOWNCONNECTIONS
+
+ * configure.in: Test for IceListenForWellKnownConnections
+
+2000-05-09 Dan Mueth <d-mueth@uchicago.edu>
+
+ * Fixing configure.in for da translation of gen_util applet
+ * Replacing C docs for gen_util which accidentally got written
+ over with translations.
+
+2000-05-09 Kenneth Christiansen <kenneth@gnome.org>
+
+ * desktop-links/*desktop: added some new desktop
+ files after talking to George.
+ * desktop-links/Makefile.am: added the new files
+
+ Andreas Hydn is now testing then, and will submit
+ changes if there are errors
+
+2000-05-04 Jacob Berkman <jacob@helixcode.com>
+
+ * misc stuff: support the icon stuff
+
+ * pixmaps/gnome-ccbackground.png: new tigert icon
+
+ * configure.in (LDFLAGS): check for new gnome-libs
+
+2000-04-24 Dan Mueth <d-mueth@uchicago.edu>
+
+ * panel.hints: Fixed typo that displayed an it hint for english users
+
+2000-04-23 Martin Baulig <baulig@suse.de>
+
+ * pixmaps/gnome-suse.png: Added SuSE logo.
+ * pixmaps/Makefile.am (BITMAPS): Added gnome-suse.png.
+
+2000-04-20 Jacob Berkman <jacob@helixcode.com>
+
+ * pixmaps/gnome-applications.png: "I hate hippies." -- Eric Cartman
+
+ * pixmaps/Makefile.am (BITMAPS): add gnome-interface.png
+
+ * app-docs.make (install-data-am): copy png's from the non-figures dir
+
+ * pixmaps/Makefile.am (BITMAPS): new applets and gmenu icons
+ by tigert
+ (BITMAPS): i wonder why gnome-session was never included
+
+ * gnome-core.spec.in (Requires): new gdk-pixbuf
+
+ * applet-docs.make (install-data-am):
+ * app-docs.make (install-data-am): copy the topic.dat
+
+ * configure.in: 1.1.9
+
+2000-04-20 Christopher R. Gabriel <cgabriel@linux.it>
+
+ * configure.in: added Makefile for italian docs
+
+2000-04-18 Karl EICHWALDER <ke@suse.de>
+
+ * configure.in: Check for GdkPixbuf library >= 0.7.0.
+
+2000-04-17 Eric Baudais <baudais@okstate.edu>
+
+ * configure.in: Added Makefiles for help docs.
+
+2000-04-16 Karl EICHWALDER <ke@suse.de>
+
+ * README: Add some requirements.
+
+Thu Apr 13 22:29:05 2000 George Lebl <jirka@5z.com>
+
+ * configure.in,gsm/Makefile.am,gsm/help/Makefile.am,
+ gsm/help/C/Makefile.am: add makefiles for help docs
+
+2000-04-11 Tuomas Kuosmanen <tigert@gimp.org>
+
+ * pixmaps/gnome-multimedia.png: WE ARE ICON ARTIST OF BORG.
+ THE MULTIMEDIA ICON MUST DIE. (new one)
+
+2000-04-04 Jacob Berkman <jacob@helixcode.com>
+
+ * pixmaps/Makefile.am (BITMAPS): revert last commit, no
+ patch was mailed to me
+
+2000-04-04 Matthias Warkus <mawa@iname.com>
+
+ * pixmaps/gnome-about-gnome.png: Added.
+
+ * pixmaps/Makefile.am: Updated.
+
+2000-04-04 Jacob Berkman <jacob@helixcode.com>
+
+ * pixmaps/Makefile.am (BITMAPS): rename emacs.png
+ to gnome-emacs.png since RH 6.2's emacs has its own
+ png
+
+2000-04-03 Jacob Berkman <jacob@helixcode.com>
+
+ * gnome-core.spec.in: pass --disable-gtkhtml-help to configure
+
+ * configure.in: add some checking for gtkhtml
+
+ * app-docs.make:
+ * applet-docs.make: some rules for doc building
+
+ * app-docs.am.template: template for apps with docs
+
+2000-03-30 Jacob Berkman <jacob@helixcode.com>
+
+ * pixmaps/Makefile.am (BITMAPS): add gnome-run.png
+
+2000-03-27 Jacob Berkman <jacob@helixcode.com>
+
+ * configure.in: pass 'capplet' to GNOME_INIT
+
+Sat Mar 04 18:35:59 2000 George Lebl <jirka@5z.com>
+
+ * **/*: applied patch from Pavel Cholakov <pavel@linux.home.bg> to
+ add bulgarian translations
+
+2000-02-28 Jacob Berkman <jacob@helixcode.com>
+
+ * pixmaps/Makefile.am (BITMAPS): add a couple of new pixmaps
+
+2000-02-26 Gregory McLean <gregm@comstar.net>
+
+ * New and improved (tm) spec file.
+
+2000-02-26 Matthias Warkus <mawa@iname.com>
+
+ * pixmaps/gnome-settings.png: Updated.
+
+2000-02-26 Christopher R. Gabriel <cgabriel@firenze.linux.it>
+
+ * configure.in: added gnome-terminal/it/Makefile for
+ italian translation of the Gnome Terminal User's Guide.
+
+2000-02-17 Cody Russell <bratsche@dfw.net>
+ * configure.in: Added CANVAS_PIXBUF_CFLAGS and CANVAS_PIXBUF_LIBS.
+
+2000-02-15 Jacob Berkman <jacob@helixcode.com>
+
+ * configure.in: generate some doc Makefiles
+
+ * configure.in:
+ * Makefile.am: don't make in core-docs and more
+
+2000-02-13 Matthias Warkus <mawa@iname.com>
+
+ * pixmaps/gnome-monitor.png: Improved.
+
+2000-02-12 Fatih Demir <kabalak@gmx.net>
+
+ * configure.in : Added tr to ALL_LINGUAS .
+
+2000-2-11 Tomasz Koczko <kloczek@pld.org.pl>
+ * desktop-links/balsa.desktop
+ * pixmaps/gnome-balsa2.png: moved to balsa module,
+
+2000-02-10 Matthias Warkus <mawa@iname.com>
+
+ * pixmaps/Makefile.am
+ * pixmaps/gnome-settings.png: Settings icon added.
+
+2000-02-03 Tuomas Kuosmanen <tigert@gimp.org>
+
+ * pixmaps/Makefile.am
+ * pixmaps/debian.png: added a logo for the debian menu in panel..
+
+2000-01-31 Yuan-Chung Cheng <platin@linux.org.tw>
+
+ * configure.in: Added "zh_CN.GB2312" to ALL_LINGUAS.
+
+2000-01-30 Timur I. Bakeyev <timur@gnu.org>
+
+ * configure.in: AM_GNU_GETTEXT changed to AM_GNOME_GETTEXT - that
+ makes proper substitution for INTLLIBS variable.
+
+2000-01-27 Jacob Berkman <jacob@helixcode.com>
+
+ * pixmaps/Makefile.am (BITMAPS): remove gnome-splash
+
+2000-01-27 Russell Steinthal <rms39@columbia.edu>
+
+ * configure.in: Add help-browser/help/uk/Makefile to AC_OUTPUT to
+ fix build
+
+2000-01-24 Jacob Berkman <jacob@helixcode.com>
+
+ * configure.in: 1.1.1 release
+
+2000-01-09 Matthias Warkus <mawa@iname.com>
+
+ * pixmaps/gnome-monitor.png: Slightly improved.
+
+ * pixmaps/gnome-favorites.png: Slightly improved.
+
+2000-01-05 Kjartan Maraas <kmaraas@online.no>
+
+ * TRANSLATABLE: Added a list of files containing translatable
+ strings.
+
+1999-12-23 Matthias Warkus <mawa@iname.com>
+
+ * pixmaps/gnome-applications.png: Added in all the appropriate places.
+
+ * pixmaps/gnome-multimedia.png: Added in all the appropriate places.
+
+1999-12-16 Tuomas Kuosmanen <tigert@gimp.org>
+
+ * pixmaps/gnome-graphics.png: I added a new version of the
+ graphics icon - I hope you like it. The paintbrush alone should
+ scale down better than the image of the whole artist palette.
+
+1999-12-12 Tuomas Kuosmanen <tigert@gimp.org>
+
+ * pixmaps/gnome-joystick.png: New joystick icon for games.. Also from
+ Anaconda..
+
+ * pixmaps/Makefile.am (BITMAPS)
+ * pixmaps/gnome-computer.png
+ * desktop-links/System.directory (Icon): new icon for "System" -menu
+ since the laptop was not too clear on the small size..
+ The icon is from Anaconda, the Redhat installer.
+
+1999-12-07 Birger Langkjer <birger.langkjer@image.dk>
+
+ * made pixmaps/vnterm.png from pixmaps/vnterm.xpm after
+ reading Gnome Icon Status Report #11. Didn't change Vnterm.desktop
+
+1999-12-04 Matthias Warkus <mawa@iname.com>
+
+ * pixmaps/gnome-devel.png: Added.
+ * desktop-links/Development.directory: Used here.
+
+1999-11-28 Matthias Warkus <mawa@iname.com>
+
+ * pixmaps/gnome-amusements.png: Added.
+
+1999-11-20 Jacob Berkman <jberkman@andrew.cmu.edu>
+
+ * configure.in: generate help-browser/help/el/Makefile
+
+1999-11-19 Pablo Saratxaga <pablo@mandrakesoft.com>
+
+ * */*.desktop: added Greek descriptions from
+ Simos Xenitellis <simos@hellug.gr> to the menu files
+
+1999-11-09 Matthias Warkus <mawa@iname.com>
+
+ * pixmaps/gnome-ee.png: Removed. This icon comes with EE, so no
+ reason to ship it with gnome-core. Besides, it kept on overwriting
+ the all-new shaped one.
+
+1999-11-05 Jacob Berkman <jberkman@andrew.cmu.edu>
+
+ * configure.in (ALL_LINGUAS): add uk dir
+
+1999-10-31 Tuomas Kuosmanen <tigert@gimp.org>
+
+ * pixmaps/emacs.png: Updated the emacs icon with a version by
+ Garrett LeSage <garrett@linux.com> which I subsequently edited a
+ bit to add the shadow - I also scaled it down a bit to fit better
+ in the panel buttons.
+
+1999-10-30 Jacob Berkman <jberkman@andrew.cmu.edu>
+
+ * gnome-core.spec.in: I guess specs don't like
+ emacs/cvs style changelog dates
+
+ * README.specfile: add this file
+
+ * gnome-core.spec.in: maybe this will work
+ updates and patch from Ned Rhudy <nrhudy@pabus.com>
+
+1999-10-23 Jacob Berkman <jberkman@andrew.cmu.edu>
+
+ * configure.in: make gnome-terminal/es/Makefile
+
+1999-10-22 Jacob Berkman <jberkman@andrew.cmu.edu>
+
+ * configure.in: bump to 1.1.0, added a warning message
+
+1999-10-21 Jacob Berkman <jberkman@andrew.cmu.edu>
+
+ * configure.in: added gl to ALL_LINGUAS
+
+ * core-docs/Makefile.am (EXTRA_DIST): don't dist these
+ docs any more
+
+ * core-docs/README: new file
+
+1999-10-19 Elliot Lee <sopwith@redhat.com>
+ * configure.in, acconfig.h: Check for TCP Wrappers
+ * gsm/ice.c,gsm/Makefile.am: Use TCP Wrappers if available.
+ Also set our own IceErrorHandler (to just close the connection).
+
+1999-10-16 Jacob Berkman <jberkman@andrew.cmu.edu>
+
+ * configure.in: bump version to 1.1.0-pre1
+
+1999-10-14 Matthias Warkus <mawa@iname.com>
+
+ * pixmaps/Makefile.am: added gnome-mailcheck.png
+
+1999-10-11 Elliot Lee <sopwith@redhat.com>
+ * configure.in: Revert gdk-pixbuf usage.
+
+Sun Oct 10 22:52:39 1999 George Lebl <jirka@5z.com>
+
+ * configure.in, panel/Makefile.am: check for gdk-pixbuf and
+ use it for panel
+
+1999-10-05 Jesus Bravo Alvarez <jba@pobox.com>
+
+ * configure.in: (ALL_LINGUAS) Added Galician (gl)
+
+1999-10-03 Matthias Warkus <mawa@iname.com>
+
+ * pixmaps/Makefile.am: added gnome-monitor.png
+
+1999-09-29 Jacob Berkman <jberkman@andrew.cmu.edu>
+
+ * pixmaps/Makefile.am (BITMAPS): add gnome-favorite.png
+
+1999-09-24 Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br>
+
+ * configure.in: add Brazilian Portuguese (pt_BR) to ALL_LINGUAS
+
+1999-09-22 Jacob Berkman <jberkman@andrew.cmu.edu>
+
+ * help-browser/help/ja/.cvsignore:
+ * help-browser/help/et/.cvsignore:
+ * help-browser/help/ca/.cvsignore:
+ * core-docs/gnome-intro/es/.cvsignore:
+ * core-docs/gnome-intro/it/.cvsignore:
+ * core-docs/gnome-intro/C/.cvsignore:
+ * core-docs/gnome-intro/.cvsignore: added files
+
+ * gnome-edit/.cvsignore: updated file
+
+1999-09-18 Jacob Berkman <jberkman@andrew.cmu.edu>
+
+ * pixmaps/Makefile.am (BITMAPS): add gnome-panel.png
+
+1999-09-12 Jacob Berkman <jberkman@andrew.cmu.edu>
+
+ * configure.in (LIBS): generate help-browser/help/et/Makefile
+
+1999-09-10 Pablo Saratxaga <pablo@mandrakesoft.com>
+
+ * configure.in,po/et.po: added Estonian language file
+
+1999-09-04 Zbigniew Chyla <chyla@alice.ci.pwr.wroc.pl>
+
+ * */*.directory, */*.desktop, */*.soundlist:
+ Added Polish translations.
+
+1999-09-03 Jacob Berkman <jberkman@andrew.cmu.edu>
+
+ * pixmaps/Makefile.am (BITMAPS): add the squeaker
+
+ * pixmaps/gnome-squeak.png: squeeeeeeeeaaaaaak!!!!!!!!
+
+1999-09-02 Miguel de Icaza <miguel@gnu.org>
+
+ * gnome-edit/gnome-edit.c (g_box, main): Make the thing display a
+ message to the user. There is little point in sending this to
+ stdout, where the user does not see it.
+
+1999-09-01 Pablo Saratxaga <pablo@mandrakesoft.com>
+
+ * configure.in, po/es_*.po: removed the es_??.po files;
+ the string that was different is no longer in the sources.
+
+1999-08-20 Jacob Berkman <jberkman@andrew.cmu.edu>
+
+ * acconfig.h: #undef KDE_ICONDIR, KDE_MINI_ICONDIR
+
+ * configure.in (LIBS): define KDE_ICONDIR, KDE_MINI_ICONDIR
+
+1999-07-28 Peter Teichman <peter@tortoise.dorm.duke.edu>
+
+ * configure.in (LIBS): generate help-browser/help/ja/Makefile
+
+1999-07-10 Jacob Berkman <jberkman@andrew.cmu.edu>
+
+ * configure.in: do not generate Makefiles for applets which are
+ now in ngome-applets. Also, removed checks for things such as
+ glibtop and ghttp since only the applets used them
+
+Sat Jun 26 13:09:35 1999 Yuan-Chung Cheng <platin@linux.org.tw>
+
+ * configure.in: added zh_TW.Big5
+
+Sat Jun 26 01:21:12 1999 Tim Janik <timj@gtk.org>
+
+ * configure.in: create applets/desk-guide/Makefile
+
+1999-05-15 Jacob Berkman <jberk+@cmu.edu>
+
+ * pixmaps/Makefile.am (BITMAPS): added entries for gnome-xterm.png
+ and gnome-terminal.png
+
+ * pixmaps/gnome-xterm.png: New xterm icon
+
+ * pixmaps/gnome-terminal.png new gnome-terminal icon
+
+Mon May 10 14:10:51 1999 George Lebl <jirka@5z.com>
+
+ * configure.in: added sk
+
+ * po/sk.po: added Slovak translations from Bobo Rajec <bobo@bspc.sk>
+
+1999-05-05 Mark Crichton <crichton@gimp.org>
+
+ * configure.in: Added help-browser/help/eu/Makefile to include
+ building of some translations.
+
+1999-05-04 Tuomas Kuosmanen <tigert@gimp.org>
+
+ * pixmaps/gnome-ccdialog.png: Dialog settings icon..
+
+ * pixmaps/gnome-ccbackground.png gnome-ccthemes.png
+ gnome-ccscreensaver.png gnome-ccwindowmanager.png: Updated the icons
+ once again..
+
+1999-05-03 Tuomas Kuosmanen <tigert@gimp.org>
+
+ * pixmaps/gnome-folder.png: New folder icon for panel - I also added
+ a matching one to gmc.. I hope you like them. If not, too bad 8-)
+
+1999-05-02 Tuomas Kuosmanen <tigert@gimp.org>
+
+ * gnome-ccbackground.png
+ * gnome-ccthemes.png
+ * gnome-ccscreensaver.png
+ * gnome-ccwindowmanager.png
+ * pixmaps/Makefile.am: Added some icons for control-center menus..
+
+1999-04-16 Tuomas Kuosmanen <tigert@gimp.org>
+
+ * pixmaps/apple-green.png: new icon
+ * pixmaps/apple-green.png new icon (both in the cute&fun section :)
+ * pixmaps/Makefile.am (pixmapdir): Added those in the list to be
+ installed..
+
+1999-04-15 Michael Zucchi <zucchi@zzedzone.mmc.com.au>
+
+ * configure.in: Added help-browser/help/wa/Makefile to include
+ building of the Walloon translations.
+
+1999-04-08 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * configure.in: Bumped version number to 1.0.5.
+
+1999-04-08 Owen Taylor <otaylor@redhat.com>
+
+ * configure.in acconfig.h: Add a --with-kde-datadir flag
+ so you can point at KDE menus in a different location.
+ (Should thus just be --with-kde-dir?)
+
+1999-04-07 Vie Ptsi <drc@gnu.org>
+
+ * pixmaps/tile-drc-4-up.png: New tile.
+ * pixmaps/tile-drc-4-down.png: New tile.
+ * pixmaps/Makefile.am: Added tiles.
+
+1999-04-01 Tuomas Kuosmanen <tigert@gimp.org>
+
+ * pixmaps/gnome-cardgame.png: Added the icon to gnome-core
+ since it is pretty generic - will make freecell in gnome-games use
+ it. So beware of conflicts if you release stuff.
+
+1999-03-31 Miguel de Icaza <miguel@nuclecu.unam.mx>
+
+ * configure.in (LIBS): Use ZVT when autodetecthing the Zvt
+ features.
+
+1999-03-30 Tuomas Kuosmanen <tigert@gimp.org>
+
+ * desktop-links/Eterm.desktop: Added the icon to the .desktop-file
+
+ * pixmaps/gnome-eterm.png: Added icon for Eterm
+
+1999-03-29 Tuomas Kuosmanen <tigert@gimp.org>
+
+ * pixmaps/gnome-die1.png
+ * pixmaps/gnome-die2.png
+ * pixmaps/gnome-die3.png
+ * pixmaps/gnome-die4.png
+ * pixmaps/gnome-die5.png
+ * pixmaps/gnome-die6.png: icons just for fun for things
+ on the desktop - for directories etc..
+
+1999-03-25 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * configure.in: Bumped version number to 1.0.4.
+
+1999-03-23 Martin Baulig <martin@home-of-linux.org>
+
+ * configure.in (WINDOW_MANAGER): Use gnome-wm instead of icewm
+ as default. See gsm/ChangeLog for details.
+
+1999-03-23 Sung-Hyun Nam <namsh@lgic.co.kr>
+
+ * configure.in: generate help-browser/help/ko/Makefile
+
+1999-03-18 Miguel de Icaza <miguel@nuclecu.unam.mx>
+
+ * configure.in: Add test for zvt_term_reset. Preparing for new
+ feature in gnome-terminal (new feature is a bug fix).
+
+1998-12-06 Miguel de Icaza <miguel@nuclecu.unam.mx>
+
+ * capplets/theme-switcher/gui.c (make_main): Use add_with_viewport
+ here.
+ (make_main): Assign system_list as soon as the widgte is created,
+ do not delay this.
+
+1999-03-13 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * configure.in: Bumped version number to 1.0.3.
+
+1999-02-27 Shooby Ban <bansz@szif.hu>
+
+ * help-browser/help/Makefile.am: Added hungarian help
+
+1999-02-24 Chris Lahey <clahey@umich.edu>
+
+ * gnome-edit/gnome-edit.c: Added the fact that it looks at the
+ EDITOR environment variable. It also now pays attention to the
+ needs_term variable and launches the app in an xterm if it's
+ either requested, or the app is specified by the EDITOR
+ environment variable.
+
+1999-02-24 Elliot Lee <sopwith@bogus.circ.us.eu.org>
+
+ * Add jbc applet to the bunch. Tested.
+
+1999-02-19 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (ZVT_LIBS): Define to `gnome-config --libs zvt`.
+
+1999-02-18 Shooby Ban <bansz@szif.hu>
+
+ * panel/button-widget.c, drawer-widget.c, snapped-widget.c,
+ corner-widget.c, menu.c, swallow.c:
+ Changed some hardcoded values to #define PANEL_MINIMUM_WIDTH
+ Added a chance to make another size of panel
+
+1999-02-17 Owen Taylor <otaylor@redhat.com>
+
+ * **/Makefile.am: install .desktop files in
+ $datadir/gnome/apps.
+
+1999-02-15 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * configure.in: Bumped version number to 0.99.8.1.
+
+1999-02-11 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * configure.in: Bumped version number to 0.99.8.
+
+1999-02-10 Martin Baulig <martin@home-of-linux.org>
+
+ * gnome-core.spec.in, gnome-core.spec: Replaced gnome-core.spec
+ with gnome-core.spec.in, so gnome-core.spec is now a generated
+ file.
+
+1999-02-10 Martin Baulig <martin@home-of-linux.org>
+
+ * desktop-properties: Nuked this directory.
+
+1999-02-07 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * configure.in: Bumped version number to 0.99.7.
+
+1999-02-06 Changwoo Ryu <cwryu@adam.kaist.ac.kr>
+
+ * applets/.../*.desktop, desktop-links/*.{desktop,directory}
+ : Added Korean translations.
+
+1999-02-01 Chris Lahey <clahey@umich.edu>
+
+ * gnome-edit/.cvsignore: Added .deps and gnome-edit to .cvsignore.
+
+ * gnome-edit/Makefile.am: Changed this to make it do a compile
+ instead of just installing a script.
+
+ * gnome-edit/gnome-edit: Removed this script. Now generated from
+ gnome-edit.c.
+
+ * gnome-edit/gnome-edit.c: Added this. It launches another editor
+ based on settings from the gnome-edit-properties capplet.
+
+1999-01-23 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * configure.in (AC_OUTPUT): Added gnome-terminal/C/Makefile to the
+ list of files to generate.
+
+Sun Jan 24 03:23:24 1999 Timur Bakeyev <mc@bat.ru>
+
+ * configure.in (AC_CHECK_HEADERS): Add check for sys/soundcard.h -
+ BSDI hides it there.
+
+1999-01-10 Tuomas Kuosmanen <tigert@gimp.org>
+
+ * pixmaps/netscape.png: Replaced the netscape launcher icon
+
+ * pixmaps/gnome-mouse.png: Replaced the mouse icon with one
+ equipped with smoother edges :)
+
+1999-01-09 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * configure.in (ALL_LINGUAS): Added nl to the translations,
+ courtesy of Dirk-Jan C. Binnema <djcb@dds.nl>.
+
+1999-01-05 Oliver Maruhn <om@linuxhq.com>
+
+ * configure.in (AC_OUTPUT): "applets/mini-commander/src/Makefile"
+ added
+
+Tue Jan 05 01:59:15 1999 George Lebl <jirka@5z.com>
+
+ * pixmaps/{Makefile.am,tile-blue-{up,down}.png}: add blue tiles
+ that will be used in logout buttons (you know blue == night
+ == logout .... ummm ... whatever ... forget it)
+
+1998-12-30 Jeff Garzik <jgarzik@pobox.com>
+
+ * { many files }: s/g_copy_strings/g_strconcat/
+
+1998-12-29 Oliver Maruhn <om@linuxhq.com>
+
+ * configure.in (AC_OUTPUT): "applets/mini-commander/docs/Makefile"
+ added
+
+Tue Dec 29 14:46:39 1998 Maciej Stachowiak <mstachow@mit.edu>
+
+ * configure.in: Removed logic to check if the user passed
+ --with-window-mager=fvwm2.
+
+1998-12-29 Oliver Maruhn <om@linuxhq.com>
+
+ * configure.in (AC_OUTPUT): "applets/mini-commander/docs/Makefile"
+ added
+
+Tue Dec 29 14:46:39 1998 Maciej Stachowiak <mstachow@mit.edu>
+
+ * configure.in: Removed logic to check if the user passed
+ --with-window-mager=fvwm2.
+
+1998-12-15 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * configure.in: Fix AC_INIT, it was testing for an obsolete file.
+ Removed desktop-properties from the list of directories.
+ Removed applets/gkb from the list of directories. Why is it not
+ being built?
+
+1998-12-15 Yukihiro Nakai <Nakai@abricot.co.jp>
+
+ * */*.desktop: Added Japanese translations with our
+ special tool.
+
+ * */*.directory: Likewise
+
+1998-12-10 James Henstridge <james@daa.com.au>
+
+ * gnome-core.spec: removed %{prefix}/share/control-center from %files
+ list since control center has moved.
+
+1998-12-08 Michael Fulbright <drmike@redhat.com>
+
+ * moved control-center and capplets to control-center CVS module
+
+1998-12-08 Michael Lausch <mla@gams.at>
+
+ * configure.in Remove the --with-fvwm2 configure.in option, the
+ fvwm2 applet is now selfcontained. Instead build the applet if the
+ requested window manager is fvwm2.
+
+1998-12-07 James Henstridge <james@daa.com.au>
+
+ * capplets/url-properties: a new applet to configure the behaviour of
+ the gnome_url_show function in libgnome.
+
+1998-12-06 Tuomas Kuosmanen <tigert@gimp.org>
+
+ * pixmaps/Makefile.am (EXTRA_DIST): Added some new tiles for panel:
+ tile-moon-[up,down].png - a grayish tile
+ tile-sand-[up,down].png - a brownish tile
+ tile-coral-[up,down].png - a blueish tile (try this
+ with http://tigert.gimp.org/files/gtkrc-files/gtkrc.ocean)
+
+1998-12-02 Raja R Harinath <harinath@cs.umn.edu>
+
+ * capplets/sound-properties/sound-properties.c (main):
+ Add a closing brace.
+
+1998-12-03 Changwoo Ryu <cwryu@adam.kaist.ac.kr>
+
+ Use gettext 0.10.35
+ * configure.in (AC_OUTPUT): Removed `sed POTFILES...'.
+ * acinclude.m4: Removed gettext macros.
+
+1998-12-02 Martin Baulig <martin@home-of-linux.org>
+
+ * Makefile.am (always_built_SUBDIRS): Removed `desktop-properties' -
+ we have capplets for all of them now.
+
+1998-12-02 Martin Baulig <martin@home-of-linux.org>
+
+ * capplets/ui-properties: Added "Look&Feel" properties capplet.
+
+ * capplets/bell-properties: Added bell properties capplet.
+
+Sun Nov 29 18:20:54 EST 1998 Gregory McLean <gregm@comstar.net>
+
+ * configure.in : Added applets/gticker/Makefile to the makefiles to
+ produce.
+
+1998-11-29 Jeff Garzik <jgarzik@pobox.com>
+
+ * applets/gkb/gkb.c, applets/netwatch/netwatch.c:
+ Added required app id arg to applet_widget_new.
+
+Tue Nov 24 00:25:53 1998 Owen Taylor <otaylor@redhat.com>
+
+ * capplets/theme-switcher/da.h: Removed include of
+ gtk-socket.h, which now is in GTK+.
+
+1998-11-23 Andrew T. Veliath <andrewtv@usa.net>
+
+ * capplets/screensaver-properties/screensaver-properties-capplet.c: Use
+ gtk_scrolled_window_add_with_viewport instead of gtk_container_add
+ (gtk changes).
+
+1998-11-21 Nuno Ferreira <nmrf@rnl.ist.utl.pt>
+
+ * capplets/screensaver-properties/callbacks.c: Include <config.h>.
+
+ * capplets/theme-switcher/gui.c: Include <config.h>. Mark strings
+ for translation.
+
+ * capplets/sound-properties/sound-properties.c: Mark strings for
+ translation.
+ (main): Initialize gettext.
+
+ * capplets/theme-switcher/main.c (main): Include <config.h> at the
+ top of the file.
+ (main): Initialize gettext.
+
+ * capplets/screensaver-properties/screensaver-properties-capplet.c:
+ Include <config.h> at the top of the file.
+ (main): Initialize gettext.
+
+ * capplets/keyboard-properties/keyboard-properties.c:Include
+ <config.h> at the top of the file.
+ (main): Initialize gettext.
+
+1998-11-12 Andrew T. Veliath <andrewtv@usa.net>
+
+ * acconfig.h: Remove HAVE_ORBIT, HAVE_MICO_ORB_RUN. HAVE_ORBIT is
+ now implicit.
+
+ * Makefile.am: Remove ORBIT_INSTALLED AM_CONDITIONAL.
+
+ * configure.in: The ORBit AM_CONDITIONAL is now in
+ gnome-orbit-check.m4 as HAVE_ORBIT.
+
+1998-11-06 Raja R Harinath <harinath@cs.umn.edu>
+
+ * capplets/theme-switcher/main.c (confdefs.h): `confdefs.h isn't a
+ nice name for a header file. Since no other file uses it, just
+ remove it.
+ (THEME_SWITCHER_VERSION): New define. Is what `VERSION' was used
+ for.
+ (main): Use new name for `VERSION'.
+ * capplets/theme-switcher/confdefs.h: Delete.
+ * capplets/theme-switcher/config.h: Delete.
+
+Fri Nov 6 17:15:00 1998 Owen Taylor <otaylor@redhat.com>
+
+ * capplets/theme-switcher/main.c: include confdefs.h
+ to get VERSION.
+
+ * capplets/theme-switcher/demo.c (demo_main): Put the
+ CList in a scrolled window.
+
+ * Makefile.am: Build theme-switcher-capplet by default,
+ now that themes are in GTK+ head.
+
+1998-11-04 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (have_libesd): Actually define the HAVE_LIBESD
+ conditional.
+
+1998-10-30 <jrb@redhat.com>
+
+ * capplets/screensaver-properties/callbacks.c (launch_miniview): Thou
+ shall not exec (NULL)...
+ (launch_miniview): thou shalt also not check in things before you save
+ the changes... (:
+
+1998-10-28 The Rasterman <raster@redhat.com>
+
+ * applets/esd-manager: added this.. going to work on it...
+
+1998-10-26 Raja R Harinath <harinath@cs.umn.edu>
+
+ * capplets/screensaver-properties/screensaver-properties-capplet.c
+ (main): This is not a void function.
+
+1998-10-20 Tom Tromey <tromey@cygnus.com>
+
+ * configure.in (ALL_LINGUAS): Added `da'.
+
+1998-10-20 Andrew Veliath <andrewtv@usa.net>
+
+ * configure.in: Update ORBit checks to use new
+ gnome-orbit-checks.m4. acconfig.h: Add HAVE_ORBIT.
+
+Sun Oct 18 22:02:28 1998 Owen Taylor <otaylor@gtk.org>
+
+ * capplets/background-properties/property-background.c
+ (img_dnd_drop): Matching braces help.
+
+Sun Oct 18 19:18:21 1998 Owen Taylor <otaylor@gtk.org>
+
+ * background-properties/property-background.c: Use
+ the new DND API.
+
+1998-10-14 Nuno Ferreira <nmrf@rnl.ist.utl.pt>
+
+ * */*.desktop: Added Portuguese translations.
+
+ * */*.directory: Likewise
+
+1998-09-29 The Rasterman <raster@redhat.com>
+ * configure.in: added e-conf capplet and gnome-pager applet
+
+1998-09-29 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (applets_libgtop):
+ More warnings if `libgtop' isn't found.
+
+Mon Sep 28 12:31:00 1998 John Ellis <johne@bellatlantic.net>
+
+ * configure.in: Add applets/slashapp/Makefile
+
+1998-09-27 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in: Warn if some of the applets will not be built.
+
+1998-09-24 Nuno Ferreira <nmrf@rnl.ist.utl.pt>
+
+ * applets/asclock/asclock_applet.desktop: Likewise.
+
+ * applets/battery/battery_applet.desktop: Likewise.
+
+ * capplets/theme-switcher/theme-selector.desktop: Add Portuguese
+ translation.
+
+ * capplets/screensaver-properties/screensaver-desktops/screensaver-properties.desktop:
+ Likewise.
+
+ * capplets/keyboard-properties/keyboard-properties.desktop:
+ Likewise.
+
+1998-09-23 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * capplets/screensaver-properties/Makefile.am
+ (screensaver_properties_capplet_SOURCES): Add missing headers to
+ the list of sources.
+
+1998-09-23 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+ * configure.in (FVWM_PAGER): quoted $FVWM_PAGER in test ! -z
+ "$FVWM_PAGER"
+
+1998-09-23 Michael Lausch <mla@gams.at>
+
+ * configure.in (FVWM_PAGER): Added various tests for the
+ fvwm-pager applet.
+
+1998-09-23 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * configure.in:
+ * Makefile.am: Add the idl directory. WHY DID NO ONE ADD THIS
+ WHEN IT WAS CREATED?
+
+1998-09-22 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * configure.in: Bumped version number to 0.30. The panting chimpanzee
+ is upon us.
+
+Thu Sep 17 14:20:05 1998 John Ellis <johne@bellatlantic.net>
+
+ * configure.in, Makefile.am: Removed conditional build of gmenu since
+ gtk+-1.1 is now a requirement.
+
+1998-09-11 Alexandre Muniz <munizao@cyberhighway.net>
+ * configure.in (AC_OUTPUT): Added applets/charpick
+
+1998-09-06 Raja R Harinath <harinath@debian>
+
+ * capplets/Makefile.am (DIST_SUBDIRS): Remove unneeded variable.
+
+1998-09-06 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (GNOME_COMPILE_WARNINGS): New check.
+
+Fri Sep 04 00:07:08 1998 George Lebl <jirka@5z.com>
+
+ * configure.in,Makefile.am,po/POTFILES.in: removed support for
+ mico and related sources
+
+Wed Sep 02 23:18:00 1998 George Lebl <jirka@5z.com>
+
+ * pixmaps/Makefile.am: install tiles into a separate directory,
+ we will want to browse this with an icon browser and we only
+ want tiles to show up
+
+1998-08-27 Christopher Blizzard <blizzard@appliedtheory.com>
+
+ * configure.in: Add checks for seeing if libghttp is installed.
+
+1998-08-23 Martin Baulig <martin@home-of-linux.org>
+
+ * configure.in (GNOME_FILEUTILS_CHECKS): Removed. This check
+ is no longer necessary since we now use libgtop for the
+ mountlist and fsusage stuff in the diskusage applet.
+ * acconfig.h: Removed mountlist stuff.
+
+ * configure.in (GNOME_INIT_LIBGTOP): New check.
+ * acconfig.h: Added libgtop stuff.
+
+1998-08-20 Raja R Harinath <harinath@cs.umn.edu>
+
+ * core-docs/Makefile.am (gnome-intro/gnome-intro.html):
+ Make rule even more friendlier to a build without `DocBook'.
+
+Thu Aug 20 00:32:24 1998 Tom Tromey <tromey@cygnus.com>
+
+ * configure.in: Removed all smproxy code.
+ Don't mention non-existent directory.
+
+1998-08-19 Raja R Harinath <harinath@cs.umn.edu>
+
+ * Makefile.am (SUBDIRS): Actually compile `control-center' if
+ it is enabled.
+ (always_built_SUBDIRS): Reinstate `smproxy'.
+
+1998-08-19 Martin Baulig <martin@home-of-linux.org>
+
+ * Makefile.am: Conditionally compiling `control-center' if
+ we have ORBit.
+
+ * Makefile.am: Using $(always_built_SUBDIRS),
+ $(sometimes_built_SUBDIRS) and correct $(DIST_SUBDIRS).
+
+1998-08-17 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * configure.in: Bumped the version number to 0.28.
+
+1998-08-02 Raja R Harinath <harinath@cs.umn.edu>
+
+ * core-docs/Makefile.am (EXTRA_DIST): Add `gnome-intro.html'.
+ (INTRO_EXTRA_DIST): Merge with EXTRA_DIST.
+
+ * configure.in (PROGRAM_GMENU):
+ Use AM_CONDITIONAL rather than AC_SUBST.
+ (PROGRAMS_PANEL_{CDPLAYER,MIXER,MODEMLIGHTS}): Likewise.
+ (AC_OUTPUT): Remove `applets/netwatch/Makefile'.
+
+ * Makefile.am (gmenu): New var.
+ (SUBDIRS): Use $(gmenu) instead of @PROGRAM_GMENU@.
+
+1998-08-01 Raja R Harinath <harinath@cs.umn.edu>
+
+ * core-docs/Makefile.am (install-data-local): Use INSTALL_DATA in
+ a for loop, don't install all at once.
+ (GNOME_INTRO_HTML_FILES): Remove $(srcdir) from names of files.
+ (GNOME_INTRO_PICTURES): Likewise.
+ (INTRO_EXTRA_DIST): Likewise.
+ (GNOME_INTRO_GIFS): Likewise.
+ (EXTRA_DIST): Likewise.
+
+1998-07-31 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * configure.in (ALL_LINGUAS): Added Japanese translation.
+
+1998-07-28 Mark Galassi <rosalia@cygnus.com>
+
+ * core-docs/gnome-intro/*.html: regenerated the HTML using the
+ latest DocBook tools; some filenames have changed, and
+
+1998-07-23 Nuno Ferreira <nmrf@rnl.ist.utl.pt>
+
+ * config.guess, config.sub: Remove auto-generated files.
+
+Tue Jul 21 18:29:16 1998 Tom Tromey <tromey@cygnus.com>
+
+ * acconfig.h (WINDOW_MANAGER): Removed.
+ * configure.in: Don't define WINDOW_MANAGER, AC_SUBST it.
+
+Sun Jul 19 03:31:08 1998 John Ellis <johne@bellatlantic.net>
+
+ * configure.in: variable PROGRAM_GMENU with a check for
+ gtk/gtkctree.h which is in the devel GTK.
+ * Makefile.am: added above variable in the subdirs section, now
+ gmenu is built/installed by default if the devel GTK is found.
+
+1998-07-19 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (SMPROXY_DEFS): Use `STD_DEFINES' rather than
+ `STD_CPP_DEFINES'.
+ (ORB_LIBS): To replace MICO_LIBS.
+ (ORBIT_LIBS,MICO_LIBS): Don't subst.
+ (ORBIT_CONFIG): Don't use `if [ .. ];', use `if test ..;'.
+
+1998-07-18 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (SMPROXY_DEFS): New check, based on AC_PATH_X11.
+ Needed to get defines used in a X11 build tree.
+
+Thu Jul 16 18:03:37 1998 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am (SUBDIRS): Added smproxy.
+ * configure.in: Create smproxy/Makefile.
+
+1998-07-13 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (mico_prefix): Stop searching as soon as a
+ `mico-ld' is found. From Michael Lausch <mla@gams.co.at>.
+
+1998-07-08 Federico Mena Quintero <federico@nuclecu.unam.mx>
+
+ * configure.in: Added applets/fifteen/Makefile to the list.
+
+1998-07-08 Owen Taylor <otaylor@fresnel.labs.redhat.com>
+
+ * configure.in: Fix shell syntax bug in case when MICO
+ is not found.
+
+1998-06-26 Nuno Ferreira <nmrf@rnl.ist.utl.pt>
+
+ * configure.in (ALL_LINGUAS): Added Portuguese translation.
+
+Sat Jun 13 01:11:16 1998 Tom Tromey <tromey@cygnus.com>
+
+ * core-docs/Makefile.am (gnome-intro/book01.html): Ignore mkdir
+ failures.
+
+Fri Jun 12 22:56:58 1998 Tom Tromey <tromey@cygnus.com>
+
+ * configure.in: Look for mico-setup.sh in $mico_prefix/doc. Also,
+ handle MICO 2.0.3 (still!).
+
+1998-06-11 John Ellis <johne@bellatlantic.net>
+
+ * configure.in: added gmenu/Makefile
+
+1998-06-11 John Ellis <johne@bellatlantic.net>
+
+ * gmenu directory: Checked in a gmenu, the GNOME menu editor,
+ still needs a Makefile.am file though.
+
+Wed Jun 10 11:34:52 1998 Owen Taylor <otaylor@gtk.org>
+
+ * configure.in: Make panel link micocoss library as well
+
+Wed Jun 10 11:34:52 1998 Owen Taylor <otaylor@gtk.org>
+
+ * configure.in acconfig.h: Check for installed MICO
+ version, and the libs it requires by using mico-ld
+ and mico-setup.sh.
+
+ Add a HAVE_MICO_ORB_RUN macro to signal that we need
+ to call orb->run(), as we do for mico-2.0.6 and later
+
+Tue Jun 9 23:37:43 EDT 1998 Gregory McLean <gregm@comstar.net>
+
+ * .cvsignore updates.
+
+1998-06-09 Jim Pick <jim@jimpick.com>
+
+ * Added debian packaging dir.
+
+1998-06-07 Stuart Parmenter <pavlov@innerx.net>
+
+ * help-browser/window.c: changed accel stuff around so that it works
+ with gtk1.1
+
+1998-06-05 Mark Galassi <rosalia@cygnus.com>
+
+ * core-docs/Makefile.am: fixed it so that "make dist" will
+ generate a reasonable distribution. Many files were not listed in
+ the EXTRAS, but I think they now are.
+
+1998-05-30 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (FALSE): Automake conditional that always fails.
+ This is used in some subdir Makefile.am tricks.
+
+1998-05-26 John Ellis <johne@bellatlantic.net>
+
+ * configure.in: added PROGRAMS_PANEL_MODEMLIGHTS, apparently
+ net/ppp_defs.h does not exist on solaris.
+
+1998-05-22 Martin Baulig <baulig@merkur.uni-trier.de>
+
+ * configure.in: added GNOME_FILEUTILS_CHECKS
+
+ * acconfig.h (AFS, MOUNTED_FREAD, MOUNTED_FREAD_FSTYP,
+ MOUNTED_GETFSSTAT, MOUNTED_GETMNT, MOUNTED_GETMNTENT1,
+ MOUNTED_GETMNTENT2, MOUNTED_GETMNTINFO, MOUNTED_LISTMNTENT,
+ MOUNTED_VMOUNT, STAT_STATFS3_OSF1, STAT_READ_FILSYS,
+ STAT_STATFS2_BSIZE, STAT_STATFS2_FSIZE, STAT_STATFS2_FS_DATA,
+ STAT_STATFS4, STAT_STATVFS, STATFS_TRUNCATES_BLOCK_COUNTS):
+ New macros.
+
+1998-05-13 Christopher Blizzard <blizzard@appliedtheory.com>
+
+ * configure.in: added applets/bussign/Makefile to the list of
+ Makefiles.
+
+1998-05-05 Mark Galassi <rosalia@cygnus.com>
+
+ * core-docs/gnome-intro.sgml: added a bit more to the panel;
+ that's it for the Red Hat 5.1 release, I guess.
+
+ * core-docs/Makefile.am (install-data-local): fixed little bug in
+ installing help files.
+
+ * core-docs/gnome-intro.sgml: completed the GNOME intro; there are
+ many omissions, but it seems OK. Now I have to proofread it a bit
+ and add a mention of panel applets. I also added all the
+ generated HTML files for people who do not have the docbook tools
+ installed (this sucks).
+
+ * core-docs/Makefile.am: put core-docs under automake with some
+ quickly hacked-up rules for the RH-5.1 release. I will clean it
+ up later; this seems to work and install gnome-intro in a way such
+ that the help browser picks it up.
+
+ * Makefile.am (SUBDIRS): added core-docs
+
+Sun May 3 22:43:59 1998 Tom Tromey <tromey@cygnus.com>
+
+ * acconfig.h (HAVE_FORKPTY): New macro.
+ * configure.in: Include UTIL_LIB check from gnome-libs.
+
+1998-05-03 Mark Galassi <rosalia@cygnus.com>
+
+ * core-docs/gnome-intro.sgml: added the beginnings of an
+ overall gnome-intro manual.
+
+Mon Apr 27 20:42:24 EDT 1998 Gregory McLean <gregm@comstar.net>
+
+ * panel/menu.c : changed a couple of <icon>.xpm to <icon.png> as
+ the xpm files for _thoose_ icons wern't there.
+
+Sun Apr 26 10:55:18 EDT 1998 Gregory McLean <gregm@comstar.net>
+
+ * Its too early in the morning!
+ * applets/netwatch/netwatch-old.c: added to the repo.
+ * applets/netwatch/netwatch_applet.desktop: desktop file
+ * applets/netwatch/.cvsignore: updated.
+
+Sun Apr 26 01:05:51 1998 Tom Tromey <tromey@cygnus.com>
+
+ * acconfig.h (WINDOW_MANAGER): New macro.
+ * configure.in: Added --with-window-manager option.
+
+ * configure.in: Unconditionally look for crypt.h.
+
+Sun Apr 26 10:55:18 EDT 1998 Gregory McLean <gregm@comstar.net>
+
+ * configure.in: changed the AC_PROG_LEX -> AM_PROG_LEX
+ though I couldn't find any lex files that this is needed
+ for. IIRC automake 1.2 supports this macro also.
+
+Sun Apr 19 09:38:36 EDT 1998 Gregory McLean <gregm@comstar.net>
+
+ * applets/*/.cvsignore: updated to ignore generated files.
+
+Tue Mar 17 23:26:47 1998 George Lebl <jirka@5z.com>
+
+ * configure.in: updated teh Makefiles being created
+
+ * Makefile.am: build in applets
+
+ * applets/Makefile.am: build clock
+
+Sat Mar 14 20:21:31 1998 George Lebl <jirka@5z.com>
+
+ * gnome-panel.idl, launcher-lib.(cc|h): added a Launcher
+ interface, but didn't do anything with it yet.
+
+Fri Mar 13 13:44:40 1998 George Lebl <jirka@5z.com>
+
+ * panel.c,clock.c: fixed some FIXME's and added some
+ sanity checks
+
+1998-03-13 Carsten Schaar <nhadcasc@fs-maphy.uni-hannover.de>
+
+ * configure.in (ALL_LINGUAS): Added German translation.
+
+1998-03-13 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (RES_LIBS): New check for `inet_aton'.
+
+Tue Mar 10 22:33:39 1998 Tom Tromey <tromey@cygnus.com>
+
+ * stamp.h.in: Removed.
+ * configure.in: Don't create stamp.h.
+
+Sun Mar 8 21:41:18 1998 Tom Tromey <tromey@cygnus.com>
+
+ * version.h.in: Removed.
+ * configure.in: Don't create version.h.
+
+Wed Mar 4 01:18:19 1998 Tom Tromey <tromey@cygnus.com>
+
+ * acconfig.h (HAVE_PROGRAM_INVOCATION_SHORT_NAME,
+ HAVE_PROGRAM_INVOCATION_NAME): Added.
+
+1998-03-04 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (AC_OUTPUT): Add `panel/libapplet/Makefile'.
+
+Mon Mar 2 15:30:00 1998 Tom Tromey <tromey@cygnus.com>
+
+ * configure.in: Removed check for SMlib.h; now comes from
+ gnome-x-checks.m4.
+
+1998-02-26 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in: Make the check for SMlib.h work better with the
+ checks that happen in macros/gnome-x-checks.m4.
+
+Thu Feb 26 12:37:07 1998 Tom Tromey <tromey@cygnus.com>
+
+ * configure.in: Check for X11/SM/SMlib.h.
+
+1998-02-25 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (AC_OUTPUT): Remove duplicated entry for
+ `panel/batmon/Makefile'.
+
+Sat Feb 14 01:31:21 1998 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am (macros/macros.dep): Use tab in rule, not space.
+
+ * configure.in: Run AC_LINK_FILES for gettext.
+
+1998-02-14 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (GNOME_X_CHECKS): Add new check.
+ (AC_OUTPUT): Also generate `macros/Makefile'.
+
+ * Makefile.am (macros/macros.dep): Maintainer rule to
+ auto-regenerate aclocal.m4.
+ (SUBDIRS): Add `macros'.
+
+ * help-browser/gnome-helpwin.c (gnome_helpwin_load): Replace
+ `snprintf' with `g_snprintf'.
+
+1998-02-13 Raja R Harinath <harinath@cs.umn.edu>
+
+ * configure.in (AC_OUTPUT): Generate `macros/Makefile'.
+
+ * autogen.sh: Use `macros/autogen.sh'.
diff --git a/ChangeLog-20080310 b/ChangeLog-20080310
new file mode 100644
index 0000000..000d33c
--- /dev/null
+++ b/ChangeLog-20080310
@@ -0,0 +1,1598 @@
+2008-03-10 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.22.1
+
+==================== 2.22.0 ====================
+
+2008-03-10 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.22.0.
+
+2008-03-06 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.22.0
+
+==================== 2.21.93 ====================
+
+2008-03-06 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.21.93.
+
+2008-02-28 Bastien Nocera <hadess@hadess.net>
+
+ * configure.in: Remove hard requirement on esound,
+ as we use the gnome-sound APIs, and let the
+ gnome-settings-daemon launch the sound server
+
+2008-02-26 Olav Vitters <olav@bkor.dhs.org>
+
+ * configure.in: post-release bump to 2.21.93
+
+==================== 2.21.92 ====================
+
+2008-02-26 Olav Vitters <olav@bkor.dhs.org>
+
+ * NEWS:
+ * README: Version 2.21.92.
+
+2008-02-20 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: require gnome-keyring 2.21.92
+ * gnome-session/gsm-keyring.c: (gsm_keyring_daemon_start): use
+ gnome_keyring_daemon_prepare_environment_sync(), and set appropriate
+ g-k environment variables
+ Fix bug #503278.
+ Based on patch by Stef Walter <stef@memberwebs.com>
+
+2008-02-11 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.21.92
+
+==================== 2.21.91 ====================
+
+2008-02-11 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.21.91.
+
+2008-01-28 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.21.91
+
+==================== 2.21.90 ====================
+
+2008-01-28 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.21.90.
+
+2008-01-15 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.21.90
+
+==================== 2.21.5 ====================
+
+2008-01-14 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.21.5.
+
+2007-11-18 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/Makefile.am, gnome-session/gsm-xrandr.c,
+ gnome-session/main.c: remove gsm_set_display_properties() call and
+ xrandr related code as this is now handled by gnome-settings-daemon
+ See bug #434982.
+
+2007-11-13 Vincent Untz <vuntz@gnome.org>
+
+ Move session .desktop file from GDM to gnome-session.
+ Patch by William Jon McCann <mccann@jhu.edu>
+ Fix bug #493535.
+
+ * data/gnome.desktop.in: new file
+ * data/Makefile.am: updated
+
+2007-10-15 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.20.2
+
+==================== 2.20.1 ====================
+
+2007-10-15 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.20.1.
+
+2007-09-20 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * configure.in: Update Gtk requirement to >= 2.11.1 because of
+ gdk_window_set_opacity. (Fixes: #478553)
+
+2007-09-17 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.20.1
+
+==================== 2.20.0 ====================
+
+2007-09-17 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.20.0.
+
+2007-09-04 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.20.0
+
+==================== 2.19.92 ====================
+
+2007-09-03 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README:
+ * configure.in: Version 2.19.92.
+
+2007-08-31 Vincent Untz <vuntz@gnome.org>
+
+ * MAINTAINERS: update to new format
+
+2007-08-13 Lucas Rocha <lucasr@gnome.org>
+
+ * configure.in: post-release bump to 2.19.91
+
+==================== 2.19.90 ====================
+
+2007-08-13 Lucas Rocha <lucasr@gnome.org>
+
+ * NEWS:
+ * README: Version 2.19.90.
+
+2007-07-30 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.19.90
+
+==================== 2.19.6 ====================
+
+2007-07-30 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.19.6.
+
+2007-07-08 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.19.5
+
+==================== 2.19.5 ====================
+
+2007-07-08 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.19.5.
+
+2007-07-08 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: use %e (instead of %d) to get the day of the month
+ since there's no leading 0 there, and use sed to remove the leading 0
+ in date +%m.
+ Fix compilation breaking on some dates (bug #454797)
+
+2007-06-18 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.19.5
+
+==================== 2.19.4 ====================
+
+2007-06-18 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.19.4.
+
+2007-06-18 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: define GNOME_SESSION_TARBALL_DAY,
+ GNOME_SESSION_TARBALL_MONTH, and GNOME_SESSION_TARBALL_YEAR in a
+ POSIX-compliant way. Needed for bug #444670.
+
+2007-06-14 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: require glib 2.13.0
+
+2007-06-03 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.19.4
+
+==================== 2.19.3 ====================
+
+2007-06-03 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.19.3.
+
+2007-05-13 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.19.3
+
+==================== 2.19.2 ====================
+
+2007-05-13 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README:
+ * configure.in: Version 2.19.2.
+
+2007-05-09 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: we don't need libgnome-desktop anymore
+
+2007-05-09 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: add --with-time-utility
+
+2007-05-06 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: small fixes, create bzip2 tarballs, require glib
+ 2.12.0
+ Based on patch by Christian Persch <chpe@gnome.org>
+
+2007-05-06 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: make it possible to redefine libexecdir when running
+ make.
+ Fix bug #420283. Patch by Andreas Hanke <andreas.hanke@gmx-topmail.de>
+
+2007-05-06 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: don't check for xrdb
+ Fix bug #420313. Patch by Andreas Hanke <andreas.hanke@gmx-topmail.de>
+
+2007-04-13 Bastien Nocera <hadess@hadess.net>
+
+ * configure.in: Remove check for usleep
+
+2007-03-12 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.18.1
+
+==================== 2.18.0 ====================
+
+2007-03-12 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.18.0.
+
+2007-03-11 Christian Kirbach <Christian.Kirbach@googlemail.com>
+
+ * data/session-properties.desktop.in.in:
+ Removed invalid category.
+
+2007-02-26 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.18.0
+
+==================== 2.17.92 ====================
+
+2007-02-26 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.17.92.
+
+2007-02-20 Kjartan Maraas <kmaraas@gnome.org>
+
+ * MAINTAINERS: Add Vincent, remove Mark.
+ * Makefile.am: Dist MAINTAINERS.
+
+2007-02-19 Sebastien Bacher <seb128@ubuntu.com>
+
+ * data/session-properties.desktop.in.in:
+ use "X-GNOME-PersonalSettings" desktop category (Fixes: #409407)
+
+2007-02-12 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.17.92
+
+==================== 2.17.91 ====================
+
+2007-02-12 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.17.91.
+
+2007-01-22 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.17.91
+
+==================== 2.17.90.1 ====================
+
+2007-01-22 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in:
+ * NEWS:
+ * README: Version 2.17.90.1.
+
+2007-01-21 Vincent Untz <vuntz@gnome.org>
+
+ * data/Makefile.am: install default.session and not default.session.in
+
+2007-01-21 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.17.91
+
+==================== 2.17.90 ====================
+
+2007-01-21 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.17.90.
+
+2007-01-21 Vincent Untz <vuntz@gnome.org>
+
+ * data/Makefile.am: fix distcheck
+
+2007-01-21 Vincent Untz <vuntz@gnome.org>
+
+ * data/session-properties.desktop.in.in: use new icon for the desktop
+ file
+
+2007-01-17 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in:
+ * data/Makefile.am:
+ * data/icons: add icon for session properties
+ Fix bug #396181
+ Icons provided by Jakub Steiner <jimmac@ximian.com>
+
+2007-01-17 Vincent Untz <vuntz@gnome.org>
+
+ * data/Makefile.am: forgot this file
+
+2007-01-17 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in:
+ * data/*:
+ * gnome-session/gnome-session.schemas.in:
+ * gnome-session/default.in:
+ * gnome-session/session-properties.desktop.in.in:
+ * gnome-session/gnome-splash.png:
+ * gnome-session/Makefile.am: move data files to data/ subdir
+
+ * configure.in: set warnings to maximum
+
+2007-01-08 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.17.90
+
+==================== 2.17.5 ====================
+
+2007-01-08 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in:
+ * NEWS:
+ * README: Version 2.17.5.
+
+2007-01-06 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: improve autodetection of the default directory for
+ at-spi-registryd
+
+2007-01-06 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session.spec.in:
+ * configure.in:
+ * Makefile.am: kill the spec file since nobody has updated it for a
+ very long time
+
+2007-01-06 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: use gnome-common to define the deprecated flags
+
+2007-01-06 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: add a configure option to specify the directory of
+ at-spi-registryd
+ Fix bug #383428, based on patch by Ariel Rios <ariel@gnu.org>
+
+2006-12-01 Kjartan Maraas <kmaraas@gnome.org>
+
+ * configure.in: Post release bump.
+
+======================= 2.17.3 =======================
+
+2006-11-15 Vincent Untz <vuntz@gnome.org>
+
+ * man/gnome-wm.1: Updated (we don't update gconf anymore)
+
+2006-11-15 Vincent Untz <vuntz@gnome.org>
+
+ * man/gnome-session-save.1: Document --silent option, and small
+ update. Bug #149447
+
+2006-11-14 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: and make this work by default (ie, automatically
+ detect whether to use it or not)
+
+2006-11-14 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: allow enabling/disabling of tcpwrappers
+ Patch by Saleem Abdulrasool <compnerd@gentoo.org>
+ Fix bug #326242
+
+2006-11-13 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: better fix
+
+2006-11-13 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: try to work around issues on old distros
+ Should fix bug #372685
+
+2006-11-06 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.17.3.
+
+==================== 2.17.2 ====================
+
+2006-11-06 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.17.2.
+
+2006-11-06 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: add configure switch to disable esd support
+ Fix bug #310979.
+ Patch by Leonardo Boshell <p@kapcoweb.com>
+
+2006-10-17 Kjartan Maraas <kmaraas@gnome.org>
+
+ * configure.in: Fix build. (Frederic Peters).
+ Closes bug #362541.
+
+2006-10-08 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: check for libXau existence
+ Fix bug #314079
+
+2006-10-02 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.16.2.
+
+==================== 2.16.1 ====================
+
+2006-10-02 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.16.1.
+
+2006-09-26 Kjartan Maraas <kmaraas@gnome.org>
+
+ * man/default.session.5.in:
+ * man/gnome-session.1.in:
+ * man/gnome-wm.1:
+ Man page fixes from debian.
+
+2006-09-04 Vincent Untz <vuntz@gnome.org>
+
+ * .cvsignore: updated
+
+2006-09-04 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.16.1.
+
+==================== 2.16.0 ====================
+
+2006-09-04 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.16.0.
+
+2006-08-30 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gnome-splash.png: update splash screen for 2.16
+ (really, this is the 2.14 one without the version number)
+
+2006-08-22 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.16.0.
+
+==================== 2.15.92 ====================
+
+2006-08-22 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.15.92.
+
+2006-08-08 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.15.92.
+
+==================== 2.15.92 ====================
+
+2006-08-08 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README:
+ * configure.in: Version 2.15.91.
+
+2006-07-26 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: add check for gnome-keyring
+
+2006-07-24 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.15.91.
+
+==================== 2.15.90 ====================
+
+2006-07-24 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README:
+ * configure.in: Version 2.15.90.
+
+2006-07-11 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.15.5.
+
+==================== 2.15.4 ====================
+
+2006-07-11 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README:
+ * configure.in: Version 2.15.4.
+
+2006-07-11 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: really add dbus dependency
+
+2006-07-11 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: require intltool 0.35.0
+
+2006-06-25 Sergey Udaltsov <svu@gnome.org>
+
+ * configure.in, gnome-session/gsm-gsd.c: added DBUS dependency,
+ require gnome-settings-daemon.pc from pkgconfig,
+ now g-s-d is launched using DBUS interface.
+
+2006-05-24 Kjartan Maraas <kmaraas@gnome.org>
+
+ * gnome-session/gsm-remove-client.c: (session_initialized):
+ Patch from Fedora to fix a critical warning. Closes bug #341115.
+ * po/ChangeLog: Fix a typo.
+
+2006-05-10 Claudio Saavedra <csaavedra@alumnos.utalca.cl>
+
+ * configure.in: Use IT_PROG_INTLTOOL.
+ * po/LINGUAS: New file listing translations. (#337982).
+
+2006-04-17 Kjartan Maraas <kmaraas@gnome.org>
+
+ * MAINTAINERS: Update some.
+ * configure.in: Remove obsolete entry for no_NO
+ * po/no.po: And the translation.
+
+2006-04-24 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.15.2.
+
+==================== 2.15.1 ====================
+
+2006-04-24 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README:
+ * configure.in: Version 2.15.1.
+
+2006-04-24 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: fix cosmetic typo. Fix bug #316677
+
+2006-04-10 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.14.2.
+
+==================== 2.14.1 ====================
+
+2006-04-10 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.14.1.
+
+2006-03-24 Tommi Vainikainen <thv@iki.fi>
+
+ * configure.in (ALL_LINGUAS): Added Dzongkha (dz).
+
+2006-03-20 Vladimer Sichinava <vlsichinava@gmail.com>
+
+ * configure.in: Added "ka" (Georgian) to ALL_LINGUAS
+
+2006-03-13 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.14.1.
+
+==================== 2.14.0 ====================
+
+2006-03-13 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.14.0.
+
+2006-02-27 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.13.92.
+
+==================== 2.13.92 ====================
+
+2006-02-27 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.13.92.
+
+2006-02-25 Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>
+
+ * configure.in: Add "zh_HK" to ALL_LINGUAS.
+
+2006-02-13 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.13.92.
+
+==================== 2.13.91 ====================
+
+2006-02-13 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.13.91.
+
+2006-01-27 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.13.91.
+
+==================== 2.13.90 ====================
+
+2006-01-27 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.13.90.
+
+2005-01-16 Rodrigo Moya <rodrigo@novell.com>
+
+ * gnome-session/save.c (read_desktop_entries_in_dir): fixed patching
+ conflict.
+
+2006-01-16 Rodrigo Moya <rodrigo@novell.com>
+
+ * gnome-session/startup-programs.c:
+ * gnome-session/session-properties-capplet.[ch]:
+ * gnome-session/save.c: implement program autostart with .desktop
+ files in known directories.
+
+ * configure.in: require gnome-desktop-2.0.
+
+2006-01-16 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.13.90.
+
+==================== 2.13.5 ====================
+
+2006-01-16 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README: Version 2.13.5.
+
+2006-01-06 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.13.5.
+
+==================== 2.13.4 ====================
+
+2006-01-06 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * README:
+ * configure.in: Version 2.13.4.
+
+2005-12-15 Elijah Newren <newren@gmail.com>
+
+ * configure.in: Uh, we're at version 2.13.3 now, not 2.12.1
+
+2005-11-04 Thomas Wood <thos@gnome.org>
+
+ * gnome-session/gnome-splash.png: 2.13 development splash
+
+2005-09-24 Erdal Ronahi <erdal.ronahi@gmail.com>
+
+ * configure.in: Added "ku" (Kurdish) to ALL_LINGUAS
+
+2005-09-06 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.12.1.
+
+==================== 2.12.0 ====================
+
+2005-09-06 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.12.0.
+
+2005-08-09 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.11.92.
+
+==================== 2.11.91 ====================
+
+2005-08-09 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.11.91.
+
+2005-07-26 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.11.91
+
+==================== 2.11.90 ====================
+
+2005-07-26 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.11.90
+
+2005-07-25 Mark McLoughlin <mark@skynet.ie>
+
+ Remove gnome-smproxy. See:
+ http://mail.gnome.org/archives/desktop-devel-list/2005-July/msg00527.html
+
+ * smproxy/*: remove.
+
+ * Makefile.am: remove smproxy from SUBDIRS.
+
+ * configure.in: remove smproxy.
+
+ * README: remove mention of smproxy.
+
+ * man/: remove smproxy manpages.
+
+2005-07-03 Aivars Kalvans <aivars.kalvans@inbox.lv>
+
+ * configure.in: smproxy requires glib-2.0, does not require libgnome
+ * smproxy/save.c: (WriteProxyFile):
+ * smproxy/smproxy.c: (ProxySaveYourselfPhase2CB), (main):
+ Fix memory leaks, remove libgnome dependency. Closes bug#308205.
+
+2005-06-01 Christian Rose <menthos@menthos.com>
+
+ * configure.in: Added "hy" to ALL_LINGUAS.
+
+2005-05-17 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.11.1.
+
+==================== 2.11.1 ====================
+
+2005-05-17 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.11.1.
+
+2005-05-17 Kjartan Maraas <kmaraas@gnome.org>
+
+ * gnome-session/headers.h:
+ * gnome-session/ice.c: (startup_clean_ice), (initialize_ice),
+ (read_authfile): Clean up the ICE code slightly. Patch from Iain
+ Holmes. Closes bug #154042.
+
+2005-05-06 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: bump version to 2.11.1 - 2.10.x
+ releases continue on the gnome-2-10 branch.
+
+2005-03-31 Steve Murphy <murf@e-tools.com>
+
+ * configure.in: Added "rw" to ALL_LINGUAS.
+
+2005-03-07 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.10.1.
+
+==================== 2.10.0 ====================
+
+2005-03-07 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.10.0.
+
+2005-03-03 Adi Attar <aattar@cvs.gnome.org>
+
+ * configure.in: Added "xh" to ALL_LINGUAS.
+
+2005-01-25 Kjartan Maraas <kmaraas@gnome.org>
+
+ * gnome-session/gnome-session.schemas.in: Improved string
+ from Bryan Clark. Closes bug #153910.
+
+2005-01-11 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.9.5.
+
+==================== 2.9.4 ====================
+
+2005-01-11 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.9.4.
+
+2005-01-10 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: remove --reboot-command and
+ --halt-command options.
+
+2004-12-02 Dwayne Bailey <dwayne@translate.org.za>
+
+ * configure.in: Added "zu" to ALL_LINGUAS.
+
+2004-11-30 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.9.3.
+
+==================== 2.9.2 ====================
+
+2004-11-30 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.9.2.
+
+2004-11-29 Christoffer Olsen <co@deworks.net>
+
+ * configure.in:
+ Generates gnome-session/session-properties.desktop.in from
+ AC_OUTPUT
+
+2004-11-27 Dwayne Bailey <dwayne@translate.org.za>
+
+ * configure.in: Added "nso" to ALL_LINGUAS.
+
+2004-11-09 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: bump version to 2.9.1. 2.8.x
+ development continues on the gnome-2-8 branch.
+
+2004-10-12 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.8.2.
+
+==================== 2.8.1 ====================
+
+2004-10-12 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.8.1.
+
+2004-10-07 James Henstridge <james@jamesh.id.au>
+
+ * acinclude.m4: remove, since the only macro in it wasn't being
+ used anymore.
+
+ * Makefile.am: get rid of intltool stuff on "make distclean"
+
+ * configure.in: modernise configure script a bit.
+
+ * autogen.sh (REQUIRED_AUTOMAKE_VERSION): request Automake 1.7.
+
+2004-09-13 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.8.1.
+
+==================== 2.8.0 ====================
+
+2004-09-13 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.8.0.
+
+2004-09-10 Jakub Steiner <jimmac@ximian.com>
+
+ * gnome-session/gnome-splash.png: 2.8
+
+2004-08-30 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.7.93.
+
+==================== 2.7.92 ====================
+
+2004-08-30 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.7.92.
+
+2004-08-16 Kjartan Maraas <kmaraas@gnome.org>
+
+ * configure.in: Add nb to ALL_LINGUAS.
+
+2004-08-16 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.7.92.
+
+==================== 2.7.91 ====================
+
+2004-08-16 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.7.91.
+
+2004-08-13 Gurban M. Tewekgeli <gmtavakkoli@yahoo.com>
+ * po/tk.po: Added Turkmen translation.
+ * configure.in: Added "tk" to ALL_LINGUAS.
+
+2004-07-19 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.7.5.
+
+==================== 2.7.4 ====================
+
+2004-07-19 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.7.4.
+
+2004-07-12 Pawan Chitrakar <pawan@nplinux.org>
+
+ * configure.in: Added ne Nepali in ALL_LINGUAS
+
+2004-07-06 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.7.4.
+
+==================== 2.7.3 ====================
+
+2004-07-06 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.7.3.
+
+2004-05-31 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.7.2.
+
+==================== 2.7.1 ====================
+
+2004-05-31 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.7.1.
+
+2004-05-13 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: bump version to 2.7.1. 2.6.x development
+ is now on the gnome-2-6 branch.
+
+2004-04-19 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.6.2
+
+==================== 2.6.1 ====================
+
+2004-04-19 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.6.1.
+
+2004-04-09 Guntupalli Karunakar <karunakar@freedomink.org>
+
+ * configure.in: Added "gu" (Gujarati) to ALL_LINGUAS.
+
+2004-04-09 John C Barstow <jbowtie@amathaine.com>
+
+ * configure.in: Added "mi" to ALL_LINGUAS.
+
+2004-03-31 Christian Rose <menthos@menthos.com>
+
+ * configure.in: Added "af" to ALL_LINGUAS.
+
+2004-03-22 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: post-release bump to 2.6.1
+
+==================== 2.6.0 ====================
+
+2004-03-22 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.6.0.
+
+2004-03-18 Guntupalli Karunakar <karunakar@freedomink.org>
+
+ * configure.in: Added "mr" for Marathi to ALL_LINGUAS.
+
+2004-03-15 Alexander Winston <alexander.winston@comcast.net>
+
+ * configure.in: Added en_CA to ALL_LINGUAS.
+
+==================== 2.5.92 ====================
+
+2004-03-15 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.5.92.
+
+==================== 2.5.91 ====================
+
+2004-03-09 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.5.91.
+
+2004-03-04 Jakub Steiner <jimmac@ximian.com>
+
+ * gnome-session/gnome-splash.png: beta 2.6 splash
+
+2004-03-04 Guntupalli Karunakar <karunakar@freedomink.org>
+
+ * configure.in: Added "pa" (Punjabi) to ALL_LINGUAS.
+
+==================== 2.5.90 ====================
+
+2004-02-23 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.5.90.
+
+==================== 2.5.5 ====================
+
+2004-02-16 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.5.5.
+
+2004-02-08 Tomasz K?oczko <kloczek@pld.org.pl>
+
+ * configure.in: Trivial cleanup: remove AC_SUBST(CFLAGS),
+ AC_SUBST(CPPFLAGS) and AC_SUBST(LDFLAGS). This variables are
+ substed by default.
+
+2004-02-06 Robert Sedak <robert.sedak@sk.htnet.hr>
+
+ * configure.in: Added "hr" (Croatian) to ALL_LINGUAS.
+
+==================== 2.5.4 ====================
+
+2004-02-04 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.5.4.
+
+2004-02-02 Alexander Winston <alexander.winston@comcast.net>
+
+ * acinclude.m4: Quoted definition of macro AM_PATH_ESD. Fixes
+ #133224.
+
+2004-02-02 Kjartan Maraas <kmaraas@gnome.org>
+
+ * gnome-session/main.c: (check_for_dns): Remove use
+ of deprecated function. Closes bug #133164.
+
+==================== 2.5.3 ====================
+
+2004-01-14 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.5.3.
+
+2004-01-14 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: require gtk+ 2.3.x so we know we're not
+ using the pangox backend anymore.
+
+==================== 2.5.2 ====================
+
+2003-12-08 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.5.2.
+
+2003-12-06 Alexander Larsson <alexl@redhat.com>
+
+ * configure.in:
+ Look for gnome-keyring-daemon
+
+2003-11-13 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: don't generate
+ gnome-session/gnome-session.schemas.in.
+
+==================== 2.5.1 ====================
+
+2003-11-11 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.5.1.
+
+2003-11-11 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: add a --enable-deprecated flag.
+
+==================== 2.4.1 ====================
+
+2003-10-14 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.4.1.
+
+==================== 2.4.0 ====================
+
+2003-09-09 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.4.0.
+
+2003-09-06 Paisa Seeluangsawat <paisa@users.sf.net>
+
+ * configure.in: Added Thai (th) to ALL_LINGUAS.
+
+==================== 2.3.90 ====================
+
+2003-09-02 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.3.90.
+
+==================== 2.3.7 ====================
+
+2003-08-25 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.3.7.
+
+==================== 2.3.6.2 ====================
+
+2003-08-13 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.3.6.2.
+
+2003-08-12 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.in: fix maintainer builds
+
+==================== 2.3.6.1 ====================
+
+2003-08-11 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.3.6.1.
+
+==================== 2.3.6 ====================
+
+2003-08-07 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.3.6.
+
+==================== 2.3.4 ====================
+
+2003-07-15 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.3.4.
+
+2003-04-14 Shailesh Mittal <shailesh.mittal@wipro.com>
+
+ * configure.in: Added option for enabling IPv6 support.
+ Added checks for function getaddrinfo().
+
+2003-07-09 John Fleck <jfleck@inkstain.net>
+
+ * Makefile.am
+ * configure.in
+ Doh! Removing docs build stuff from the places I
+ missed on the last checkin.
+
+2003-07-09 John Fleck <jfleck@inkstain.net>
+ removing:
+ * xmldocs.make
+ * sgmldocs.make
+ * omf-install/Makefile.am
+ * gnome-session/help/Makefile.am
+ * gnome-session/help/C/Makefile.am
+ * gnome-session/help/C/session-C.omf
+ * gnome-session/help/C/session.sgml
+ * gnome-session/help/C/figures/*.png
+ * gnome-session/help/ja/Makefile.am
+ * gnome-session/help/ja/session-C.omf
+ * gnome-session/help/ja/session.sgml
+ * gnome-session/help/ja/figures/*.png
+ removing old docs cruft, fixes bug #113567
+
+==================== 2.3.3.1 ====================
+
+2003-07-04 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.3.3.1.
+
+2003-06-21 Samúel Jón Gunnarsson <sammi@techattack.nu>
+
+ * configure.in: Added "is" in ALL_LINGUAS
+
+2003-06-19 Pasupathi Duraisamy <pasupathi.duraisamy@wipro.com>
+
+ * gnome-session/gsm-client-editor.c:
+ * gnome-session/startup-programs.c:
+ Allow only numeric values to Priority spin button.
+ Fixes bugzilla bug #115352
+
+2003-06-15 Joël Brich <joel.brich@laposte.net>
+
+ * configure.in: Added "eo" to ALL_LINGUAS.
+
+2003-06-09 Bill Haneman <bill.haneman@sun.com
+
+ * main.c:
+ Check "accessibility" gconf key and call
+ gsm_assistive_technologies_start if enabled.
+ Implementation for #113307.
+
+ * gnome-session/gsm-at-startup.h: New file.
+
+ * gnome-session/gsm-at-startup.c: New file.
+ Execute all of the assistive technologies in the
+ /desktop/gnome/accessibility/startup/exec_ats gconf list.
+
+==================== 2.3.3 ====================
+
+2003-06-06 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: 2.3.3.
+
+2003-05-20 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: 2.3.2.
+
+2003-05-15 Mark McLoughlin <mark@skynet.ie>
+
+ * [sg|x]gmldocs.make: replace leading spaces with tabs.
+ Fix from Art Haas.
+
+2003-05-15 Masahiro Sakai <sakai@tom.sfc.keio.ac.jp>
+
+ * configure.in: call AC_CHECK_HEADERS and check sys/param.h.
+
+2003-05-09 Telsa Gwynne <hobbit@aloss.ukuu.org.uk>
+
+ * configure.in: Added cy to ALL_LINGUAS
+
+2003-05-06 Danilo Šegan <dsegan@gmx.net>
+
+ * configure.in: Removed "sp" and added "sr@Latn" to ALL_LINGUAS.
+
+2003-05-04 Arvind Samptur <arvind.samptur@wipro.com>
+
+ * configure.in: Version 2.3.1
+ * NEWS update for 2.3.1
+
+2003-04-22 Alexander Larsson <alexl@redhat.com>
+
+ * configure.in:
+ Look for Xrandr.
+
+2003-04-21 Taneem Ahmed <taneem@eyetap.org>
+
+ * configure.in: Added "bn" to ALL_LINGUAS.
+
+2003-04-02 Sergey V. Oudaltsov <sergey.oudaltsov@clients.ie>
+
+ * gnome-session/splash-widget.c: primitive customization for
+ icons on startup. Just "better than nothing" solution.
+
+2003-03-26 Arvind Samptur <arvind.samptur@wipro.com>
+ * configure.in: bump version to 2.3.0.
+ Guess, Mark missed that 2.3.0 release was on.
+
+2003-03-14 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: bump version number to 2.3.1 and
+ require gtk+ and libgnomeui >= 2.2.0.
+
+2003-03-13 Christian Rose <menthos@menthos.com>
+
+ * configure.in: Added "ml" to ALL_LINGUAS.
+
+2003-02-20 Balamurali Viswanathan <balamurali.viswanathan@wipro.com>
+
+ *acconfig.h: Added HAVE_GTK_MULTIHEAD for egg-screen-exec
+
+2003-02-18 Roozbeh Pournader <roozbeh@sharif.edu>
+
+ * configure.in: Added "fa" to ALL_LINGUAS.
+
+2003-02-17 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: bump up to 2.3.1. 2.2.x development
+ is on the gnome-2-2 branch.
+
+2003-02-09 Christian Rose <menthos@menthos.com>
+
+ * configure.in: Added "kn" to ALL_LINGUAS.
+
+2003-02-06 Christian Rose <menthos@menthos.com>
+
+ * configure.in: Added "id" to ALL_LINGUAS.
+
+2003-02-04 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.2.0.2.
+
+2003-01-22 Christian Rose <menthos@menthos.com>
+
+ * configure.in: Added "mn" to ALL_LINGUAS.
+
+2003-01-21 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * configure.in: tell Makefile's about aclocal flags
+
+2003-01-22 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.2.0.1.
+
+2003-01-21 Jakub Steiner <jimmac@ximian.com>
+
+ * gnome-session/gnome-splash.png: gnome 2.2 splash
+
+2003-01-21 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.2.0.
+
+2003-01-16 Pablo Saratxaga <pablo@mandrakesoft.com>
+
+ * configure.in: Added Amharic (am), Arabic (ar) to ALL_LINGUAS
+
+2003-01-06 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.1.90.
+
+2002-12-17 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.1.5.
+
+2002-12-10 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.1.4.
+
+2002-12-10 Mark McLoughlin <mark@skynet.ie>
+
+ * man/gnome-session.1.in: apply patch
+ from Alex Duggan to fixup reference
+ to save-session. Fixes #100515.
+
+2002-12-10 Mark McLoughlin <mark@skynet.ie>
+
+ * man/gnome-session-save.1: renamed from
+ session-save.1 and apply patch from
+ Christian Marillat. Fixes #100514.
+
+ * man/Makefile.am:
+ * man/default.session.5.in,
+ man/gnome-session-save.1,
+ man/gnome-session.1.in,
+ man/gnome-wm.1: moved here from
+ gnome-session/gnome-session.
+
+ * man/Makefile.am, gnome-session/Makefile.am,
+ configure.in: updated.
+
+2002-11-28 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.1.3.
+
+2002-11-04 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.1.2.
+
+2002-11-03 Dmitry G. Mastrukov <dmitry@taurussoft.org>
+
+ * configure.in: Added Belarusian to ALL_LINGUAS
+
+2002-10-14 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.1.1.
+
+2002-10-02 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in:
+ output gnome-session/gnome-session.schemas.in
+
+2002-09-28 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.1.0.
+
+2002-09-19 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: require gtk+ 2.1.0 for the
+ multihead stuff.
+
+2002-08-08 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: add check for gtk+ with multihead
+ support.
+
+2002-07-30 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: set version to 2.1.0. 2.0.x
+ development is on the gnome-2-0 branch.
+
+2002-07-30 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.0.3.
+
+2002-07-30 Mark McLoughlin <mark@skynet.ie>
+
+ * man/gnome-libice-check.1:
+ * man/gnome-libice-check.sgml:
+ * man/gnome-login-check.1:
+ * man/gnome-login-check.sgml: remove old man pages.
+
+2002-07-25 jacob berkman <jacob@ximian.com>
+
+ * configure.in: bs.po file was never committed, so it from
+ ALL_LINGUAS
+
+2002-07-25 Pablo Saratxaga <pablo@mandrakesoft.com>
+
+ * configure.in: Added Bosnian (bs) to ALL_LINGUAS
+
+2002-07-16 Michael Meeks <michael@ximian.com>
+
+ * configure.in: remove canvas check.
+
+2002-07-15 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.0.2.
+
+Fri Jul 12 10:07:29 2002 George Lebl <jirka@5z.com>
+
+ * gnome-session/save-session.desktop.in,
+ gnome-session/session-properties.desktop.in: Add Encoding=UTF-8,
+ and add ';' to the end of the categories list as per the
+ standard
+
+2002-07-12 Brian Cameron <Brian.Cameron@sun.com>
+
+ * configure.in
+ Now support esd when it is installed via the --with-esd-dir
+ configure option
+
+2002-07-11 Brian Cameron <Brian.Cameron@sun.com>
+
+ * configure.in
+ Now support gconf-sanity-check when it is installed in libexec.
+
+2002-07-08 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: add check for rsh and define
+ RSH_COMMAND.
+
+2002-07-01 jacob berkman <jacob@ximian.com>
+
+ * configure.in: nuke login check stuffis
+
+2002-06-21 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: enable compile warnings.
+
+2002-06-19 jacob berkman <jacob@ximian.com>
+
+ * configure.in: check for esound, fix halt/reboot checks, and
+ gereate LIBS for gnome-login-check and gnome-smproxy
+
+2002-06-18 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.0.1.
+
+2002-06-10 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 2.0.0.
+
+2002-06-05 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 1.5.21.
+
+2002-05-28 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 1.5.20.
+
+2002-05-18 Kjartan Maraas <kmaraas@gnome.org>
+
+ * configure.in: Added "mk" to ALL_LINGUAS.
+
+2002-05-16 Mark McLoughlin <mark@skynet.ie>
+
+ * HACKING, README: update to be a little more useful.
+
+2002-05-13 Naba Kumar <kh_naba@users.sourceforge.net>
+
+ * configure.in: Added hi in ALL_LINGUAS
+
+2002-15-13 Glynn Foster <glynn.foster@sun.com>
+
+ * configure.in: Version 1.5.19
+ * NEWS: Update for 1.5.19
+
+2002-05-13 jacob berkman <jacob@ximian.com>
+
+ * configure.in: check for gconftool
+
+2002-04-29 Glynn Foster <glynn.foster@sun.com>
+
+ * NEWS: Update for 1.5.18.
+
+2002-04-29 Glynn Foster <glynn.foster@sun.com
+
+ * configure.in: Version 1.5.18.
+
+2002-04-22 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 1.5.17.
+
+2002-04-18 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: update our requirements so
+ people aren't using crufty libraries.
+
+2002-04-15 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 1.5.16.
+
+2002-04-01 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 1.5.15.
+
+2002-04-01 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 1.5.14.
+
+2002-03-25 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 1.5.13.
+
+2002-03-18 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 1.5.12.
+
+2002-03-13 Gregory Leblanc <gleblanc@linuxweasel.com>
+
+ * gnome-session.spec.in: Rewrite from Chris Chabot
+
+2002-03-12 Shivram U <shivaram.upadhyayula@wipro.com>
+
+ * configure.in: Checking for X Development libraries explicitly.
+ * gnome-session/Makefile.am : Added X_LIBS to the LD_ADD flags.
+ * smproxy/Makefile.am : Added X_LIBS to the LDADD flags. Fixes #73882
+
+2002-03-11 Glynn Foster <glynn.foster@sun.com>
+
+ * README: Update.
+ * autogen.sh: Update.
+ * gnome-session/ChangeLog: Update.
+
+2002-02-25 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 1.5.11.
+
+2002-02-21 Laszlo Peter <laca@ireland.sun.com>
+
+ * configure.in: find the correct path to the reboot/halt
+ commands or let the user specify with --with-reboot-command
+ and --with-halt-command.
+
+ * gnome-session/Makefile.am: define HALT_COMMAND and REBOOT_COMMAND
+
+ * gnome-session/logout.c: use the HALT_COMMAND and REBOOT_COMMAND
+ macros instead of the hard coded paths.
+
+ (reviewed by Mark McLoughlin <mark@skynet.ie>)
+
+2002-02-19 Mark McLoughlin <mark@skynet.ie>
+
+ * man/Makefile.am: remove man pages for apps
+ not installed by this package.
+
+2002-02-18 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 1.5.10.
+
+2002-02-13 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: Version 1.5.9.
+
+2002-02-13 Mark McLoughlin <mark@skynet.ie>
+
+ * AUTHORS: update for authors of gsm and smproxy.
+
+ * HACKING, MAINTAINERS: me and george for now.
+
+ * README: upd.
+
+ * configure.in: remove cruft.
+
+ * Makefile.am, gnome-desktop.spec.in: rename spec file.
+
+2002-02-12 Mark McLoughlin <mark@skynet.ie>
+
+ * configure.in: change GETTEXT_PACKAGE. Thanks Jacob.
+
+2002-02-12 Mark McLoughlin <mark@skynet.ie>
+
+ gnome-session module split off from gnome-core.
+
+ * Makefile.am, autogen.sh, configure.in: initial work
+ to get things building.
+
diff --git a/ChangeLog.pre-git b/ChangeLog.pre-git
new file mode 100644
index 0000000..22fc016
--- /dev/null
+++ b/ChangeLog.pre-git
@@ -0,0 +1,4082 @@
+2009-04-14 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.26.2
+
+==================== 2.26.1 ====================
+
+2009-04-14 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS: version 2.26.1
+
+2009-04-10 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/main.c: (require_dbus_session): when relaunching with
+ dbus-launch, correctly copy arguments that were passed to
+ gnome-session over to the new call
+ Fix bug #574310.
+
+2009-04-10 Vincent Untz <vuntz@gnome.org>
+
+ * tools/gnome-session-save.c: (main): make gnome-session-save --kill
+ --silent work as --force-logout (no inhibitor dialog).
+ Fix bug #574982.
+
+2009-04-09 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-manager.c: (do_inhibit_dialog_action): remove
+ comment that is now wrong
+ (query_end_session_complete): pass the right action to the inhibit
+ dialog so that the button doesn't always tell "Log out anyway", but
+ "Shutdown anyway" when it's about shutting down.
+
+2009-04-08 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.26.1
+
+==================== 2.26.0.90 ====================
+
+2009-04-08 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * configure.in: version 2.26.0.90
+
+2009-04-08 Vincent Untz <vuntz@gnome.org>
+
+ Make reboot and shutdown leave the session properly, by letting apps
+ exit before doing the real reboot/shutdown.
+
+ Note that because of the ConsoleKit policies, the ways it's handled
+ when there are more than one user logged in or when the policy always
+ require a password might be a bit different:
+ - in the usual case (single user, no password required), everything
+ works as expected.
+ - in the multiple users case (password generally required once), we
+ ask for the password before trying to exit the session.
+ - if the password is required each time the ConsoleKit action is
+ called, then we'll ask for the password only once, after having made
+ all apps exit. If this doesn't work (wrong password), since the
+ session is killed anyway, we log out and ask gdm to do the action.
+
+ * gnome-session/gsm-marshal.list: add new signature that we need
+ * gnome-session/gsm-consolekit.[ch]: add new privileges-completed
+ signal
+ (gsm_consolekit_class_init): add new signal
+ (gsm_consolekit_get_result_for_action): new, split from
+ gsm_consolekit_can_do_action()
+ (gsm_consolekit_can_do_action): ensure that the CK connection works
+ here (instead of requiring callers to do it), and use
+ gsm_consolekit_get_result_for_action()
+ (gsm_consolekit_is_session_for_other_user): new, ask ConsoleKit if a
+ session object is for a different user than the current user (ignoring
+ the login sessions)
+ (gsm_consolekit_is_single_user): new, determine if there's only a
+ single user logged in on this machine
+ (obtain_privileges_cb): new, PolicyKit callback when the privileges
+ were obtained/denied, to send the privileges-completed signal
+ (gsm_consolekit_obtain_privileges_for_action): new, obtain the
+ PolicyKit privileges for a specific action
+ (gsm_consolekit_get_privileges_for_actions): new, to know if we have
+ privileges for a set of actions, and request the privileges if needed
+ (gsm_consolekit_get_restart_privileges): new, trivial
+ (gsm_consolekit_get_stop_privileges): new, trivial
+ (gsm_consolekit_can_restart): do not ensure that the CK connection
+ works here, it will be done in gsm_consolekit_can_do_action()
+ (gsm_consolekit_can_stop): ditto
+
+ * gnome-session/gsm-manager.c: we add a logout type variable that lets
+ us remember what should be done when gnome-session exits.
+ (quit_request_completed): new, callback that will make gnome-session
+ exit after the ConsoleKit call to Stop/Restart has been done. If the
+ ConsoleKit call wasn't successful, we fallback on gdm (since we're in
+ the EXIT phase, and all apps have quitted, there's no point in not
+ asking gdm to do that).
+ (gsm_manager_quit): new, to do the right thing to log out depending on
+ what the user wanted to achieve when logging out.
+ (end_phase): use gsm_manager_quit() instead of directly calling
+ gtk_main_quit()
+ (cancel_end_session): reset the logout type to none
+ (do_attempt_reboot), (do_attempt_shutdown), (manager_attempt_reboot),
+ (manager_attempt_shutdown): killed/merged in
+ request_reboot/request_shutdown
+ (do_inhibit_dialog_action): renamed from do_dialog_action(); for
+ shutdown and reboot, we just do like logout and end the phase.
+ (inhibit_dialog_response): s/do_dialog_action/do_inhibit_dialog_action
+ (query_end_session_complete): add a comment about
+ gsm_inhibit_dialog_new to make it clear that the
+ GSM_LOGOUT_ACTION_LOGOUT parameter is fine for shutdown and reboot too
+ (request_reboot_privileges_completed): new, handle the fact that we got
+ the privileges from ConsoleKit to do the reboot.
+ (request_reboot): ask ConsoleKit for the privileges to reboot, and if
+ it doesn't work (no ConsoleKit), just end the phase
+ (request_shutdown_privileges_completed), (request_shutdown): see above
+ changes for reboot functions
+ (request_logout): set the logout type
+
+2009-04-08 Vincent Untz <vuntz@gnome.org>
+
+ Remove the 1-second delay to display the inhibit dialog when an
+ application is blocking logging out.
+
+ * gnome-session/gsm-manager.c: (query_end_session_complete): remove the
+ query timeout since it might still be running
+ (do_phase_query_end_session): do not remove the query timeout here:
+ it's the start of a phase, so there's no such timeout
+ (on_client_end_session_response): rework a bit to make sure we call
+ query_end_session_complete() if we are at the end of
+ GSM_MANAGER_PHASE_QUERY_END_SESSION
+
+2009-04-08 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-manager.c: (do_phase_end_session),
+ (do_phase_exit): use GSM_MANAGER_PHASE_TIMEOUT instead of hard-coding
+ 10 seconds everywhere.
+
+2009-04-08 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-logout-dialog.c: (on_ck_request_completed): killed
+ (gsm_logout_dialog_init): don't connect to request-completed of the
+ consolekit object: we actually don't do anything in the callback
+ anyway...
+
+2009-04-08 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-xsmp-client.c: (save_yourself_done_callback): only
+ call SmsSaveComplete() if we are still in a SaveYourself state. My
+ previous change about this didn't take into account the case where the
+ logout is cancelled, in which case SmsSaveComplete() shouldn't be
+ called.
+
+2009-04-05 Matthias Clasen <mclasen@redhat.com>
+
+ * gnome-session/gs-idle-monitor.c (handle_alarm_notify_event): Ignore
+ XSyncAlarmDestroyed events, and don't spam .xsession-errors for these.
+
+2009-03-25 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-manager.c: (end_phase): put the call that
+ potentially saves the session here, at the end of END_SESSION instead
+ of many random places
+ (do_phase_end_session),
+ (do_phase_end_session_part_2), (on_client_end_session_response): remove
+ calls to maybe_save_session()
+
+2009-03-25 Vincent Untz <vuntz@gnome.org>
+
+ Remove the END_SESSION_LAST phase since it was considered to break the
+ design. Instead, just use a second step in the END_SESSION phase.
+
+ * gnome-session/gsm-manager.[ch]: (phase_num_to_name): remove
+ END_SESSION_LAST phase
+ (end_phase): always clean up next_query_clients, and remove
+ END_SESSION_LAST phase.
+ (on_phase_timeout): remove END_SESSION_LAST phase
+ (_client_end_session): change the function signature so that we can
+ merge this old function and _client_end_session_last
+ (_client_end_session_last): killed
+ (_client_end_session_helper): new, helper used for
+ do_phase_end_session() since _client_end_session() cannot be directly
+ used anymore
+ (do_phase_end_session): use _client_end_session_helper(), and save
+ session if there's nothing to do
+ (do_phase_end_session_last): renamed to...
+ (do_phase_end_session_part_2): ... this. Don't reset the phase timeout
+ since we're still in the END_SESSION phase. Clean up next_query_clients
+ after having used it.
+ (start_phase): always clean up next_query_clients, remove
+ END_SESSION_LAST phase
+ (maybe_save_session): s/END_SESSION_LAST/END_SESSION/
+ (on_client_end_session_response): only accept to end a client last if
+ we're in END_SESSION. Start the second step of END_SESSION if there's
+ no clients that haven't replied, no inhibitor and if there are clients
+ to end last. Note that we don't remove the phase timeout here since it
+ will either be needed in the second step or will be removed in
+ end_phase().
+
+2009-03-25 Vincent Untz <vuntz@gnome.org>
+
+ Allow XSMP clients to interact only during the
+ GSM_MANAGER_PHASE_QUERY_END_SESSION phase. If they didn't interact
+ during this phase, too bad for them.
+ The idea is that GSM_MANAGER_PHASE_QUERY_END_SESSION is about letting
+ them save user data and interact if it's needed for saving user data,
+ while GSM_MANAGER_PHASE_END_SESSION is about telling them that they
+ really have to save data now if they need too.
+
+ Also if we have a queued SaveYourself, remember if it allowed
+ interaction or not.
+
+ * gnome-session/gsm-xsmp-client.c: (gsm_xsmp_client_init): initialize
+ next_save_yourself_allow_interact
+ (do_save_yourself): change forceful argument to allow_interact for
+ better clarity, and save it to next_save_yourself_allow_interact when
+ relevant
+ (xsmp_cancel_end_session): reset next_save_yourself_allow_interact
+ (xsmp_query_end_session): update for do_save_yourself() argument
+ change, and also enforce the fact that we don't save the state of the
+ client here
+ (xsmp_end_session): force the client to not interact here
+ (save_yourself_request_callback): update for do_save_yourself()
+ argument change
+ (save_yourself_done_callback): use next_save_yourself_allow_interact if
+ there was a queued SaveYourself.
+
+2009-03-25 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-manager.c: (maybe_save_session): re-enable session
+ saving (revert the change that was committed just before 2.26.0).
+
+2009-03-25 Vincent Untz <vuntz@gnome.org>
+
+ * tools/gnome-session-save.c: hide deprecated command-line options from
+ --help, but still accept them.
+ (main): return 0 instead of a variable that is always set to 0
+
+2009-03-25 Vincent Untz <vuntz@gnome.org>
+
+ Create a END_SESSION_LAST phase during which we handle the clients
+ which wanted to be ended last.
+ For this, we need to keep a list of clients in that case.
+
+ * gnome-session/gsm-client.h: add a new
+ GSM_CLIENT_END_SESSION_FLAG_LAST flag, to tell the client it's running
+ last.
+ * gnome-session/gsm-manager.[ch]: (phase_num_to_name): handle new phase
+ (end_phase): empty the list of clients that wants to be ended last if
+ it's not a relevant phase. Also handle new phase.
+ (on_phase_timeout): handle new phase
+ (_client_end_session_last): new, to tell a client that the session is
+ being ended. Works like _client_end_session()
+ (do_phase_end_session_last): prepare the right flags to be used for
+ each clients via _client_end_session_last(). Note that we don't use all
+ clients in the session here, but the list of clients that wanted to be
+ ended last.
+ We use a 10 seconds timeout for that phase to not block on clients that
+ don't reply. Also, if there's no client in the session, then save the
+ session if auto-save is enabled.
+ (start_phase): empty the list of clients that wants to be ended last if
+ it's not a relevant phase. Also handle new phase.
+ (maybe_save_session): make this call valid in END_SESSION_LAST instead
+ of END_SESSION
+ (on_client_end_session_response): save the client in a specific list if
+ it wants to be ended last.
+ * gnome-session/gsm-xsmp-client.c: (xsmp_save_yourself_phase2):
+ uncomment
+ (xsmp_end_session): if the client is running last, then it means it's
+ phase2 of SaveYourself, so use xsmp_save_yourself_phase2()
+
+2009-03-25 Vincent Untz <vuntz@gnome.org>
+
+ s/gdm_client_end_session_response/gsm_client_end_session_response/g
+
+ * gnome-session/gsm-client.c: (gsm_client_end_session_response):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-dbus-client.c: (handle_end_session_response):
+ * gnome-session/gsm-xsmp-client.c:
+ (save_yourself_phase2_request_callback),
+ (interact_request_callback), (interact_done_callback),
+ (save_yourself_done_callback):
+
+2009-03-25 Vincent Untz <vuntz@gnome.org>
+
+ Allow clients to specify that they want to be ended last (this mainly
+ matches the Phase2 of SaveYourself in XSMP). The server doesn't use
+ this information yet.
+
+ * gnome-session/gsm-client.[ch]: (gsm_client_class_init): add new
+ do_last argument to END_SESSION_RESPONSE signal
+ (gdm_client_end_session_response): add do_last and use it
+ * gnome-session/gsm-marshal.list: updated for new signature
+ * gnome-session/gsm-manager.c: (on_client_end_session_response): add
+ do_last parameter, unused for now
+ * gnome-session/gsm-dbus-client.c: (handle_end_session_response): pass
+ FALSE as do_last
+ * gnome-session/gsm-xsmp-client.c:
+ (save_yourself_phase2_request_callback): pass TRUE as do_last since
+ that's what the phase2 is
+ (interact_request_callback): pass FALSE as do_last
+ (interact_done_callback): pass FALSE as do_last
+ (save_yourself_done_callback): pass FALSE as do_last
+
+2009-03-25 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-manager.c: (do_phase_end_session),
+ (auto_save_is_enabled): coding style nit-picking
+
+2009-03-25 Vincent Untz <vuntz@gnome.org>
+
+ Allow an interacting app to cancel the logout.
+
+ * gnome-session/gsm-client.[ch]: (gsm_client_class_init): add new
+ cancel argument to END_SESSION_RESPONSE signal
+ (gdm_client_end_session_response): add cancel and use it
+ * gnome-session/gsm-marshal.list: updated for new signature
+ * gnome-session/gsm-manager.c: (on_client_end_session_response): add
+ cancel paramter, and call cancel_end_session if cancel is TRUE
+ * gnome-session/gsm-dbus-client.c: (handle_end_session_response): pass
+ FALSE as cancel
+ * gnome-session/gsm-xsmp-client.c:
+ (save_yourself_phase2_request_callback): pass FALSE as cancel
+ (interact_request_callback): pass FALSE as cancel
+ (interact_done_callback): pass the value returned by the client as
+ cancel
+ (save_yourself_done_callback): pass FALSE as cancel
+
+2009-03-25 Vincent Untz <vuntz@gnome.org>
+
+ Actually allow XSMP clients to interact during the logout. It works
+ quite well with the inhibitor infrastructure since a JIT inhibitor will
+ be created.
+ Note that the user will get two dialogs: eg, when gedit has an unsaved
+ document, the user will see the gedit save/cancel dialog and the
+ inhibit dialog. That's actually a good thing since the save/cancel
+ dialog from gedit might be in another workspace, and so the inhibit
+ dialog makes sure the user knows what's going on.
+
+ * gnome-session/gsm-xsmp-client.c: (xsmp_interact): uncomment
+ (interact_request_callback): stop cancelling the session when a client
+ wants to interact, and allow the client to interact.
+
+2009-03-25 Vincent Untz <vuntz@gnome.org>
+
+ Make session saving works a bit better by telling client to not just
+ save the global state, but also the local state when relevant.
+
+ * gnome-session/gsm-client.h: add new GSM_CLIENT_END_SESSION_FLAG_SAVE
+ * gnome-session/gsm-manager.c: (do_phase_end_session): if the session
+ should be autosaved, then pass the GSM_CLIENT_END_SESSION_FLAG_SAVE
+ flag
+ (do_phase_query_end_session): add a comment explaining why we don't use
+ the GSM_CLIENT_END_SESSION_FLAG_SAVE flag
+ * gnome-session/gsm-xsmp-client.c: (xsmp_query_end_session),
+ (xsmp_end_session): depending on the presence of the
+ GSM_CLIENT_END_SESSION_FLAG_SAVE flag, use SmSaveBoth or SmSaveGlobal
+
+2009-03-24 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-xsmp-client.c: (do_save_yourself): just add some
+ paranoia code to make sure our state is consistent
+ (xsmp_cancel_end_session): reset the save_yourself state here since we
+ cancel the operation anyway
+ (save_yourself_phase2_request_callback): fix to not behave exactly like
+ SaveYourselfDone. This is wrong according to XSMP.
+ (save_yourself_done_callback): always call SmsSaveComplete() (it's
+ expected by XSMP), and ignore the success argument. It's actually
+ useless.
+
+2009-03-24 Vincent Untz <vuntz@gnome.org>
+
+ Rework deeply the code that writes the saved session to desktop files:
+ we now properly discard a client when removing it; we also make sure we
+ save the current session before we completely remove the previously
+ saved session (to be on the safe side).
+ Note that we only discard a client when the new saved session doesn't
+ use the same discard command: for example, when metacity saves its
+ state, it will reuse the same discard command and so we can't discard
+ the old metacity client (it would discard the new client).
+
+ * gnome-session/gsm-util.[ch]: (gsm_util_get_empty_tmp_session_dir):
+ new function to get a temporary directory where to save the new
+ session, while we still keep the previously saved session. It also
+ makes sure the directory is empty.
+ * gnome-session/gsm-session-save.[ch]: (save_one_client): update to
+ make sure we remember the discard command from the client.
+ (gsm_session_save): rework to first save the session in the temporary
+ directory (and remember the discard commands from the saved clients),
+ and then clear the old session. We finish by renaming the temporary
+ directory to its final name.
+ (gsm_session_clear_one_client): new, to properly clear one client from
+ a saved session. We unlink the desktop file, but also run the discard
+ command if it's not used by any other client from the newly saved
+ session.
+ (gsm_session_clear_saved_session): change to clear a saved session in a
+ specified directory, and use gsm_session_clear_one_client() instead of
+ just unlinking the desktop file. Also add missing g_dir_close().
+
+2009-03-24 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-xsmp-client.c: (xsmp_save): just don't return a
+ keyfile if there's no restart command for this client (ie, we won't
+ save this client). Also make sure keyfile is properly initialized to
+ NULL to avoid an undefined return value in that case.
+
+2009-03-24 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-xsmp-client.c: (xsmp_get_discard_command):
+ uncomment
+ (xsmp_save): when saving the xsmp client to a desktop file, also save
+ the discard command since we'll want to use it at some point when
+ discarding the saved app.
+
+2009-03-24 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-manager.c: (cancel_end_session): ignore this if
+ we're not in a relevant phase. Also make sure the inhibit dialog is
+ destroyed before removing inhibitors (which would activate the
+ inhibit dialog)
+
+2009-03-24 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-util.c: (ensure_dir_exists): create the dir with
+ permission 0755.
+ (gsm_util_get_saved_session_dir): use ~/.config instead of ~/.gnome2.
+ It's a good time to start using the xdg folders before we actually
+ start putting data.
+
+2009-03-24 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-inhibit-dialog.c: (update_dialog_text): fix debug
+ string
+ * gnome-session/gsm-manager.c: (cancel_end_session): add debug string
+ (gsm_manager_shutdown): fix debug string
+
+2009-03-24 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-inhibit-dialog.c: (add_inhibitor): use
+ gsm_util_get_desktop_dirs() instead of just gsm_util_get_app_dirs().
+ Also try to handle desktop filenames that are an absolute path the best
+ way possible (this happens with OpenOffice.org).
+ * gnome-session/gsm-util.[ch]: (gsm_util_get_desktop_dirs): new
+ function, to return all the directories where we look up for the
+ desktop files.
+
+2009-03-24 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-inhibit-dialog.c: (add_inhibitor): handle NULL
+ errors instead of crashing, which can happen in some cases in
+ EggDesktopFile.
+
+2009-03-24 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-inhibit-dialog.c: use a 32x32 icon size for icons,
+ looks better this way.
+
+2009-03-24 Vincent Untz <vuntz@gnome.org>
+
+ Let all processes cleanly exit on exit.
+
+ * gnome-session/gsm-manager.c: (end_phase): rework with a switch so
+ that it's easy to see what's going on for which phases. We also don't
+ exit immediately when we reach the exit phase, and instead let
+ start_phase() do its work
+ (_client_stop): stop a client
+ (do_phase_exit): create a 10 second timeout that will force the end of
+ the phase, and tells each client to stop via _client_stop() so they can
+ have a chance to properly exit before we quit.
+ (start_phase): call do_phase_exit() on exit phase
+
+2009-03-18 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in:
+ * doc/man/*: rework the man pages so that they're up-to-date.
+
+2009-03-16 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.26.1
+
+==================== 2.26.0 ====================
+
+2009-03-16 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * configure.in: version 2.26.0
+
+2009-03-16 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gsm-manager.c: (maybe_save_session): disable session
+ saving with "#if 0" for the 2.26.0 release: it's not ready yet.
+
+2009-03-14 Vincent Untz <vuntz@gnome.org>
+
+ * capplet/gsm-properties-dialog.c:
+ (gsm_properties_dialog_constructor): do not call gtk_widget_show_all on
+ the dialog, just gtk_widget_show
+ * data/session-properties.glade: hide the "save current session" button
+ since it doesn't do anything at the moment, so it's confusing to have
+ it there.
+
+2009-03-08 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 574399 – turn off debug spew
+
+ * gnome-session/main.c: ditto.
+
+2009-03-03 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.26.0
+
+==================== 2.25.92 ====================
+
+2009-03-03 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * configure.in: version 2.25.92
+
+2009-03-01 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/gsm-consolekit.c: add constant holding login window
+ session type value to be used in different places of the code.
+ * gnome-session/gsm-logout-dialog.c: use new consolekit constant for
+ login window session type.
+ * gnome-session/gsm-manager.c: don't save session if session type is
+ login window.
+ * gnome-session/main.c: don't load saved session if session type is
+ login window.
+
+2009-02-26 Matthias Clasen <mclasen@redhat.com>
+
+ * gnome-session/gs-idle-monitor.c: Ask for AlertNotify in a way
+ that XSync understands. (#567958)
+
+2009-02-26 Vincent Untz <vuntz@gnome.org>
+
+ * capplet/gsm-properties-dialog.c: (edit_app_dialog):
+ * tools/gnome-session-save.c: (display_error): use a Close button
+ instead of an Ok button in error dialogs. If considered an UI change,
+ then it's trivial and it doesn't affect documentation.
+
+2009-02-25 Paolo Borelli <pborelli@katamail.com>
+
+ * gnome-session/gsm-client.c:
+ chain up finalize
+
+2009-02-23 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/Makefile.am, gnome-session/gsm-resumed-app.[ch]:
+ remove GsmResumedApp code as it's being used anymore.
+
+2009-02-23 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/main.c, gnome-session/gsm-manager.c: remove code for
+ handling legacy session saving files as it won't be supported anymore.
+
+2009-02-23 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 552387 – gnome-session doesn't save session anymore
+
+ * gnome-session/Makefile.am: add gsm-session-save.[ch] to the build.
+ * gnome-session/gsm-session-save.[ch]: session saving functions.
+ * gnome-session/gsm-autostart-app.c (load_desktop_file): check if the
+ desktop file has X-GNOME-Autostart-startup-id to define startup id of
+ the GsmAutostartApp.
+ * gnome-session/gsm-client.[ch] (gsm_client_save): add gsm_client_save
+ virtual method which should be implemented by each type of client.
+ * gnome-session/gsm-dbus-client.c, gnome-session/gsm-xsmp-client.c:
+ add respective gsm_client_save implementations. D-Bus clients still
+ don't implement saving.
+ * gnome-session/gsm-manager.c (auto_save_is_enabled,
+ maybe_save_session): save session state if auto save is enable before
+ finalizing the session.
+ * gnome-session/main.c (load_standard_apps): load GsmApps from the
+ saved session directory.
+
+2009-02-23 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/main.c, gnome-session/gsm-util.[ch]: move
+ find_desktop_file_for_app_name to gsm-util so that we can use it in
+ other places.
+
+2009-02-23 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/gsm-manager.c (user_logout): use gconf client from
+ GsmManager instead of getting a new one.
+
+2009-02-23 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/gsm-xsmp-client.c (do_save_yourself): add comments on
+ SmsSaveYourself parameters for clarity.
+
+2009-02-23 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/gsm-manager.c (on_xsmp_client_logout_request):
+ improve readability of conditional code.
+
+2009-02-23 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/gsm-manager.c: wrap too long lines into 80 cols.
+
+2009-02-23 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/gsm-manager.c: rename forceful attribute to
+ forceful_logout for clarity.
+
+2009-02-22 Lucas Rocha <lucasr@gnome.org>
+
+ * capplet/gsm-properties-dialog.c: use G_KEY_FILE_DESKTOP_* constants
+ instead of hardcoded groups and key names.
+
+2009-02-21 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/gsm-manager.c: coding style fixes from last commit.
+
+2009-02-21 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/gsm-manager.c (gsm_manager_start, cancel_end_session):
+ always use gsm_manager_set_phase to set manager phase for consistency.
+
+2009-02-21 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/gsm-manager.c: rename load_from_gconf to
+ load_idle_delay_from_gconf for clarity.
+
+2009-02-21 Matthias Clasen <mclasen@redhat.com>
+
+ * gnome-session/gsm-inhibit-dialog.c: Use system-log-out as icon,
+ instead of gnome-logout, which doesn't exist.
+
+2009-02-17 Frederic Crozat <fcrozat@mandriva.com>
+
+ * data/gsm-inhibit-dialog.glade:
+ Ensure treeview is included in a scrolled window with a shadow.
+
+2009-02-17 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.25.92.
+
+==================== 2.25.91 ====================
+
+2009-02-17 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * configure.in: version 2.25.91
+
+2009-02-13 Luca Ferretti <elle.uca@libero.it>
+
+ * data/gnome-session.schemas.in: better phrase for
+ "required_components_list" key, thanks to Dan Winship
+
+2009-02-13 Luca Ferretti <elle.uca@libero.it>
+
+ reviewed by: Vincent Untz <vuntz@gnome.org>
+
+ * capplet/gsm-properties-dialog.c: (gsm_properties_dialog_init):
+ Use "Startup Applications Preference" as window title to mach
+ capplet launcher Name.
+
+2009-02-13 Luca Ferretti <elle.uca@libero.it>
+
+ * data/gnome-session.schemas.in:
+ Removed obsolete "logout_option" key; fix and update long
+ description for "required_components_list" key.
+
+2009-02-12 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 570908 – capplet misnomer
+
+ * data/session-properties.desktop.in.in: change capplet name to
+ "Startup Applications" and the description to "Choose what
+ applications to start when you log in" to better match what the
+ capplet actually does nowadays.
+
+2009-02-11 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 556439 – improve logout/shutdown dialog messages
+
+ * gnome-session/gsm-consolekit.[ch]: add new
+ gsm_consolekit_get_current_session_type function to GsmConsolekit.
+ * gnome-session/gsm-logout-dialog.c (gsm_logout_dialog_timeout): only
+ message about logged user when using logout dialog from gdm.
+ Patch by Matthias Clasen.
+
+2009-02-11 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 565063 – Avoid restarting applications when shutting down
+
+ * gnome-session/gdm-signal-handler.[ch]
+ (gdm_signal_handler_set_fatal_func): redefine this function to receive
+ custom callback.
+ * gnome-session/gsm-manager.[ch]: added gsm_manager_set_phase
+ function.
+ * gnome-session/main.c: set session manager phase to
+ GSM_MANAGER_PHASE_EXIT when gnome-session process is shutting down.
+ Patch by Brian Cameron.
+
+2009-02-07 Matthias Clasen <mclasen@redhat.com>
+
+ * gnome-session/gs-idle-monitor.c (_xsync_alarm_set): Fix a
+ copy-and-paste error in debug output.
+
+2009-02-03 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.25.91.
+
+==================== 2.25.90 ====================
+
+2009-02-03 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * configure.in: version 2.25.90
+
+2009-01-28 Vincent Untz <vuntz@gnome.org>
+
+ * doc/dbus/spec-to-docbook.xsl:
+ * gnome-session/org.gnome.SessionManager.ClientPrivate.xml: fix
+ everything so that the dbus documentation is valid docbook.
+ Fix bug #569443.
+
+2009-01-28 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/gs-idle-monitor.c: (gs_idle_monitor_reset): fix build
+ when the XTest extension is not available.
+
+2009-01-26 Richard Hughes <richard@hughsie.com>
+
+ * gnome-session/org.gnome.SessionManager.xml:
+ Fix up the documentation to mention the session bus, not the
+ system bus.
+
+2009-01-23 Vincent Untz <vuntz@gnome.org>
+
+ * splash/splash-window.c: (layout_icon): fix a crash I had at some
+ point.
+ (gsm_splash_window_start): use 22x22 icons in the splash
+
+2009-01-22 Vincent Untz <vuntz@gnome.org>
+
+ * compat/Makefile.am: install autostart desktop files in
+ /etc/xdg/autostart
+
+2009-01-19 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.25.90.
+
+==================== 2.25.5 ====================
+
+2009-01-19 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * configure.in: version 2.25.5
+
+2009-01-18 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-presence.c (on_bus_name_owner_changed):
+ Compare the correct string for name owner changes.
+
+2009-01-18 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (load_from_gconf),
+ (on_gconf_key_changed):
+ * gnome-session/gsm-presence.c (set_session_idle),
+ (on_idle_timeout), (reset_idle_watch),
+ (on_screensaver_active_changed), (on_screensaver_proxy_destroy),
+ (on_bus_name_owner_changed), (register_presence),
+ (gsm_presence_constructor):
+ Fix timeout scale. Disable idle detection while screensaver
+ is active.
+
+2009-01-18 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-presence.c (reset_idle_watch),
+ (gsm_presence_set_idle_enabled), (gsm_presence_set_idle_timeout):
+ Reset the idle watch when the timeout property changes.
+
+2009-01-16 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-consolekit.c (gsm_consolekit_set_session_idle):
+ * gnome-session/gsm-consolekit.h:
+ * gnome-session/gsm-manager.c (on_presence_status_changed),
+ (gsm_manager_init):
+ Inform CK that session idle status has changed.
+
+2009-01-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/org.gnome.SessionManager.xml:
+ Add docs for inhibit idle.
+
+2009-01-15 William Jon McCann <jmccann@redhat.com>
+
+ * data/gnome-session.schemas.in:
+ * gnome-session/gsm-manager.c (gsm_manager_dispose),
+ (invalid_type_warning), (load_from_gconf), (on_gconf_key_changed),
+ (gsm_manager_init):
+ Add gconf key for idle delay.
+
+2009-01-14 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-presence.c:
+ * gnome-session/gsm-presence.h:
+ * gnome-session/org.gnome.SessionManager.Presence.xml:
+ Some changes based on comments from Robert McQueen.
+ Expose properties for status and status-text. Remove
+ getters.
+
+2009-01-11 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-presence.c (gsm_presence_set_status_text):
+ Add status text size limit.
+
+2009-01-11 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in:
+ * gnome-session/Makefile.am:
+ * gnome-session/gs-idle-monitor.c (_xsyncvalue_to_int64),
+ (_int64_to_xsyncvalue), (gs_idle_monitor_dispose), (_find_alarm),
+ (find_watch_for_alarm), (send_fake_event), (gs_idle_monitor_reset),
+ (handle_alarm_notify_event), (xevent_filter), (init_xsync),
+ (_init_xtest), (gs_idle_monitor_constructor),
+ (gs_idle_monitor_class_init), (get_next_watch_serial),
+ (idle_monitor_watch_new), (idle_monitor_watch_free),
+ (gs_idle_monitor_init), (gs_idle_monitor_finalize),
+ (gs_idle_monitor_new), (_xsync_alarm_set),
+ (gs_idle_monitor_add_watch), (gs_idle_monitor_remove_watch):
+ * gnome-session/gs-idle-monitor.h:
+ * gnome-session/gsm-inhibitor.h:
+ * gnome-session/gsm-manager.c (end_phase),
+ (gsm_manager_is_idle_inhibited), (update_idle), (start_phase),
+ (on_store_inhibitor_added), (on_store_inhibitor_removed),
+ (gsm_manager_dispose), (gsm_manager_init):
+ * gnome-session/gsm-presence.c (gsm_presence_error_quark),
+ (gsm_presence_error_get_type), (register_presence),
+ (gsm_presence_constructor), (gsm_presence_init),
+ (gsm_presence_get_status_text), (gsm_presence_get_status),
+ (on_idle_timeout), (gsm_presence_set_idle_enabled),
+ (gsm_presence_set_status_text), (gsm_presence_set_status),
+ (gsm_presence_set_idle_timeout), (gsm_presence_set_property),
+ (gsm_presence_get_property), (gsm_presence_finalize),
+ (gsm_presence_class_init), (gsm_presence_new):
+ * gnome-session/gsm-presence.h:
+ * gnome-session/org.gnome.SessionManager.Presence.xml:
+ Add presence API.
+
+2009-01-09 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 502944 – application icon gets tiny on desktop
+
+ * configure.in, data/icons/Makefile.am, data/icons/48x48/*: add icon
+ with 48x48 pixels.
+
+2009-01-09 Lucas Rocha <lucasr@gnome.org>
+
+ 550726 – Apps with an icon not existing in the icon theme displayed
+ with no icon
+
+ * capplet (append_app): check if defined icon name actually exists
+ in the icon theme. Use default icon otherwise.
+
+2009-01-08 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 554725 – resync gnome-session from libegg
+
+ egg/*: ditto. Patch by Dan Winship.
+
+2009-01-08 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 559145 – Double-click startup program entry to open edit dialog
+
+ * capplet/gsm-properties-dialog.c (setup_dialog, on_row_activated):
+ open the edit app dialog when activating the respective entry in the
+ view.
+
+2009-01-08 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 552218 – typo: "unable connect"
+
+ * gnome-session/gsm-util.c: fix typo.
+
+2009-01-08 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 551826 – Add NoDisplay=True to desktop files
+
+ * data/gnome-wm.desktop.in.in,
+ compat/gnome-settings-daemon-helper.desktop.in.in,
+ compat/at-spi-registryd-wrapper.desktop.in.in.in,
+ splash/gnome-session-splash.desktop.in.in.in:
+ define NoDisplay=true.
+
+2009-01-08 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 551766 – Automagic dependency on PolicyKit in configure.in
+
+ * configure.in: added support for explicit --enable-polkit and
+ --disable-polkit. The default (if nothing is specified) is auto.
+ Patch by Nirbheek Chauhan.
+
+2009-01-08 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 555369 – gnome-session-properties work improperly when key
+ X-GNOME-Autostart-enabled=false in .desktop
+
+ * capplet/gsm-properties-dialog.c (toggle_app, enable_app,
+ disable_app): move app enabling/disabling logic into toggle_app and
+ fix handling of X-GNOME-Autostart-enabled in .desktop files.
+ Patch by Halton Huo.
+
+2009-01-08 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 566858 – configure script does not check for sm package (needed to
+ check X11/SM/SMlib.h)
+
+ * configure.am, gnome-session/Makefile.am, egg/Makefile.am,
+ tools/Makefile.am: check for sm and ice libs through pkgconfig and use
+ it in the build.
+
+2009-01-06 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 557634 – gnome-session doesn't inspect $XDG_DATA_HOME/applications
+
+ * gnome-session/gsm-util.c (gsm_util_get_app_dirs): add
+ $XDG_DATA_HOME/applications to the list of app directories.
+ Patch by tuxce.
+
+2009-01-06 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 563640 – In all phases before APPLICATION, consider process
+ termination as completion
+
+ Most clients register using the session protocol. But it's perfectly
+ fine if a client simply exits upon completion, or forks and exits in
+ the parent when ready. This is indeed how we were treating phase
+ INITIALIZATION. There is no reason to not treat other non-APPLICATION
+ phases that way. The default clients for those phases (gnome-panel,
+ metacity, nautilus) register to the session, but for example,
+ libcanberra installed a script for phase DESKTOP to play login sound,
+ and since it doesn't connect to the session, gnome-session was
+ timeout'ing for that phase.
+
+ * gnome-session/gsm-manager.c (on_app_exited, _start_app): ditto.
+ Patch by Behdad Esfahbod.
+
+2009-01-06 Lucas Rocha <lucasr@gnome.org>
+
+ Bug 563354 – gnome-session does not close ICE connection for qt3 apps
+
+ * gnome-session/gsm-xsmp-client.c (gsm_xsmp_client_disconnect):
+ disable shutdown negotiation before closing the ICE connection when
+ connection is known to be terminated.
+ Patch by Edward Sheldrake.
+
+2008-12-14 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.25.4.
+
+==================== 2.25.3 ====================
+
+2008-12-14 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS: version 2.25.3
+
+2008-12-10 Vincent Untz <vuntz@gnome.org>
+
+ Kill libgnomeui dependency.
+
+ * configure.in: remove libgnomeui dep for splash, remove check for
+ libgnomeui for eggsmclient
+ * egg/Makefile.am: remove eggsmclient-libgnomeui.* stuff
+ * egg/eggsmclient-libgnomeui.[ch]: killed
+ * splash/Makefile.am: updated
+ * splash/gnome-session-splash.c: (load_pixbuf): changed to a helper
+ function
+ (load_pixbuf_relative_path): use g_get_system_data_dirs() instead of
+ gnome_program_locate_file()
+ (load_splash_pixbuf): updated
+ (setup_splash_window): don't unref the pixbuf if we didn't have a
+ pixbuf
+ (main): setup gettext, use GOption + gtk_init() instead of
+ gnome_program_init()
+
+2008-12-10 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/Makefile.am: fix build
+
+2008-12-10 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in:
+ * compat/Makefile.am:
+ * gnome-session/Makefile.am:
+ * splash/Makefile.am: try to sanitize things a bit so we can know which
+ part of gnome-session depends on which library
+
+2008-12-10 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: remove TIME_UTILITY and GNOME_SESSION_TARBALL_* since
+ it's unused, use GNOME_COMPILE_WARNINGS instead of some custom stuff
+ to define compiler warning flags
+ * capplet/Makefile.am:
+ * compat/Makefile.am:
+ * egg/Makefile.am:
+ * gnome-session/Makefile.am:
+ * splash/Makefile.am:
+ * tools/Makefile.am: add WARN_CFLAGS/DISABLE_DEPRECATED_CFLAGS
+ * gnome-session/gsm-inhibit-dialog.c: (add_inhibitor): fix compilation
+ warning
+ * splash/splash-window.c: (splash_window_expose_event): don't use
+ deprecated API
+ (splash_window_finalize): don't unref something we don't own
+
+2008-12-08 Ray Strode <rstrode@redhat.com>
+
+ * gnome-session/gsm-dbus-client.c
+ (client_dbus_filter_function):
+ Add patch from Tim Kosse to address
+ issue with multiple clients trying
+ to use the QueryEndSession dbus api
+ (bug 559469)
+
+2008-12-02 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.25.3.
+
+==================== 2.25.2 ====================
+
+2008-12-02 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:
+ * configure.in: version 2.25.2
+
+2008-11-26 Diego Escalante Urrelo <diegoe@gnome.org>
+
+ * gnome-session/gsm-util.c:
+ * gnome-session/main.c:
+ Don't do single includes for glib. Fixes #560786.
+
+2008-11-14 Stef Walter <stef@memberwebs.com>
+
+ * configure.in:
+ * compat/Makefile.am:
+ * compat/README:
+ * gnome-keyring-daemon-wrapper.c: (removed)
+ * gnome-keyring-daemon-wrapper.desktop.in.in.in: (removed)
+ Remove compat wrapper for gnome-keyring session interaction.
+
+2008-11-11 Ray Strode <rstrode@redhat.com>
+
+ * gnome-session/org.gnome.SessionManager.xml (CanShutdown)
+ * gnome-session/gsm-manager.[ch] (gsm_manager_can_shutdown):
+ Add new dbus api to say whether shutdown dialog is available.
+ (bug 536915)
+ * gnome-session/gsm-consolekit.c
+ (gsm_consolekit_can_do_action): new function to query
+ policykit to determine whether the current session is
+ authorized to shutdown/reboot/etc.
+
+2008-11-10 Matthias Clasen <mclasen@redhat.com>
+
+ * gnome-session/gsm-manager.c (gsm_manager_register_client):
+ Rewrite the app-finding code to make more sense.
+
+2008-11-10 Kjartan Maraas <kmaraas@gnome.org>
+
+ * gnome-session/gsm-util.c: (gsm_util_init_error):
+ Format specifier warning fix.
+ * splash/Makefile.am: Add GCONF_LIBS/GCONF_CFLAGS.
+ * tools/gnome-session-save.c: (display_error):
+ Format specifiers again.
+
+2008-10-29 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/main.c (acquire_name):
+ Don't try to print an undefined error message.
+
+2008-10-26 Matthias Clasen <mclasen@redhat.com>
+
+ * capplet/gsm-properties-dialog.c: Make the window resizable,
+ since it shows scrollbars and ellipsized text.
+
+2008-10-24 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in:
+ Don't try to link to gnome-keyring and libgnomeui
+ since we don't use them.
+
+2008-10-22 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.24.2.
+
+==================== 2.24.1 ====================
+
+2008-10-22 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS: version 2.24.1
+
+2008-10-03 Luca Ferretti <elle.uca@libero.it>
+
+ reviewed by: Vincent Untz
+
+ * capplet/gsm-app-dialog.c: (setup_dialog):
+ * capplet/gsm-properties-dialog.c: (gsm_properties_dialog_init):
+ Fix untraslated strings from glade files
+ Fix bug #554340
+ Patch from: Wouter Bolsterlee <wbolster@gnome.org>
+
+2008-09-29 Christian Persch <chpe@gnome.org>
+
+ Bug 551869 – minor HIG problems with the capplet
+
+ * capplet/gsm-properties-dialog.c: (edit_app_dialog),
+ (gsm_properties_dialog_init):
+ * data/session-properties.glade: Part I: correct spacings and
+ paddings, and make the dialogue resizable.
+
+2008-09-29 Frederic Peters <fpeters@0d.be>
+
+ * tools/gnome-session-save.c: (main): rename kill variable to
+ kill_session to avoid conflict with kill(2). Fixes: #554202.
+
+2008-09-23 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-autostart-app.c (autostart_app_start_spawn):
+ Fix startup id leak.
+ Fixes #552815
+ Patch from: Matthias Clasen <mclasen@redhat.com>
+
+2008-09-23 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-inhibit-dialog.c (gsm_inhibit_dialog_dispose):
+ Fix a glade xml leak.
+ Fixes #552780
+ Patch from: Matthias Clasen <mclasen@redhat.com>
+
+2008-09-23 Patryk Zawadzki <patrys@pld-linux.org>
+
+ * data/session-properties.desktop.in.in: add GTK and GNOME.
+ Fix bug #552050.
+
+2008-09-22 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.24.1.
+
+==================== 2.24.0 ====================
+
+2008-09-22 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS: version 2.24.0
+
+2008-09-22 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/main.c: turn off debugging by default.
+ Fix bug #551761.
+
+2008-09-15 Matthias Clasen <mclasen@redhat.com>
+
+ Bug 552255 – leaks IceConnection objects
+
+ * gnome-session/gsm-xsmp-client.c (gsm_xsmp_client_disconnect):
+ Need to call IceCloseConnection always; SmsCleanUp doesn't do it
+ for us.
+ (client_iochannel_watch): ref client around the ICE processing,
+ since handling SM callbacks might otherwise cause it to be
+ destroyed. Clear client->priv->ice_connection on a
+ ConnectionClosed response to avoid a double free.
+
+ Patch by Dan Winship
+
+2008-09-15 Matthias Clasen <mclasen@redhat.com>
+
+ Bug 552302 – leaks empty strings
+
+ * gnome-session/gsm-manager.c (_on_query_end_session_timeout):
+ (on_client_end_session_response): Plug a small string leak.
+
+2008-09-15 Matthias Clasen <mclasen@redhat.com>
+
+ Bug 552294 – leaks EggDesktopFiles
+
+ * gnome-session/gsm-inhibit-dialog.c (add_inhibitor): Free
+ the desktop file when done with it.
+
+2008-09-15 Matthias Clasen <mclasen@redhat.com>
+
+ Bug 552293 – leaks previous_id
+
+ * gnome-session/gsm-xsmp-client.c (register_client_callback):
+ Free previous_id in all cases.
+
+2008-09-15 Matthias Clasen <mclasen@redhat.com>
+
+ Bug 552292 – leaks ListenObjs
+
+ * gnome-session/gsm-xsmp-server.c (gsm_xsmp_server_finalize):
+ Don't leak xsmp_sockets.
+
+2008-09-10 Frederic Crozat <fcrozat@mandriva.com>
+
+ * gnome-session/gsm-logout-dialog.c: backport
+ fix from gnome-panel: conversion from username
+ to UTF-8 if locale is not UTF-8.
+
+2008-09-08 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in: Post release version bump
+
+==================== 2.23.92 ====================
+
+2008-09-08 William Jon McCann <jmccann@redhat.com>
+
+ * NEWS: Update for release.
+
+2008-09-08 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/main.c (append_required_apps):
+ Warn if no required_components are specified.
+
+2008-09-04 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in:
+ * compat/Makefile.am:
+ * compat/*.desktop.*:
+ * data/Makefile.am:
+ * data/gnome-wm.desktop.*:
+ * data/session-properties.desktop.in.in:
+ * po/POTFILES.in:
+ * po/POTFILES.skip:
+ * splash/Makefile.am:
+ * splash/gnome-session-splash.desktop.*:
+ Make all desktop files translatable. Add to rework a bit the build
+ system for this.
+
+2008-09-02 Vincent Untz <vuntz@gnome.org>
+
+ * data/gnome-wm: avoid gnome-wm launching itself in loop when the
+ configuration tells us to use... gnome-wm.
+
+2008-09-02 Vincent Untz <vuntz@gnome.org>
+
+ Remove required components from the default session. The required
+ components should always be in the default session anyway, and keeping
+ the list up-to-date in two places can break easily stuff (if someone
+ adds a required component or if the user change the value if
+ windowmanager only in required components, eg)
+ Note that it affects the failsafe session case: all required components
+ will also run in the failsafe session. This was intended to be this
+ way, as far as I understand.
+
+ * data/gnome-session.schemas.in: remove metacity,gnome-panel,nautilus
+ from the default session
+ * gnome-session/main.c: (load_standard_apps): always call
+ append_required_apps() since the required applications are not in the
+ default session.
+
+2008-09-02 Vincent Untz <vuntz@gnome.org>
+
+ * data/gnome-session.schemas.in:
+ * gnome-session/main.c: (append_required_apps):
+ Rename /desktop/gnome/session/required_components key to
+ /desktop/gnome/session/required_components_list avoid potential clash
+ that might happen because of the
+ /desktop/gnome/session/required_components directory.
+
+2008-09-02 Vincent Untz <vuntz@gnome.org>
+
+ * data/gnome-session.schemas.in: revert string freeze break. Add a
+ FIXME for the future instead.
+
+2008-09-02 Vincent Untz <vuntz@gnome.org>
+
+ * data/gnome-session.schemas.in:
+ * data/gnome-wm:
+ * gnome-session/main.c:
+ Do not use dash but underscore to separate words in gconf keys, as
+ recommended by the gconf naming conventions. Since they keys are new in
+ 2.23, it's not too late to do this change.
+
+2008-09-02 Vincent Untz <vuntz@gnome.org>
+
+ * configure.in: post-release bump to 2.23.92.
+
+==================== 2.23.91 ====================
+
+2008-09-02 Vincent Untz <vuntz@gnome.org>
+
+ * NEWS:: version 2.23.91
+
+2008-09-02 Vincent Untz <vuntz@gnome.org>
+
+ Synchronize the environment set by the gnome-keyring daemon in the
+ gnome-keyring-daemon wrapper to the environment of gnome-session.
+ Fix the other part of bug #547272.
+
+ * compat/gnome-keyring-daemon-wrapper.c:
+ (keyring_env_to_hashtable): new, put an environment in a hash table
+ (keyring_environment_updated_from_new): new, call Setenv dbus method to
+ have gnome-session aware of changed/new environment variables
+ (keyring_environment_removed_from_old): new, unset (kind of, since
+ that's the Setenv dbus method with an empty value) environment
+ variables that were unset
+ (keyring_export_environment): new, does the synchronization magic
+ (keyring_daemon_start): updated to use keyring_export_environment()
+
+2008-09-02 Vincent Untz <vuntz@gnome.org>
+
+ * compat/gnome-keyring-daemon-wrapper.c: (keyring_daemon_start): call
+ gnome_keyring_daemon_prepare_environment_sync() so that the keyring
+ daemon has all the right environment variables.
+ Patch by Stef Walter <stef@memberwebs.com>
+ Fix part of bug #547272.
+
+2008-09-02 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/main.c: (main): set GNOME_DESKTOP_SESSION_ID to
+ "this-is-deprecated" to make it clear that people should stop relying
+ on this.
+
+2008-09-02 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/main.c: (main): export GNOME_DESKTOP_SESSION_ID. We
+ need this for compatibility reasons for third-party programs.
+ Fix bug #542880.
+
+2008-09-01 Vincent Untz <vuntz@gnome.org>
+
+ Add --logout, --force-logout, --logout-dialog and --shutdown-dialog
+ arguments to gnome-session-save, and deprecate --kill. This will make
+ things less ambiguous.
+
+ * tools/gnome-session-save.c: rename some variables
+ (display_error): updated
+ (get_sm_proxy): call get_session_bus() from there, since it simplifies
+ code elsewhere
+ (set_session_name): updated
+ (do_logout): renamed from logout_session(), and simplified. Also add
+ a mode argument for the logout dbus method.
+ (do_shutdown_dialog): new
+ (main): updated for new options
+ * doc/man/gnome-session-save.1: update man page
+ Fix bug #550211.
+
+2008-09-01 Vincent Untz <vuntz@gnome.org>
+
+ * gnome-session/main.c: (require_dbus_session): make sure we have a
+ session bus by re-running ourself with "dbus-launch
+ --exit-with-session" if necessary.
+ (main): call require_dbus_session() at the early beginning
+ Based on patch by Colin Walters <walters@verbum.org>
+ Fix bug #546863.
+
+2008-08-30 Matthias Clasen <mclasen@redhat.com>
+
+ * gnome-session/gsm-app.c:
+ * gnome-session/gsm-autostart-app.c:
+ * gnome-session/gsm-manager.c:
+ * gnome-session/gsm-resumed-app.c: Always chain up in dispose
+ handlers.
+
+2008-08-29 Matthias Clasen <mclasen@redhat.com>
+
+ * splash/gnome-session-splash.c: Plug a small leak.
+
+2008-08-29 Matthias Clasen <mclasen@redhat.com>
+
+ * egg/eggsmclient-xsmp.c (sm_client_xsmp_connect): Don't
+ leak cmdline.
+
+2008-08-29 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/main.c (find_desktop_file_for_app_name):
+ Add some debugging.
+
+2008-08-29 Matthias Clasen <mclasen@redhat.com>
+
+ * compat/at-spi-registryd-wrapper.c (set_gtk_modules): Plug
+ another leak
+
+2008-08-29 William Jon McCann <jmccann@redhat.com>
+
+ * egg/eggdesktopfile.c (egg_desktop_file_new_from_key_file),
+ (egg_desktop_file_launchv):
+ * gnome-session/gsm-autostart-app.c (setup_condition_monitor),
+ (is_conditionally_disabled):
+ * gnome-session/gsm-resumed-app.c
+ (gsm_resumed_app_new_from_legacy_session):
+ * gnome-session/gsm-xsmp-client.c (gsm_xsmp_client_finalize),
+ (register_client_callback):
+ Fix some leaks found by valgrind.
+ Patch from: Matthias Clasen <mclasen@redhat.com>
+
+2008-08-29 William Jon McCann <jmccann@redhat.com>
+
+ * data/Makefile.am:
+ Don't install the gnome-wm.desktop by default.
+
+2008-08-29 William Jon McCann <jmccann@redhat.com>
+
+ * capplet/gsm-app-dialog.c (on_browse_button_clicked),
+ (setup_dialog), (gsm_app_dialog_dispose),
+ (gsm_app_dialog_get_name), (gsm_app_dialog_get_command),
+ (gsm_app_dialog_get_comment), (gsm_app_dialog_init),
+ (gsm_app_dialog_finalize):
+ * capplet/gsm-properties-dialog.c (gsm_properties_dialog_dispose),
+ (gsm_properties_dialog_finalize):
+ Fix add/edit dialog.
+
+2008-08-29 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/main.c (main): Fix typo.
+
+2008-08-28 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/main.c (append_default_apps), (load_standard_apps),
+ (load_override_apps), (main):
+ Add command line option to override the gconf key used
+ to look up the default session.
+
+2008-08-26 William Jon McCann <jmccann@redhat.com>
+
+ * data/gnome-wm:
+ Use the required components key if possible.
+
+2008-08-26 William Jon McCann <jmccann@redhat.com>
+
+ * data/gnome-session.schemas.in:
+ * data/gnome-wm:
+ Don't use gnome-wm by default. We should encourage
+ WMs to install a desktop file and to set
+ /desktop/gnome/session/required-components/windowmanager
+
+2008-08-26 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/main.c (find_desktop_file_for_app_name),
+ (append_default_apps), (append_required_apps):
+ Look in app dirs for required components.
+
+2008-08-26 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/main.c (append_required_apps):
+ Honor the list of required apps in the list key instead of
+ loading all component keys in the dir.
+
+2008-08-26 Frederic Crozat <fcrozat@mandriva.com>
+
+ * compat/at-spi-registryd-wrapper.c: always set a11y gtk modules
+ but unset it if at-registry could not be started. Still fixes #548982.
+
+2008-08-22 Frederic Crozat <fcrozat@mandriva.com>
+
+ * compat/at-spi-registryd-wrapper.c: don't set a11y gtk modules
+ if at registry could not be started. Fixes #548982.
+
+2008-08-22 Frederic Crozat <fcrozat@mandriva.com>
+
+ * gnome-session/gsm-util.c: ensure non-fatal error
+ are treated as such. Fixes #548980.
+
+2008-08-22 Jens Granseuer <jensgr@gmx.net>
+
+ * capplet/gsm-properties-dialog.c: add missing include for gio.
+ Fixes #548909.
+
+2008-08-21 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-autostart-app.c (gsm_autostart_app_restart):
+ * gnome-session/gsm-manager.c (_app_has_startup_id),
+ (find_app_for_startup_id), (_disconnect_client):
+ Don't return an error if we can't stop an app that we want
+ to restart. It may be stopped. Also try to find the
+ app based on the startup ID first if we have one.
+ Probably fixes #548710
+
+2008-08-20 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in: Post release version bump
+
+==================== 2.23.90 ====================
+
+2008-08-20 William Jon McCann <jmccann@redhat.com>
+
+ * NEWS: Update.
+ * configure.in: Bump version.
+ * gnome-session/gsm-manager.c (gsm_manager_dispose):
+ Disconnect signal handlers before disposing.
+
+2008-08-19 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-xsmp-client.c (interact_request_callback):
+ Fix debug to show correct dialog type for interact request.
+
+2008-08-19 Frederic Crozat <fcrozat@mandriva.com>
+
+ * splash/gnome-session-splash.c:
+ Exit splash screen when last client startup
+ notification finished. Fixes #546410
+
+2008-08-18 William Jon McCann <jmccann@redhat.com>
+
+ * capplet/gsm-properties-dialog.c (add_app):
+ Fix a case where we don't create ~/.config/autostart
+ Based on patch from: James Westby <jw+debian@jameswestby.net>
+ Fixes #548129
+
+2008-08-18 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-inhibit-dialog.c (gsm_inhibit_dialog_dispose):
+ Don't try to remove the signal handlers more than once.
+
+2008-08-18 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-inhibit-dialog.c
+ (gsm_inhibit_dialog_constructor):
+ Change a warning to a debug.
+
+2008-08-18 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-xsmp-client.c
+ (save_yourself_phase2_request_callback):
+ Honor SaveYourselfPhase2Request as a valid
+ SaveYourself response.
+ Fixes #548259
+
+2008-08-18 Claude Paroz <claude@2xlibre.net>
+
+ * data/gsm-inhibit-dialog.glade: Removed translatable property on stock
+ label.
+
+2008-08-16 Kjartan Maraas <kmaraas@gnome.org>
+
+ * capplet/gsm-app-dialog.c:
+ * egg/eggdesktopfile.h:
+ * egg/eggsmclient-libgnomeui.c: (egg_sm_client_module_info_get):
+ * egg/eggsmclient-xsmp.c:
+ * gnome-session/gsm-autostart-app.c:
+ * gnome-session/gsm-client.c:
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-dbus-client.c:
+ * gnome-session/gsm-inhibit-dialog.c: (add_inhibitor):
+ * gnome-session/gsm-inhibit-dialog.h:
+ * gnome-session/gsm-inhibitor.c:
+ * gnome-session/gsm-inhibitor.h:
+ * gnome-session/gsm-manager.c:
+ * gnome-session/gsm-store.c:
+ * gnome-session/gsm-util.c:
+ * gnome-session/gsm-xsmp-client.c:
+ * gnome-session/gsm-xsmp-server.c:
+ * gnome-session/test-inhibit.c:
+ * tools/gnome-session-save.c:
+ Fix some warnings from sparse and other tools. Closes
+ bug #521413
+
+2008-08-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (inhibitor_has_client_id),
+ (_disconnect_client):
+ Remove inhibitors for the client when it disconnects.
+
+2008-08-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-inhibit-dialog.c (add_inhibitor),
+ (gsm_inhibit_dialog_constructor):
+ Try again with fewer warnings this time.
+
+2008-08-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-inhibit-dialog.c (add_inhibitor):
+ Turn off the window snapshot feature for now. I think
+ it needs a bit more development.
+
+2008-08-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/Makefile.am:
+ * gnome-session/gdm-log.c (log_level_to_priority_and_prefix),
+ (gdm_log_default_handler), (gdm_log_toggle_debug),
+ (gdm_log_set_debug), (gdm_log_init), (gdm_log_shutdown):
+ * gnome-session/gdm-log.h:
+ * gnome-session/main.c (signal_cb), (main):
+ Add log/debugging framework.
+
+2008-08-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gdm-signal-handler.c (signal_io_watch),
+ (gdm_signal_handler_set_fatal_func):
+ * gnome-session/gdm-signal-handler.h:
+ * gnome-session/main.c (main):
+ Allow the signal handler to call gtk_main_quit.
+
+2008-08-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/Makefile.am:
+ * gnome-session/gdm-signal-handler.c (block_signals_push),
+ (block_signals_pop), (signal_io_watch), (fallback_get_backtrace),
+ (crashlogger_get_backtrace), (gdm_signal_handler_backtrace),
+ (signal_handler), (catch_signal), (uncatch_signal),
+ (gdm_signal_handler_add), (gdm_signal_handler_add_fatal),
+ (callback_data_free), (gdm_signal_handler_remove_and_free_data),
+ (gdm_signal_handler_remove), (find_callback_data_by_func),
+ (gdm_signal_handler_remove_func), (gdm_signal_handler_class_init),
+ (signal_list_free), (gdm_signal_handler_set_main_loop),
+ (gdm_signal_handler_init), (gdm_signal_handler_finalize),
+ (gdm_signal_handler_new):
+ * gnome-session/gdm-signal-handler.h:
+ * gnome-session/gsm-manager.c (gsm_manager_dispose),
+ (gsm_manager_class_init), (gsm_manager_finalize):
+ * gnome-session/main.c (signal_cb), (main):
+ Add signal handling framework.
+
+2008-08-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-app.h:
+ * gnome-session/gsm-autostart-app.c (_signal_pid),
+ (autostart_app_stop_spawn):
+ * gnome-session/gsm-manager.c (app_condition_changed):
+ Add support for killing apps. Try to stop app if
+ there isn't a client available for it.
+
+2008-08-14 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/main.c (load_standard_apps), (load_override_apps),
+ (main):
+ Add command line option to override autostart dirs.
+
+2008-08-14 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (gsm_manager_constructor),
+ (append_app), (gsm_manager_add_autostart_app),
+ (gsm_manager_add_autostart_apps_from_dir),
+ (gsm_manager_add_legacy_session_apps):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/main.c (append_default_apps),
+ (append_saved_session_apps), (append_required_apps), (load_apps),
+ (main):
+ Move the gconf key and dir loading code out of the manager.
+
+2008-08-14 Ghee Teo <ghee.teo@sun.com>
+
+ * data/gnome-wm:
+ Fixes bug #547769. Handle gconftool-2 errors properly.
+
+2008-08-14 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/main.c (main):
+ Fail when unknown options are given. Support a version option.
+
+2008-08-13 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (append_app), (append_default_apps):
+ Correctly check if app-id has already been added to store.
+
+2008-08-13 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-autostart-app.c
+ (gsm_autostart_app_set_desktop_filename):
+ * gnome-session/gsm-manager.c (append_default_apps),
+ (append_autostart_apps):
+ Clean up some debug spew.
+
+2008-08-13 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-autostart-app.c (is_conditionally_disabled):
+ * gnome-session/gsm-manager.c (_debug_app_for_phase),
+ (debug_app_summary), (gsm_manager_start):
+ Add a debugging summary of all apps before starting.
+
+2008-08-13 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-client.c (gsm_client_error_quark),
+ (gsm_client_error_get_type), (gsm_client_cancel_end_session),
+ (gsm_client_query_end_session), (gsm_client_end_session):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-dbus-client.c (dbus_client_query_end_session),
+ (dbus_client_end_session), (dbus_client_cancel_end_session):
+ * gnome-session/gsm-manager.c (_client_end_session),
+ (_client_query_end_session), (_client_cancel_end_session):
+ * gnome-session/gsm-xsmp-client.c (client_iochannel_watch),
+ (_client_protocol_timeout), (do_save_yourself),
+ (xsmp_cancel_end_session), (xsmp_query_end_session),
+ (xsmp_end_session), (gsm_xsmp_client_disconnect),
+ (gsm_xsmp_client_finalize), (interact_request_callback),
+ (close_connection_callback):
+ Make QES,ES,CES return errors. Check to make sure that
+ connection is valid before handling same. Set
+ status and disconnect when disconnected.
+
+2008-08-13 William Jon McCann <jmccann@redhat.com>
+
+ * splash/Makefile.am:
+ * splash/gnome-login-sound.c:
+ * splash/gnome-login-sound.desktop.in:
+ * splash/gnome-logout-sound.sh:
+ Remove gnome-login-sound. It is superseded and
+ improved upon by libcanberra-login-sound.
+
+2008-08-13 Erwann Chenede - <erwann.chenede@sun.com>
+
+ * gnome-session/Makefile.am: added XRENDER_LIBS to
+ enable compilation on Solaris. Fixes #547619
+
+2008-08-12 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (phase_num_to_name):
+ Add missing breaks;
+
+2008-08-12 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-autostart-app.c (autostart_app_start_spawn):
+ Initialize error.
+ Fixes #547443
+
+2008-08-12 Matthias Clasen <mclasen@redhat.com>
+
+ * compat/at-spi-registryd-wrapper.c: Fix a crash.
+
+2008-08-11 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (on_xsmp_client_logout_request),
+ (on_store_client_added):
+ Add back support for logout via SaveYourselfRequest.
+ Based on patch from: Kim Woelders <kim@woelders.dk>
+ Fixes #547069
+
+2008-08-11 William Jon McCann <jmccann@redhat.com>
+
+ * capplet/main.c (main):
+ Add support for --version.
+
+2008-08-11 William Jon McCann <jmccann@redhat.com>
+
+ * capplet/gsm-properties-dialog.c (key_file_set_locale_string),
+ (write_desktop_file):
+ Try to handle null key values.
+ May fix #546896
+
+2008-08-11 William Jon McCann <jmccann@redhat.com>
+
+ * capplet/Makefile.am:
+ * capplet/commands.c:
+ * capplet/commands.h:
+ * capplet/gsm-app-dialog.c (make_exec_uri),
+ (on_browse_button_clicked), (on_entry_activate), (setup_dialog),
+ (gsm_app_dialog_constructor), (gsm_app_dialog_dispose),
+ (gsm_app_dialog_set_name), (gsm_app_dialog_set_command),
+ (gsm_app_dialog_set_comment), (gsm_app_dialog_get_name),
+ (gsm_app_dialog_get_command), (gsm_app_dialog_get_comment),
+ (gsm_app_dialog_set_property), (gsm_app_dialog_get_property),
+ (gsm_app_dialog_class_init), (gsm_app_dialog_init),
+ (gsm_app_dialog_finalize), (gsm_app_dialog_new):
+ * capplet/gsm-app-dialog.h:
+ * capplet/gsm-properties-dialog.c (on_response), (find_by_id),
+ (get_app_description), (append_app), (compare_app),
+ (append_autostart_apps), (populate_model), (on_selection_changed),
+ (system_desktop_entry_exists), (update_desktop_file),
+ (ensure_user_autostart_dir), (key_file_set_locale_string),
+ (key_file_to_file), (write_desktop_file), (enable_app),
+ (disable_app), (on_startup_enabled_toggled), (add_app),
+ (add_from_desktop_file), (on_drag_data), (edit_app_dialog),
+ (on_add_app_clicked), (delete_desktop_file), (delete_app),
+ (on_delete_app_clicked), (update_app), (on_edit_app_clicked),
+ (on_autosave_value_notify), (on_autosave_value_toggled),
+ (on_save_session_clicked), (setup_dialog),
+ (gsm_properties_dialog_constructor),
+ (gsm_properties_dialog_dispose),
+ (gsm_properties_dialog_class_init), (gsm_properties_dialog_init),
+ (gsm_properties_dialog_finalize), (gsm_properties_dialog_new):
+ * capplet/gsm-properties-dialog.h:
+ * capplet/main.c (dialog_response), (main):
+ * capplet/ui.c:
+ * capplet/ui.h:
+ * data/session-properties.glade:
+ * gnome-session/gsm-inhibit-dialog.h:
+ Rework the dialogs to use gobject.
+
+2008-08-08 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (gsm_manager_error_get_type),
+ (gsm_manager_logout):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/org.gnome.SessionManager.xml:
+ * tools/gnome-session-save.c (display_error), (get_sm_proxy),
+ (set_session_name), (logout_session), (main):
+ Melt the gnome-session-save tool and make it actually work.
+ Fix the api for Logout to take a uint.
+
+2008-08-08 Jonh Wendell <jwendell@gnome.org>
+
+ * gnome-session/gsm-autostart-app.c (is_disabled): Dropped the
+ auto-restart check, it's useless in this context.
+
+2008-08-08 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-inhibit-dialog.c (add_inhibitor),
+ (gsm_inhibit_dialog_set_client_store),
+ (gsm_inhibit_dialog_set_property),
+ (gsm_inhibit_dialog_get_property), (gsm_inhibit_dialog_class_init),
+ (gsm_inhibit_dialog_new):
+ * gnome-session/gsm-inhibit-dialog.h:
+ * gnome-session/gsm-manager.c (query_end_session_complete),
+ (on_client_end_session_response), (request_reboot),
+ (request_shutdown), (request_suspend), (request_hibernate),
+ (request_switch_user):
+ Try to get application name for client when not responding
+ and we don't have an app-id for it.
+ Should fix #546755
+
+2008-08-08 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in: Bump dbus-glib dep to 0.76
+ Fixes #546722
+
+2008-08-07 Matthias Clasen <mclasen@redhat.com>
+
+ * data/gnome-session.schemas.in: Fix a typo.
+
+2008-08-07 Matthias Clasen <mclasen@redhat.com>
+
+ * capplet/commands.c: Use standard icon name.
+
+2008-08-05 Jens Granseuer <jensgr@gmx.net>
+
+ * gnome-session/gsm-gconf.c: include sys/types.h for pid_t. Fixes
+ #546439.
+
+2008-08-05 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in: Post release version bump
+
+==================== 2.23.6 ====================
+
+2008-08-05 William Jon McCann <jmccann@redhat.com>
+
+ * NEWS: Update for 2.23.6 release
+
+2008-08-05 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-app.h:
+ Removed unused item from vtable.
+
+2008-08-04 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-autostart-app.c (gsm_autostart_app_init),
+ (is_disabled), (parse_condition_string), (if_exists_condition_cb),
+ (unless_exists_condition_cb), (gconf_condition_cb),
+ (setup_condition_monitor), (load_desktop_file),
+ (gsm_autostart_app_dispose), (is_conditionally_disabled),
+ (autostart_app_start_spawn):
+ Fix a number of bugs and leaks related to the monitoring
+ of the AutostartCondition keys.
+
+ * gnome-session/gsm-manager.c (app_condition_changed),
+ (_app_has_app_id), (find_app_for_app_id):
+ Allow NULL clients on conditional disable. Fix
+ finding of clients.
+
+2008-08-04 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-app.c (gsm_app_peek_is_conditionally_disabled):
+ * gnome-session/gsm-app.h:
+ * gnome-session/gsm-autostart-app.c (is_conditionally_disabled),
+ (is_disabled), (gsm_autostart_app_class_init):
+ * gnome-session/gsm-manager.c (_start_app):
+ Add gsm_app_is_conditionally_disabled. Remove AutostartCondition
+ check from is_disabled. We want to be able to distinguish
+ the two.
+
+2008-08-04 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/main.c (acquire_name), (main):
+ Remove session bus launching code. The bus was
+ designed to be started before the session is run.
+
+2008-08-04 William Jon McCann <jmccann@redhat.com>
+
+ * compat/at-spi-registryd-wrapper.c:
+ * egg/eggdesktopfile.c:
+ * gnome-session/gsm-util.c:
+ * gnome-session/gsm-util.h:
+ * gnome-session/main.c:
+ * splash/gnome-login-sound.c:
+ * splash/gnome-session-splash.c:
+ * splash/splash-window.h:
+ Use single GTK+ includes
+ Patch from: Wouter Bolsterlee <wbolster@gnome.org>
+ Fixes #544830
+
+2008-08-04 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/Makefile.am:
+ * gnome-session/gsm-app.c (gsm_app_error_quark),
+ (get_next_app_serial), (register_app), (gsm_app_constructor),
+ (gsm_app_class_init), (gsm_app_peek_id), (gsm_app_peek_app_id),
+ (gsm_app_peek_startup_id), (gsm_app_peek_phase),
+ (gsm_app_peek_is_disabled), (gsm_app_peek_autorestart),
+ (gsm_app_get_app_id), (gsm_app_get_startup_id),
+ (gsm_app_get_phase):
+ * gnome-session/gsm-app.h:
+ * gnome-session/gsm-autostart-app.c (is_disabled),
+ (autostart_app_start_spawn), (autostart_app_start_activate),
+ (gsm_autostart_app_get_app_id), (gsm_autostart_app_constructor),
+ (gsm_autostart_app_class_init):
+ * gnome-session/gsm-manager.c (app_condition_changed),
+ (on_phase_timeout), (_start_app), (_disconnect_client),
+ (_app_has_startup_id), (find_app_for_startup_id),
+ (on_xsmp_client_register_request), (append_app),
+ (gsm_manager_register_client), (_app_has_autostart_condition):
+ * gnome-session/gsm-resumed-app.c (gsm_resumed_app_get_app_id),
+ (gsm_resumed_app_class_init):
+ * gnome-session/org.gnome.SessionManager.App.xml:
+ Put the apps on the bus.
+
+2008-08-04 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-app.c (gsm_app_has_autostart_condition):
+ * gnome-session/gsm-app.h:
+ * gnome-session/gsm-autostart-app.c (gsm_autostart_app_dispose),
+ (is_disabled), (gsm_autostart_app_has_autostart_condition),
+ (gsm_autostart_app_class_init):
+ * gnome-session/gsm-manager.c (_start_app), (do_phase_startup),
+ (find_app_for_app_id), (find_app_for_startup_id), (append_app),
+ (append_required_apps), (gsm_manager_init), (gsm_manager_finalize),
+ (_app_has_autostart_condition),
+ (gsm_manager_is_autostart_condition_handled):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/org.gnome.SessionManager.xml:
+ Add a method to ask if a certain AutostartCondition is
+ being handled. One use of this is for the settings daemon
+ to know if there are any a11y tools that will be started
+ for a certain gconf key.
+
+2008-08-04 William Jon McCann <jmccann@redhat.com>
+
+ * data/Makefile.am:
+ * gnome-session/Makefile.am:
+ * gnome-session/gsm-inhibit-dialog.glade:
+ Move glade file to data as requested by Lucas.
+
+2008-08-04 William Jon McCann <jmccann@redhat.com>
+
+ * capplet/commands.c (system_desktop_entry_exists), (find_by_id),
+ (ensure_user_autostart_dir), (key_file_to_file),
+ (key_file_set_locale_string), (delete_desktop_file),
+ (write_desktop_file), (append_app), (compare_app),
+ (append_autostart_apps), (spc_command_get_store),
+ (spc_command_enable_app), (spc_command_disable_app),
+ (spc_command_add_app):
+ * capplet/main.c (main):
+ * capplet/ui.c (make_exec_uri), (cmd_browse_button_clicked_cb),
+ (entry_activate_cb), (edit_app_dialog), (selection_changed_cb),
+ (startup_enabled_toggled_cb), (add_from_desktop_file),
+ (drag_data_cb), (setup_treeview), (add_app_cb), (delete_app_cb),
+ (edit_app_cb), (autosave_value_notify), (autosave_value_toggled),
+ (help_cb):
+ * compat/at-spi-registryd-wrapper.c (registry_ior_watch),
+ (set_gtk_modules), (main):
+ * compat/gnome-keyring-daemon-wrapper.c (keyring_daemon_stop),
+ (child_setup), (keyring_daemon_start), (quit), (main):
+ * compat/gnome-settings-daemon-helper.c (set_gtk1_theme_rcfile):
+ * gnome-session/gsm-gconf.c (gsm_gconf_init), (gsm_gconf_check),
+ (gsm_gconf_shutdown):
+ * gnome-session/gsm-util.c (gsm_util_get_autostart_dirs),
+ (gsm_util_get_app_dirs), (gsm_util_text_is_blank),
+ (gsm_util_init_error), (gsm_util_generate_startup_id),
+ (gsm_util_update_activation_environment), (gsm_util_setenv):
+ * splash/gnome-login-sound.c (get_sound_file_from_config),
+ (get_sound_file), (maybe_play_sound):
+ * splash/gnome-session-splash.c (get_session_bus),
+ (set_session_running_handler), (event_func), (splash_clicked),
+ (filter_func), (load_pixbuf), (load_splash_pixbuf), (main):
+ * splash/splash-window.c (re_scale), (splash_window_expose_event),
+ (splash_window_realize), (splash_icon_destroy),
+ (splash_window_finalize), (layout_icon), (re_laydown),
+ (update_trans_effect), (gsm_splash_window_new),
+ (gsm_splash_window_start), (gsm_splash_window_finish):
+ * tools/gnome-session-save.c (ping_reply), (ice_ping), (die_cb),
+ (cancelled_cb), (display_error), (ice_connection_watch),
+ (get_session_bus), (set_session_name), (main):
+ Some cosmetic / code-style changes requested by Lucas.
+
+2008-08-01 Matthias Clasen <mclasen@redhat.com>
+
+ * gnome-session/gsm-util.c (gsm_util_get_autostart_dirs): Don't
+ look in /usr/share/autostart, since that is a KDE-specific
+ location using legacy KDE autostart conventions predating the
+ autostart spec.
+
+2008-07-31 William Jon McCann <jmccann@redhat.com>
+
+ * data/Makefile.am:
+ * data/gnome-session.schemas.in:
+ * data/gnome-wm:
+ * data/gnome-wm.desktop.in:
+ * gnome-session/gsm-util.c (gsm_util_get_app_dirs):
+ Install a desktop file for gnome-wm and use that
+ as the default window manager instead of calling
+ metacity directly. Add a gconf key to allow
+ changing the default program for gnome-wm to use.
+ Remove the gnome/wm-properties directory from
+ the autostart search path.
+
+2008-07-30 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-inhibitor.c (gsm_inhibitor_error_quark),
+ (gsm_inhibitor_error_get_type), (gsm_inhibitor_set_client_id),
+ (gsm_inhibitor_get_client_id), (gsm_inhibitor_class_init):
+ * gnome-session/gsm-inhibitor.h:
+ DBus doesn't allow NULL or empty object path strings. Throw
+ an error instead.
+
+2008-07-30 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/main.c (on_bus_name_lost), (acquire_name_on_proxy),
+ (acquire_name):
+ Handle NameLost signal and exit when disconnected from bus.
+
+2008-07-30 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/org.gnome.SessionManager.Client.xml:
+ * gnome-session/org.gnome.SessionManager.Inhibitor.xml:
+ Drop the properties for now until we can figure out
+ why they are causing the dbus-glib bindings to crash.
+
+2008-07-30 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (listify_store_ids),
+ (gsm_manager_get_clients), (gsm_manager_get_inhibitors):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/org.gnome.SessionManager.xml:
+ Add GetClients and GetInhibitors.
+
+2008-07-30 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-client.c (gsm_client_set_startup_id),
+ (gsm_client_set_app_id), (gsm_client_class_init):
+ * gnome-session/gsm-dbus-client.c (handle_end_session_response):
+ * gnome-session/gsm-inhibit-dialog.c (add_inhibitor),
+ (on_store_inhibitor_added):
+ * gnome-session/gsm-inhibitor.c (gsm_inhibitor_set_bus_name),
+ (gsm_inhibitor_set_client_id), (gsm_inhibitor_set_reason),
+ (gsm_inhibitor_get_app_id), (gsm_inhibitor_get_client_id),
+ (gsm_inhibitor_get_reason), (gsm_inhibitor_class_init):
+ * gnome-session/gsm-manager.c (_find_by_startup_id),
+ (_on_query_end_session_timeout), (_disconnect_client),
+ (_disconnect_dbus_client), (inhibitor_has_bus_name),
+ (_app_has_startup_id), (_client_has_startup_id),
+ (on_xsmp_client_register_request), (inhibitor_has_client_id),
+ (on_client_end_session_response), (append_app),
+ (append_default_apps), (gsm_manager_register_client),
+ (gsm_manager_inhibit):
+ * gnome-session/gsm-xsmp-client.c (register_client_callback):
+ DBus forces us to not use NULL strings for properties. Would
+ be nice if the bindings took care of this for us by converting
+ NULL strings into some "unset" value.
+
+2008-07-30 Matthias Clasen <mclasen@redhat.com>
+
+ * gnome-session/gsm-client.c: Cosmetic fix to some
+ g_return_val_if_fail return values.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-client.c (gsm_client_get_unix_process_id):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-dbus-client.c (get_caller_info),
+ (gsm_dbus_client_set_bus_name), (dbus_client_get_unix_process_id),
+ (gsm_dbus_client_class_init):
+ * gnome-session/gsm-xsmp-client.c (_parse_value_as_uint),
+ (xsmp_get_unix_process_id), (gsm_xsmp_client_class_init):
+ * gnome-session/org.gnome.SessionManager.Client.xml:
+ Add GetUnixProcessId to Client interface.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * capplet/commands.c:
+ * capplet/ui.c:
+ * doc/dbus/gnome-session.xml.in:
+ Fix build.
+
+2008-07-29 Matthias Clasen <mclasen@redhat.com>
+
+ * gnome-session/gconf.[hc]: Rename to gsm-gconf.[hc]
+ * gnome-session/util.[hc]: Rename to gsm-util.[hc]
+
+ * gnome-session/*.c:
+ * gnome-session/Makefile.am: Adapt
+
+2008-07-29 Matthias Clasen <mclasen@redhat.com>
+
+ * gnome-session/gsm-xsmp-client.c:
+ * gnome-session/gsm-manager.c: _-prefix static functions.
+ Pointed out by Lucas Rocha.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * MAINTAINERS: Add myself.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in: Bump to 2.23.6 to be in sync with trunk.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-inhibit-dialog.c (on_store_inhibitor_added),
+ (on_store_inhibitor_removed), (setup_dialog):
+ * gnome-session/gsm-store.c (gsm_store_remove):
+ Fix double free.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (_disconnect_client),
+ (_disconnect_dbus_client), (remove_clients_for_connection),
+ (on_client_disconnected):
+ Don't remove clients from the iterator func. Set
+ client status when disconnecting.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-client.c (gsm_client_dispose),
+ (gsm_client_class_init):
+ * gnome-session/gsm-dbus-client.c (gsm_dbus_client_dispose),
+ (gsm_dbus_client_class_init):
+ * gnome-session/gsm-inhibit-dialog.c (on_response),
+ (model_has_one_entry), (on_store_inhibitor_removed),
+ (gsm_inhibit_dialog_dispose), (gsm_inhibit_dialog_finalize):
+ * gnome-session/gsm-inhibitor.c (gsm_inhibitor_class_init):
+ * gnome-session/gsm-manager.c (bus_name_owner_changed),
+ (gsm_manager_register_client):
+ * gnome-session/gsm-store.c (gsm_store_foreach_remove):
+ * gnome-session/gsm-xsmp-server.c (accept_ice_connection):
+ Add introspection info to Inhibitor. Fix a few
+ refcounting problems.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-dbus-client.c (dbus_client_stop),
+ (dbus_client_query_end_session), (dbus_client_end_session),
+ (dbus_client_cancel_end_session), (gsm_dbus_client_class_init):
+ * gnome-session/gsm-dbus-client.h:
+ Remove some obsolete signals.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-client.c (gsm_client_class_init):
+ Fix the minimum value for guint property.
+
+ * gnome-session/gsm-dbus-client.c (setup_connection),
+ (raise_error), (handle_end_session_response),
+ (client_dbus_filter_function), (gsm_dbus_client_constructor),
+ (dbus_client_stop), (dbus_client_query_end_session),
+ (dbus_client_end_session), (dbus_client_cancel_end_session),
+ (gsm_dbus_client_new):
+ * gnome-session/org.gnome.SessionManager.ClientPrivate.xml:
+ * gnome-session/test-client-dbus.c (on_client_query_end_session),
+ (on_client_end_session), (on_client_cancel_end_session),
+ (on_client_stop), (register_client), (unregister_client):
+ Unicast the client private signals.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * doc/dbus/Makefile.am:
+ * gnome-session/Makefile.am:
+ * gnome-session/gsm-client.xml:
+ * gnome-session/gsm-dbus-client.c (gsm_dbus_client_class_init):
+ * gnome-session/gsm-dbus-client.xml:
+ * gnome-session/gsm-inhibitor.xml:
+ * gnome-session/gsm-manager.xml:
+ Rename the introspection docs. Remove the
+ dbus-glib stuff from the DBusClient.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * doc/dbus/Makefile.am:
+ * gnome-session/gsm-dbus-client.xml:
+ Rename the DBusClient interface to ClientPrivate.
+ Cuz well that's what it is.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-client.c (gsm_client_set_status),
+ (gsm_client_set_property), (gsm_client_get_property),
+ (gsm_client_class_init), (gsm_client_peek_status),
+ (gsm_client_get_status):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-client.xml:
+ * gnome-session/gsm-inhibitor.xml:
+ Make status uint. Add some more exported methods to Client.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-client.c (gsm_client_peek_id),
+ (gsm_client_peek_app_id), (gsm_client_peek_startup_id),
+ (gsm_client_peek_restart_style_hint), (gsm_client_get_startup_id),
+ (gsm_client_get_app_id), (gsm_client_get_restart_style_hint),
+ (gsm_client_get_app_name):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-client.xml:
+ * gnome-session/gsm-dbus-client.c (dbus_client_stop),
+ (dbus_client_query_end_session), (dbus_client_end_session):
+ * gnome-session/gsm-inhibit-dialog.c (add_inhibitor):
+ * gnome-session/gsm-inhibitor.c (gsm_inhibitor_peek_bus_name),
+ (gsm_inhibitor_get_app_id), (gsm_inhibitor_get_client_id),
+ (gsm_inhibitor_get_reason), (gsm_inhibitor_get_flags),
+ (gsm_inhibitor_get_toplevel_xid), (gsm_inhibitor_peek_id),
+ (gsm_inhibitor_peek_app_id), (gsm_inhibitor_peek_client_id),
+ (gsm_inhibitor_peek_reason), (gsm_inhibitor_peek_flags),
+ (gsm_inhibitor_peek_toplevel_xid), (gsm_inhibitor_peek_cookie):
+ * gnome-session/gsm-inhibitor.h:
+ * gnome-session/gsm-manager.c (_debug_client), (_debug_inhibitor),
+ (_find_by_cookie), (_find_by_startup_id), (_client_end_session),
+ (_client_query_end_session), (inhibitor_has_flag),
+ (inhibitor_is_jit), (on_query_end_session_timeout),
+ (disconnect_client), (inhibitor_has_bus_name),
+ (_client_has_startup_id), (inhibitor_has_client_id),
+ (on_client_end_session_response), (gsm_manager_register_client),
+ (gsm_manager_inhibit), (gsm_manager_uninhibit):
+ * gnome-session/gsm-xsmp-client.c (set_description):
+ * gnome-session/gsm-xsmp-server.c (accept_ice_connection):
+ Add client introspection info. Fix the inhibitor methods.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (gsm_manager_register_client):
+ * gnome-session/gsm-manager.xml:
+ * gnome-session/test-client-dbus.c (register_client):
+ Don't return the "new" startup ID from the register
+ client method. We can make this available via
+ the Client interface if necessary.
+
+2008-07-29 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (append_default_apps):
+ Check for gnome vendor prefix on default apps.
+
+2008-07-28 William Jon McCann <jmccann@redhat.com>
+
+ * doc/dbus/Makefile.am:
+ Install into docdir/dbus.
+
+2008-07-28 William Jon McCann <jmccann@redhat.com>
+
+ * doc/dbus/Makefile.am:
+ Fix distcheck
+
+2008-07-28 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (inhibitor_has_flag),
+ (gsm_manager_is_logout_inhibited), (gsm_manager_start),
+ (gsm_manager_setenv), (gsm_manager_initialization_error),
+ (gsm_manager_is_switch_user_inhibited),
+ (gsm_manager_is_suspend_inhibited), (gsm_manager_shutdown),
+ (gsm_manager_logout), (gsm_manager_register_client),
+ (gsm_manager_unregister_client), (gsm_manager_inhibit),
+ (gsm_manager_uninhibit), (gsm_manager_is_inhibited):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/gsm-manager.xml:
+ Export an IsInhibited method to the bus.
+
+2008-07-28 William Jon McCann <jmccann@redhat.com>
+
+ * doc/dbus/Makefile.am:
+ * gnome-session/gsm-manager.c (on_store_client_added),
+ (on_store_client_removed), (gsm_manager_set_client_store),
+ (gsm_manager_class_init), (on_store_inhibitor_added),
+ (on_store_inhibitor_removed), (gsm_manager_init):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/gsm-manager.xml:
+ Add signals for client and inhibitor add/remove.
+
+2008-07-28 William Jon McCann <jmccann@redhat.com>
+
+ * doc/dbus/Makefile.am:
+ * doc/dbus/gnome-session.xml.in:
+ * gnome-session/gsm-inhibitor.xml:
+ Add docs for inhibitors.
+
+2008-07-27 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (disconnect_client):
+ Use app_restart variable.
+
+2008-07-27 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (do_phase_query_end_session):
+ Add query timeout after signalling clients.
+
+2008-07-27 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-store.c (gsm_store_dispose),
+ (gsm_store_class_init):
+ Clear store in dispose.
+
+2008-07-27 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (gsm_manager_class_init):
+ * gnome-session/gsm-store.c (gsm_store_remove),
+ (foreach_remove_wrapper), (gsm_store_foreach_remove):
+ * gnome-session/gsm-xsmp-server.c (accept_ice_connection),
+ (gsm_xsmp_server_finalize):
+ Emit removed signal after removing from store.
+
+2008-07-27 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/Makefile.am:
+ * gnome-session/gsm-client.c:
+ * gnome-session/gsm-inhibitor.c (register_inhibitor),
+ (gsm_inhibitor_constructor):
+ * gnome-session/gsm-inhibitor.xml:
+ Put inhibitors on the bus.
+
+2008-07-27 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/Makefile.am:
+ * gnome-session/gsm-client-store.c:
+ * gnome-session/gsm-client-store.h:
+ * gnome-session/gsm-inhibit-dialog.c (find_inhibitor),
+ (add_inhibitor), (on_store_inhibitor_added),
+ (on_store_inhibitor_removed),
+ (gsm_inhibit_dialog_set_inhibitor_store), (add_to_model),
+ (populate_model), (gsm_inhibit_dialog_class_init),
+ (gsm_inhibit_dialog_new):
+ * gnome-session/gsm-inhibit-dialog.h:
+ * gnome-session/gsm-inhibitor-store.c:
+ * gnome-session/gsm-inhibitor-store.h:
+ * gnome-session/gsm-inhibitor.c (get_next_inhibitor_serial),
+ (gsm_inhibitor_constructor), (gsm_inhibitor_get_id),
+ (gsm_inhibitor_finalize):
+ * gnome-session/gsm-inhibitor.h:
+ * gnome-session/gsm-manager.c (_debug_client), (debug_clients),
+ (debug_inhibitors), (_find_by_cookie), (app_condition_changed),
+ (do_phase_end_session), (gsm_manager_is_logout_inhibited),
+ (cancel_end_session), (_generate_unique_cookie),
+ (on_query_end_session_timeout), (do_phase_query_end_session),
+ (disconnect_client), (remove_clients_for_connection),
+ (remove_inhibitors_for_connection),
+ (on_xsmp_client_register_request),
+ (on_client_end_session_response), (on_store_client_added),
+ (gsm_manager_set_client_store), (gsm_manager_get_property),
+ (gsm_manager_class_init), (gsm_manager_init),
+ (gsm_manager_finalize), (gsm_manager_new),
+ (gsm_manager_is_switch_user_inhibited),
+ (gsm_manager_is_suspend_inhibited), (gsm_manager_register_client),
+ (gsm_manager_unregister_client), (gsm_manager_inhibit),
+ (gsm_manager_uninhibit):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/gsm-store.c (gsm_store_error_quark),
+ (gsm_store_size), (gsm_store_remove), (gsm_store_foreach),
+ (gsm_store_find), (gsm_store_lookup), (foreach_remove_wrapper),
+ (gsm_store_foreach_remove), (_remove_all), (gsm_store_clear),
+ (gsm_store_add), (gsm_store_set_locked), (gsm_store_get_locked),
+ (gsm_store_set_property), (gsm_store_get_property),
+ (gsm_store_class_init), (_destroy_object), (gsm_store_init),
+ (gsm_store_finalize), (gsm_store_new):
+ * gnome-session/gsm-store.h:
+ * gnome-session/gsm-xsmp-server.c (accept_ice_connection),
+ (gsm_xsmp_server_set_client_store), (gsm_xsmp_server_class_init),
+ (gsm_xsmp_server_new):
+ * gnome-session/gsm-xsmp-server.h:
+ * gnome-session/main.c (main):
+ Unify the InhibitorStore and ClientStore classes.
+
+2008-07-27 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-dbus-client.xml:
+ Add docs for dbus-client.
+
+2008-07-27 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.h:
+ * gnome-session/gsm-manager.xml:
+ Add docs for logout mode.
+
+2008-07-27 William Jon McCann <jmccann@redhat.com>
+
+ * doc/dbus/Makefile.am:
+ * doc/dbus/spec-to-docbook.xsl:
+ * gnome-session/gsm-manager.xml:
+ Require fully qualified interface
+ names in links.
+
+2008-07-27 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.xml:
+ Add more docs.
+
+2008-07-27 William Jon McCann <jmccann@redhat.com>
+
+ * data/gnome-session.schemas.in:
+ * splash/Makefile.am:
+ * splash/README:
+ Restore splash.
+
+2008-07-27 William Jon McCann <jmccann@redhat.com>
+
+ * Makefile.am:
+ * configure.in:
+ * doc/Makefile.am:
+ * doc/dbus/Makefile.am:
+ * doc/dbus/config.xsl:
+ * doc/dbus/dbus-introspect-docs.dtd:
+ * doc/dbus/docbook.css:
+ * doc/dbus/gnome-session.xml.in:
+ * doc/dbus/spec-to-docbook.xsl:
+ Add some D-Bus docs.
+
+2008-07-26 William Jon McCann <jmccann@redhat.com>
+
+ * Makefile.am:
+ * configure.in:
+ * doc/Makefile.am:
+ * man/.cvsignore:
+ * man/Makefile.am:
+ * man/default.session.5.in:
+ * man/gnome-session-save.1:
+ * man/gnome-session.1.in:
+ * man/gnome-wm.1:
+ * man/session-properties-capplet.1:
+ * man/session-properties-capplet.sgml:
+ * man/session-properties.1:
+ * man/session-properties.sgml:
+ Move man to doc dir.
+
+2008-07-26 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in:
+ * gnome-session/Makefile.am:
+ * gnome-session/gsm-inhibit-dialog.c (scale_pixbuf), (get_cmap),
+ (pixbuf_get_from_pixmap), (get_pixmap_for_window),
+ (get_pixbuf_for_window), (add_inhibitor), (setup_dialog),
+ (gsm_inhibit_dialog_constructor):
+ * gnome-session/test-inhibit.c (do_inhibit_for_window),
+ (on_widget_show), (main):
+ Add ability to get a window snapshot of application.
+
+2008-07-25 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-inhibit-dialog.c (add_inhibitor):
+ Also check for desktop files using a gnome vendor prefix.
+
+2008-07-25 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (on_query_end_session_timeout),
+ (on_client_end_session_response):
+ Use app name when id isn't available.
+
+2008-07-24 William Jon McCann <jmccann@redhat.com>
+
+ * data/gnome-session.schemas.in:
+ * splash/Makefile.am:
+ * splash/README:
+ * splash/gnome-session-splash.c:
+ * splash/gnome-session-splash.desktop.in:
+ * splash/splash-window.c:
+ * splash/splash-window.h:
+ Make startup faster by removing the splash.
+
+2008-07-24 William Jon McCann <jmccann@redhat.com>
+
+ * capplet/commands.c (append_autostart_apps),
+ (spc_command_get_store): Merge from trunk.
+ Correctly sort apps model by name.
+
+2008-07-24 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (end_phase),
+ (bus_name_owner_changed):
+ Drop some unused code.
+ Pointed out by Lucas Rocha <lucasr@gnome.org>
+
+2008-07-24 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-client-store.c (gsm_client_store_remove),
+ (foreach_remove_wrapper), (gsm_client_store_foreach_remove),
+ (_remove_all), (gsm_client_store_clear):
+ * gnome-session/gsm-inhibitor-store.c (gsm_inhibitor_store_remove):
+ Make sure client-removed signals are emitted.
+
+2008-07-24 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-inhibitor-store.c (gsm_inhibitor_store_remove),
+ (_remove_all), (gsm_inhibitor_store_clear):
+ Make sure to always emit the removed signal.
+
+2008-07-24 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-xsmp-client.c (setup_connection):
+ Use add_seconds for timeout.
+ Pointed out by Matthias Clasen <mclasen@redhat.com>
+
+2008-07-24 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gconf.c (gsm_gconf_check):
+ Remove gsm_gconf_get_client.
+ * gnome-session/gsm-autostart-app.c (is_disabled):
+ Don't leak a gconf client.
+ Pointed out by Matthias Clasen <mclasen@redhat.com>
+
+2008-07-24 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-app.c (gsm_app_dispose):
+ Don't leak id.
+ Pointed out by Matthias Clasen <mclasen@redhat.com>
+
+2008-07-24 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-autostart-app.c
+ (gsm_autostart_app_set_desktop_filename), (start_notify):
+ Make sure error is initialized.
+
+ * gnome-session/gsm-manager.c (get_caller_info):
+ Move variable initialization.
+
+2008-07-24 Frederic Crozat <fcrozat@mandriva.com>
+
+ * splash/gnome-login-sound.c: really disable login/logout sound
+ if disabled by user. Fix bug #544540.
+
+2008-07-24 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (gsm_manager_class_init):
+ Drop unused signal.
+
+ * gnome-session/gsm-manager.xml:
+ Start adding D-Bus API docs.
+
+2008-07-23 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-xsmp-client.c (xsmp_get_restart_style_hint):
+ Make sure hint is initialized.
+
+2008-07-22 William Jon McCann <jmccann@redhat.com>
+
+ * compat/at-spi-registryd-wrapper.c (main):
+ * gnome-session/gsm-manager.c (gsm_manager_setenv):
+ * gnome-session/gsm-xsmp-server.c (setup_listener):
+ * gnome-session/main.c (main):
+ * gnome-session/util.c (gsm_util_update_activation_environment),
+ (gsm_util_setenv):
+ * gnome-session/util.h:
+ Use DBus API to set environment variables in activation environment.
+ Patch from: Ray Strode Fixes #360475
+
+2008-07-22 Frederic Crozat <fcrozat@mandriva.com>
+
+ * splash/splash-window.c:
+ Dither splash background, needed for 16bpp display.
+ Fix bug #544159.
+
+2008-07-22 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-consolekit.c (gsm_consolekit_init),
+ (gsm_consolekit_can_restart), (gsm_consolekit_can_stop):
+ * gnome-session/gsm-logout-dialog.c:
+ Add some more verbosity when not compiled with PK-gnome.
+
+2008-07-21 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in: Use FORTIFY_SOURCE
+
+ * gnome-session/util.c: Add missing include
+
+2008-07-21 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in: Add our own warning flags
+
+ * gnome-session/util.c: Add missing includes
+
+2008-07-21 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-xsmp-server.c:
+ Add some missing includes
+
+2008-07-21 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-logout-dialog.c:
+ Use standard icon names.
+ Patch from Matthias Clasen. Fixes #542256
+
+2008-07-21 William Jon McCann <jmccann@redhat.com>
+
+ * capplet/commands.c (spc_command_get_app_description):
+ Must escape the comment for displaying as markup
+ Patch from Matthias Clasen. Fixes #542086
+
+2008-07-21 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in: Bump version number.
+
+2008-07-18 William Jon McCann <jmccann@redhat.com>
+
+ * Makefile.am: Remove intltool crap
+
+2008-07-18 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-client.c (gsm_client_get_restart_style_hint):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-dbus-client.c
+ (dbus_client_get_restart_style_hint), (gsm_dbus_client_class_init):
+ * gnome-session/gsm-manager.c (disconnect_client):
+ * gnome-session/gsm-xsmp-client.c (xsmp_get_restart_style_hint),
+ (gsm_xsmp_client_class_init):
+ Add support for legacy restart style hints from clients.
+
+2008-07-18 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-manager.c (phase_num_to_name), (end_phase),
+ (on_phase_timeout), (do_phase_startup), (_client_end_session),
+ (do_phase_end_session), (_client_query_end_session),
+ (inhibitor_has_flag), (gsm_manager_is_logout_inhibited),
+ (_client_cancel_end_session), (inhibitor_is_jit),
+ (cancel_end_session), (manager_switch_user), (do_attempt_reboot),
+ (do_attempt_shutdown), (manager_attempt_reboot),
+ (manager_attempt_shutdown), (manager_attempt_hibernate),
+ (manager_attempt_suspend), (do_dialog_action),
+ (inhibit_dialog_response), (query_end_session_complete),
+ (generate_cookie), (_generate_unique_cookie),
+ (on_query_end_session_timeout), (do_phase_query_end_session),
+ (start_phase), (gsm_manager_start), (find_app_for_app_id),
+ (disconnect_client), (_disconnect_dbus_client),
+ (remove_clients_for_connection), (inhibitor_has_bus_name),
+ (remove_inhibitors_for_connection), (_app_has_startup_id),
+ (on_xsmp_client_register_request),
+ (on_client_end_session_response), (gsm_manager_setenv),
+ (gsm_manager_initialization_error), (request_logout),
+ (logout_dialog_response), (show_shutdown_dialog),
+ (show_logout_dialog), (user_logout), (gsm_manager_logout),
+ (gsm_manager_register_client):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/gsm-xsmp-client.c (do_save_yourself),
+ (xsmp_query_end_session), (xsmp_end_session),
+ (save_yourself_request_callback), (save_yourself_done_callback):
+ Add a forceful shutdown path. Make shutdown path use
+ same state machine as phases.
+
+2008-07-17 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-inhibitor.c (gsm_inhibitor_new_for_client):
+ * gnome-session/gsm-inhibitor.h:
+ * gnome-session/gsm-manager.c (_debug_inhibitor),
+ (debug_inhibitors), (inhibitor_has_bus_name),
+ (remove_inhibitors_for_connection),
+ (on_client_end_session_response), (on_query_end_session_timeout):
+ Also clear JIT inhibitors from DBus clients when they leave the
+ bus.
+
+2008-07-17 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-client.c (gsm_client_cancel_end_session):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-dbus-client.c (dbus_client_cancel_end_session),
+ (gsm_dbus_client_class_init):
+ * gnome-session/gsm-dbus-client.h:
+ * gnome-session/gsm-dbus-client.xml:
+ * gnome-session/gsm-manager.c (_cancel_shutdown_client),
+ (inhibitor_is_jit), (cancel_end_session),
+ (inhibit_dialog_response):
+ * gnome-session/gsm-xsmp-client.c (xsmp_cancel_end_session),
+ (gsm_xsmp_client_class_init), (interact_request_callback):
+ Send cancellation to all clients. Cancel JIT inhibitors.
+
+2008-07-17 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-xsmp-client.c (xsmp_shutdown_cancelled),
+ (interact_request_callback), (save_yourself_done_callback):
+ Try to work around some buggy grab behavior in session clients.
+
+2008-07-17 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-inhibit-dialog.c (update_dialog_text),
+ (name_cell_data_func):
+ * gnome-session/gsm-inhibit-dialog.glade:
+ Add back heading to inhibit dialog since it makes more
+ sense when some applications are not busy.
+
+2008-07-17 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-client.c (gsm_client_get_app_name):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-dbus-client.c (dbus_client_get_app_name),
+ (gsm_dbus_client_class_init):
+ * gnome-session/gsm-manager.c (on_client_end_session_response):
+ * gnome-session/gsm-xsmp-client.c (xsmp_get_app_name),
+ (gsm_xsmp_client_class_init), (interact_request_callback):
+ Try to get something like an app-id for XSMP clients to
+ display info in inhibit dialog.
+
+2008-07-17 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (on_xsmp_client_register_request),
+ (inhibitor_has_client_id), (generate_cookie),
+ (_generate_unique_cookie), (on_client_end_session_response),
+ (on_store_client_added), (gsm_manager_register_client):
+ * gnome-session/gsm-xsmp-client.c (gsm_xsmp_client_class_init),
+ (save_yourself_phase2_request_callback),
+ (interact_request_callback), (interact_done_callback),
+ (save_yourself_done_callback), (close_connection_callback),
+ (gsm_xsmp_client_connect):
+ Start hooking up XSMP bit of query-end-session.
+
+2008-07-16 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-dbus-client.c (dbus_client_query_end_session),
+ (dbus_client_end_session), (gsm_dbus_client_class_init),
+ (gsm_dbus_client_new), (gsm_dbus_client_end_session_response):
+ * gnome-session/gsm-dbus-client.h:
+ * gnome-session/gsm-inhibit-dialog.c (add_inhibitor):
+ * gnome-session/gsm-inhibitor.c (gsm_inhibitor_new_for_client):
+ * gnome-session/gsm-inhibitor.h:
+ * gnome-session/gsm-manager.c (_debug_client), (debug_clients),
+ (disconnect_client), (remove_inhibitors_for_connection),
+ (manager_logout), (_client_query_end_session),
+ (query_end_session_complete), (on_client_end_session_response),
+ (on_query_end_session_timeout), (query_end_session),
+ (gsm_manager_register_client):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/gsm-resumed-app.c
+ (gsm_resumed_app_new_from_legacy_session):
+ * gnome-session/gsm-xsmp-client.c (register_client_callback):
+ * gnome-session/test-client-dbus.c (on_client_query_end_session),
+ (register_client), (quit_test), (main):
+ Fix up some missed property names. Hook up query-end-session stuff
+ for dbus client.
+
+2008-07-16 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/Makefile.am:
+ * gnome-session/gsm-app.c (gsm_app_set_startup_id),
+ (gsm_app_set_property), (gsm_app_get_property), (gsm_app_dispose),
+ (gsm_app_class_init), (gsm_app_get_startup_id):
+ * gnome-session/gsm-app.h:
+ * gnome-session/gsm-autostart-app.c (load_desktop_file),
+ (autostart_app_start_spawn), (autostart_app_start_activate):
+ * gnome-session/gsm-client.c (gsm_client_finalize),
+ (gsm_client_set_startup_id), (gsm_client_set_property),
+ (gsm_client_get_property), (default_stop), (gsm_client_class_init),
+ (gsm_client_get_startup_id), (gsm_client_stop),
+ (gdm_client_end_session_response):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-client.xml:
+ * gnome-session/gsm-dbus-client.c (gsm_dbus_client_error_quark),
+ (gsm_dbus_client_error_get_type), (gsm_dbus_client_class_init),
+ (gsm_dbus_client_end_session_response):
+ * gnome-session/gsm-dbus-client.h:
+ * gnome-session/gsm-dbus-client.xml:
+ * gnome-session/gsm-inhibitor.c (gsm_inhibitor_set_client_id),
+ (gsm_inhibitor_get_client_id), (gsm_inhibitor_set_property),
+ (gsm_inhibitor_get_property), (gsm_inhibitor_finalize),
+ (gsm_inhibitor_class_init), (gsm_inhibitor_new_for_client):
+ * gnome-session/gsm-inhibitor.h:
+ * gnome-session/gsm-manager.c (_find_by_startup_id),
+ (app_condition_changed), (app_registered), (phase_timeout),
+ (start_phase), (inhibitor_has_bus_name), (_app_has_startup_id),
+ (find_app_for_startup_id), (register_client_for_name),
+ (_client_has_startup_id), (on_xsmp_client_register_request),
+ (_client_query_end_session), (query_end_session_complete),
+ (inhibitor_has_client_id), (generate_cookie),
+ (_generate_unique_cookie), (on_client_end_session_response),
+ (on_query_end_session_timeout), (query_end_session),
+ (request_logout), (user_logout), (gsm_manager_logout),
+ (gsm_manager_register_client), (gsm_manager_unregister_client):
+ * gnome-session/gsm-manager.xml:
+ * gnome-session/gsm-marshal.list:
+ * gnome-session/gsm-xsmp-client.c (set_description):
+ * gnome-session/test-client-dbus.c (register_client):
+ * gnome-session/util.c (gsm_util_generate_startup_id):
+ * gnome-session/util.h:
+ Rename client-id to startup-id to distinguish from
+ Client's ID. Start adding a new shutdown path that
+ allows for more compatibility with xsmp.
+
+2008-07-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-client.c (gsm_client_query_end_session),
+ (gsm_client_end_session):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-client.xml:
+ * gnome-session/gsm-dbus-client.c (dbus_client_query_end_session),
+ (dbus_client_end_session), (gsm_dbus_client_class_init):
+ * gnome-session/gsm-manager.c (_shutdown_client):
+ * gnome-session/gsm-xsmp-client.c (xsmp_stop),
+ (xsmp_query_end_session), (xsmp_end_session),
+ (gsm_xsmp_client_class_init):
+ Add QueryEndSession and EndSession methods and signals.
+
+2008-07-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/Makefile.am:
+ * gnome-session/gsm-inhibit-dialog.c (lock_screen), (on_response),
+ (gsm_inhibit_dialog_set_action), (find_inhibitor), (add_inhibitor),
+ (update_dialog_text), (on_store_inhibitor_added),
+ (on_store_inhibitor_removed),
+ (gsm_inhibit_dialog_set_inhibitor_store),
+ (gsm_inhibit_dialog_set_property),
+ (gsm_inhibit_dialog_get_property), (name_cell_data_func),
+ (add_to_model), (populate_model), (setup_dialog),
+ (gsm_inhibit_dialog_constructor), (gsm_inhibit_dialog_dispose),
+ (gsm_inhibit_dialog_class_init), (gsm_inhibit_dialog_init),
+ (gsm_inhibit_dialog_finalize), (gsm_inhibit_dialog_new):
+ * gnome-session/gsm-inhibit-dialog.h:
+ * gnome-session/gsm-logout-inhibit-dialog.c:
+ * gnome-session/gsm-logout-inhibit-dialog.glade:
+ * gnome-session/gsm-logout-inhibit-dialog.h:
+ * gnome-session/gsm-manager.c (inhibit_dialog_response),
+ (request_reboot), (request_shutdown), (request_suspend),
+ (request_hibernate), (request_logout), (request_switch_user):
+ * gnome-session/test-client-dbus.c (register_client):
+ Rename logout_inhibit_dialog to inhibit_dialog.
+
+2008-07-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/Makefile.am:
+ * gnome-session/gsm-dbus-client.c (gsm_dbus_client_new):
+ * gnome-session/gsm-dbus-client.h:
+ * gnome-session/gsm-manager.c (register_client_for_name),
+ (gsm_manager_register_client):
+ * gnome-session/gsm-method-client.c:
+ * gnome-session/gsm-method-client.h:
+ * gnome-session/gsm-service-client.c:
+ * gnome-session/gsm-service-client.h:
+ * gnome-session/test-client-method.c:
+ Drop ServiceClient for now. Move MethodClient stuff
+ into DBusClient.
+
+2008-07-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-dbus-client.c (dbus_client_stop),
+ (gsm_dbus_client_class_init):
+ Unicast the stop signal to the client.
+
+2008-07-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-app.c (gsm_app_class_init), (gsm_app_get_id),
+ (gsm_app_is_disabled), (gsm_app_is_running),
+ (gsm_app_get_autorestart), (gsm_app_provides), (gsm_app_start),
+ (gsm_app_restart), (gsm_app_stop):
+ * gnome-session/gsm-app.h:
+ * gnome-session/gsm-autostart-app.c (gsm_autostart_app_class_init):
+ * gnome-session/gsm-client.c (default_stop),
+ (gsm_client_class_init), (gsm_client_notify_session_over),
+ (gsm_client_stop):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-resumed-app.c (gsm_resumed_app_class_init):
+ * gnome-session/gsm-resumed-app.h:
+ * gnome-session/gsm-xsmp-client.c (gsm_xsmp_client_class_init):
+ By default emit stop signal from client.
+
+2008-07-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/Makefile.am:
+ * gnome-session/gsm-client.c (register_client),
+ (gsm_client_constructor), (gsm_client_class_init):
+ * gnome-session/gsm-client.xml:
+ Register each client object with the bus.
+
+2008-07-07 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-logout-inhibit-dialog.c (lock_screen),
+ (on_response), (setup_dialog):
+ * gnome-session/gsm-logout-inhibit-dialog.glade:
+ Add ability to lock screen while waiting for processes to finish.
+
+2008-07-07 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-logout-inhibit-dialog.c (update_dialog_text),
+ (name_cell_data_func), (setup_dialog):
+ * gnome-session/gsm-logout-inhibit-dialog.glade:
+ Implement MPT's suggested rewording.
+
+2008-06-26 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-inhibitor.h:
+ * gnome-session/gsm-manager.c (manager_logout),
+ (inhibitor_has_flag), (gsm_manager_is_switch_user_inhibited),
+ (gsm_manager_is_suspend_inhibited),
+ (gsm_manager_is_logout_inhibited), (gsm_manager_inhibit):
+ * gnome-session/test-inhibit.c (do_inhibit):
+ Change inhibit flags to be opt in for each scenario.
+
+2008-06-25 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-logout-inhibit-dialog.c (model_has_one_entry),
+ (update_dialog_text), (on_store_inhibitor_added),
+ (on_store_inhibitor_removed), (populate_model):
+ * gnome-session/gsm-logout-inhibit-dialog.glade:
+ Use the proper pluralization depending on how many inhibitors are present.
+ Fix up spacing.
+
+2008-06-25 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-dbus-client.c (gsm_dbus_client_class_init):
+ * gnome-session/gsm-inhibitor.h:
+ * gnome-session/gsm-logout-inhibit-dialog.c (add_inhibitor):
+ * gnome-session/gsm-manager.c (do_attempt_reboot),
+ (do_attempt_shutdown), (manager_attempt_reboot),
+ (manager_attempt_shutdown), (manager_attempt_hibernate),
+ (manager_attempt_suspend), (gsm_manager_is_switch_user_inhibited),
+ (gsm_manager_is_suspend_inhibited), (do_action), (request_reboot),
+ (request_shutdown), (request_suspend), (request_hibernate),
+ (logout_dialog_response):
+ * gnome-session/gsm-manager.h:
+ Make inhibit work for shutdown, reboot, suspend, hibernate.
+
+2008-06-25 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-consolekit.c (get_current_session_id),
+ (get_seat_id_for_session), (get_current_seat_id),
+ (seat_can_activate_sessions), (gsm_consolekit_can_switch_user):
+ * gnome-session/gsm-consolekit.h:
+ * gnome-session/gsm-logout-dialog.c
+ (gsm_logout_supports_system_suspend),
+ (gsm_logout_supports_system_hibernate),
+ (gsm_logout_supports_switch_user), (gsm_get_dialog):
+ * gnome-session/gsm-logout-inhibit-dialog.c
+ (gsm_logout_inhibit_dialog_class_init):
+ * gnome-session/gsm-manager.c
+ (gsm_manager_is_switch_user_inhibited), (manager_switch_user),
+ (do_action), (request_switch_user), (logout_dialog_response):
+ Make switch user work.
+
+2008-06-24 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-logout-dialog.c (gsm_get_dialog):
+ Center the dialog and set the appropriate window icon.
+
+2008-06-24 William Jon McCann <jmccann@redhat.com>
+
+ * AUTHORS: Update
+
+2008-06-24 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in:
+ * gnome-session/Makefile.am:
+ Remove test program for service client.
+ Bump intltool req.
+
+2008-06-24 William Jon McCann <jmccann@redhat.com>
+
+ * egg/eggdesktopfile.c (egg_desktop_file_new_from_dirs):
+ * egg/eggdesktopfile.h:
+ * gnome-session/gsm-logout-inhibit-dialog.c (find_inhibitor),
+ (add_inhibitor):
+ * gnome-session/test-inhibit.c (do_inhibit):
+ Search the correct dirs when looking up app ids.
+
+2008-06-24 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-inhibitor-store.c (gsm_inhibitor_store_lookup),
+ (foreach_remove_wrapper), (gsm_inhibitor_store_foreach_remove),
+ (gsm_inhibitor_store_add), (gsm_inhibitor_store_init):
+ * gnome-session/gsm-inhibitor-store.h:
+ * gnome-session/gsm-logout-inhibit-dialog.c (find_inhibitor),
+ (_util_icon_remove_extension), (_find_icon), (_load_icon),
+ (add_inhibitor), (on_store_inhibitor_added),
+ (on_store_inhibitor_removed),
+ (gsm_logout_inhibit_dialog_set_inhibitor_store),
+ (gsm_logout_inhibit_dialog_set_property),
+ (gsm_logout_inhibit_dialog_get_property), (name_cell_data_func),
+ (add_to_model), (populate_model), (setup_dialog),
+ (gsm_logout_inhibit_dialog_class_init),
+ (gsm_logout_inhibit_dialog_init),
+ (gsm_logout_inhibit_dialog_finalize),
+ (gsm_logout_inhibit_dialog_new):
+ * gnome-session/gsm-logout-inhibit-dialog.h:
+ * gnome-session/gsm-manager.c (inhibitor_has_bus_name),
+ (bus_name_owner_changed), (logout_inhibit_dialog_response),
+ (request_logout), (_generate_unique_cookie),
+ (gsm_manager_uninhibit):
+ Populate inhibit dialog.
+
+2008-06-24 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in:
+ * gnome-session/Makefile.am:
+ * gnome-session/gsm-client-store.h:
+ * gnome-session/gsm-inhibitor-store.c
+ (gsm_inhibitor_store_error_quark), (gsm_inhibitor_store_size),
+ (gsm_inhibitor_store_clear), (remove_inhibitor),
+ (gsm_inhibitor_store_remove), (gsm_inhibitor_store_foreach),
+ (gsm_inhibitor_store_find), (gsm_inhibitor_store_lookup),
+ (gsm_inhibitor_store_foreach_remove), (gsm_inhibitor_store_add),
+ (gsm_inhibitor_store_set_property),
+ (gsm_inhibitor_store_get_property),
+ (gsm_inhibitor_store_class_init), (inhibitor_unref),
+ (gsm_inhibitor_store_init), (gsm_inhibitor_store_finalize),
+ (gsm_inhibitor_store_new):
+ * gnome-session/gsm-inhibitor-store.h:
+ * gnome-session/gsm-inhibitor.c (gsm_inhibitor_constructor),
+ (gsm_inhibitor_init), (gsm_inhibitor_set_bus_name),
+ (gsm_inhibitor_set_app_id), (gsm_inhibitor_set_reason),
+ (gsm_inhibitor_set_cookie), (gsm_inhibitor_set_flags),
+ (gsm_inhibitor_set_toplevel_xid), (gsm_inhibitor_get_bus_name),
+ (gsm_inhibitor_get_app_id), (gsm_inhibitor_get_reason),
+ (gsm_inhibitor_get_flags), (gsm_inhibitor_get_toplevel_xid),
+ (gsm_inhibitor_get_cookie), (gsm_inhibitor_set_property),
+ (gsm_inhibitor_get_property), (gsm_inhibitor_finalize),
+ (gsm_inhibitor_class_init), (gsm_inhibitor_new):
+ * gnome-session/gsm-inhibitor.h:
+ * gnome-session/gsm-logout-dialog.c (gsm_get_dialog):
+ * gnome-session/gsm-logout-dialog.h:
+ * gnome-session/gsm-logout-inhibit-dialog.c
+ (gsm_logout_inhibit_dialog_set_action),
+ (gsm_logout_inhibit_dialog_set_property),
+ (gsm_logout_inhibit_dialog_get_property), (on_response),
+ (setup_dialog), (gsm_logout_inhibit_dialog_constructor),
+ (gsm_logout_inhibit_dialog_dispose),
+ (gsm_logout_inhibit_dialog_class_init),
+ (gsm_logout_inhibit_dialog_init),
+ (gsm_logout_inhibit_dialog_finalize),
+ (gsm_logout_inhibit_dialog_new):
+ * gnome-session/gsm-logout-inhibit-dialog.glade:
+ * gnome-session/gsm-logout-inhibit-dialog.h:
+ * gnome-session/gsm-manager.c (inhibitor_has_bus_name),
+ (remove_inhibitors_for_connection), (bus_name_owner_changed),
+ (gsm_manager_init), (gsm_manager_finalize),
+ (gsm_manager_is_logout_inhibited), (do_action),
+ (logout_inhibit_dialog_response), (request_logout),
+ (logout_dialog_response), (initiate_logout),
+ (_generate_unique_cookie), (gsm_manager_inhibit),
+ (gsm_manager_uninhibit):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/test-inhibit.c (do_inhibit):
+ Add an inhibitor class and store class to make it
+ easier to update the model for the inhibit dialog.
+ Add a stub for an inhibit dialog.
+
+2008-06-23 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/Makefile.am:
+ * gnome-session/gsm-manager.c (gsm_inhibitor_free),
+ (inhibitor_has_bus_name), (inhibit_changed_check),
+ (remove_inhibitors_for_connection), (bus_name_owner_changed),
+ (gsm_manager_init), (gsm_manager_finalize), (generate_cookie),
+ (_generate_unique_cookie), (gsm_manager_inhibit),
+ (gsm_manager_uninhibit):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/gsm-manager.xml:
+ * gnome-session/test-client-method.c (register_client):
+ * gnome-session/test-inhibit.c (session_manager_connect),
+ (do_inhibit), (session_manager_disconnect), (do_uninhibit), (main):
+ Implement inhibit registration. Doesn't actually use it for
+ anything yet.
+
+2008-06-18 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-app.c (gsm_app_error_quark), (gsm_app_set_id),
+ (gsm_app_set_client_id), (gsm_app_set_property),
+ (gsm_app_get_property), (gsm_app_dispose), (gsm_app_class_init):
+ * gnome-session/gsm-app.h:
+ * gnome-session/gsm-autostart-app.c (load_desktop_file),
+ (gsm_autostart_app_set_desktop_filename),
+ (gsm_autostart_app_set_property), (gsm_autostart_app_get_property),
+ (gsm_autostart_app_dispose), (is_disabled),
+ (autostart_app_stop_spawn), (autostart_app_stop_activate),
+ (gsm_autostart_app_stop), (autostart_app_start_spawn),
+ (start_notify), (autostart_app_start_activate),
+ (gsm_autostart_app_start), (gsm_autostart_app_constructor),
+ (gsm_autostart_app_class_init), (gsm_autostart_app_new):
+ * gnome-session/gsm-autostart-app.h:
+ * gnome-session/gsm-manager.c (_app_has_client_id),
+ (find_app_for_client_id), (register_client_for_name),
+ (bus_name_owner_changed), (register_manager),
+ (append_default_apps), (append_autostart_apps),
+ (append_required_apps):
+ Add preliminary support for service clients.
+
+2008-06-18 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (bus_name_owner_changed),
+ (on_xsmp_client_register_request), (gsm_manager_finalize):
+ * gnome-session/gsm-manager.xml:
+ Drop set_name.
+
+2008-06-18 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/Makefile.am:
+ * gnome-session/gsm-app.c (gsm_app_class_init),
+ (gsm_app_get_autorestart), (gsm_app_restart):
+ * gnome-session/gsm-app.h:
+ * gnome-session/gsm-autostart-app.c (gsm_autostart_app_dispose),
+ (gsm_autostart_app_stop), (gsm_autostart_app_start),
+ (gsm_autostart_app_restart), (gsm_autostart_app_get_autorestart),
+ (gsm_autostart_app_class_init):
+ * gnome-session/gsm-client.c (gsm_client_class_init):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-dbus-client.c (gsm_dbus_client_set_bus_name),
+ (gsm_dbus_client_get_bus_name), (gsm_dbus_client_set_property),
+ (gsm_dbus_client_get_property), (gsm_dbus_client_class_init):
+ * gnome-session/gsm-dbus-client.h:
+ * gnome-session/gsm-manager.c (gsm_manager_error_get_type),
+ (find_app_for_app_id), (disconnect_client),
+ (_disconnect_dbus_client), (remove_clients_for_connection),
+ (on_client_disconnected), (on_xsmp_client_register_request),
+ (gsm_manager_register_client), (gsm_manager_unregister_client):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/gsm-manager.xml:
+ * gnome-session/gsm-method-client.c (gsm_method_client_class_init):
+ * gnome-session/gsm-resumed-app.c (app_exited),
+ (gsm_resumed_app_start), (gsm_resumed_app_restart),
+ (gsm_resumed_app_dispose), (gsm_resumed_app_class_init):
+ * gnome-session/gsm-service-client.c
+ (gsm_service_client_class_init):
+ * gnome-session/gsm-xsmp-client.c (gsm_xsmp_client_class_init),
+ (register_client_callback):
+ * gnome-session/test-client-method.c (session_manager_connect),
+ (register_client), (session_manager_disconnect),
+ (unregister_client), (main):
+ Add dbus method client support. Add test client. Fix up
+ restart handling.
+
+2008-06-18 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-app.c:
+ * gnome-session/gsm-app.h:
+ * gnome-session/gsm-autostart-app.c:
+ * gnome-session/gsm-autostart-app.h:
+ * gnome-session/gsm-client.c:
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-logout-dialog.c:
+ * gnome-session/gsm-manager.c:
+ * gnome-session/gsm-resumed-app.c:
+ * gnome-session/gsm-resumed-app.h:
+ * gnome-session/gsm-xsmp-client.c:
+ * gnome-session/gsm-xsmp-server.c:
+ * gnome-session/main.c:
+ Update copyright headers.
+
+2008-06-17 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/Makefile.am:
+ * gnome-session/gsm-app.c (gsm_app_class_init), (gsm_app_get_id):
+ * gnome-session/gsm-app.h:
+ * gnome-session/gsm-autostart-app.c
+ (gsm_autostart_app_set_desktop_file), (gsm_autostart_app_dispose),
+ (is_disabled), (app_exited), (gsm_autostart_app_get_id),
+ (gsm_autostart_app_constructor), (gsm_autostart_app_class_init):
+ * gnome-session/gsm-client-store.c (gsm_client_store_get_locked):
+ * gnome-session/gsm-client-store.h:
+ * gnome-session/gsm-client.c (gsm_client_finalize),
+ (gsm_client_set_app_id), (gsm_client_set_property),
+ (gsm_client_get_property), (gsm_client_class_init),
+ (gsm_client_get_app_id), (gsm_client_notify_session_over),
+ (gsm_client_restart), (gsm_client_stop), (gsm_client_disconnected):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-dbus-client.c (gsm_dbus_client_constructor),
+ (gsm_dbus_client_init), (gsm_dbus_client_set_property),
+ (gsm_dbus_client_get_property), (gsm_dbus_client_finalize),
+ (gsm_dbus_client_class_init):
+ * gnome-session/gsm-dbus-client.h:
+ * gnome-session/gsm-manager.c (gsm_manager_error_get_type),
+ (app_condition_changed), (phase_timeout), (_start_app),
+ (find_app_for_client_id), (find_app_for_app_id),
+ (on_xsmp_client_register_request), (on_store_client_added),
+ (gsm_manager_class_init), (_shutdown_client), (get_caller_info),
+ (gsm_manager_register_client), (gsm_manager_unregister_client),
+ (gsm_manager_inhibit), (gsm_manager_uninhibit):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/gsm-manager.xml:
+ * gnome-session/gsm-method-client.c
+ (gsm_method_client_constructor), (gsm_method_client_init),
+ (gsm_method_client_set_property), (gsm_method_client_get_property),
+ (gsm_method_client_finalize), (gsm_method_client_stop),
+ (gsm_method_client_restart), (gsm_method_client_class_init),
+ (gsm_method_client_new):
+ * gnome-session/gsm-method-client.h:
+ * gnome-session/gsm-resumed-app.c (gsm_resumed_app_get_id),
+ (gsm_resumed_app_class_init):
+ * gnome-session/gsm-service-client.c
+ (gsm_service_client_constructor), (gsm_service_client_init),
+ (gsm_service_client_set_property),
+ (gsm_service_client_get_property), (gsm_service_client_finalize),
+ (gsm_service_client_stop), (gsm_service_client_restart),
+ (gsm_service_client_class_init), (gsm_service_client_new):
+ * gnome-session/gsm-service-client.h:
+ * gnome-session/gsm-xsmp-client.c (xsmp_restart), (xsmp_stop),
+ (_boolean_handled_accumulator), (gsm_xsmp_client_class_init),
+ (register_client_callback), (save_yourself_request_callback),
+ (save_yourself_phase2_request_callback),
+ (interact_request_callback), (interact_done_callback),
+ (save_yourself_done_callback), (gsm_xsmp_client_register_request),
+ (gsm_xsmp_client_save_state):
+ * gnome-session/gsm-xsmp-client.h:
+ Stub out some dbus based client classes. Make the GsmClient
+ class more generic.
+
+2008-06-16 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-consolekit.c (get_action_from_error):
+ * gnome-session/gsm-logout-dialog.c (gsm_get_dialog),
+ (gsm_get_shutdown_dialog), (gsm_get_logout_dialog):
+ * gnome-session/gsm-logout-dialog.h:
+ * gnome-session/gsm-manager.c (on_client_disconnected),
+ (gsm_manager_init), (manager_request_reboot),
+ (manager_request_shutdown), (_shutdown_client), (manager_logout),
+ (manager_request_hibernate), (manager_request_sleep),
+ (logout_dialog_response), (show_shutdown_dialog),
+ (show_logout_dialog), (initiate_logout), (gsm_manager_shutdown),
+ (gsm_manager_logout):
+ Fix and simplify shutdown handling.
+
+2008-06-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/Makefile.am:
+ * gnome-session/gconf.c (gsm_gconf_shutdown):
+ * gnome-session/gdm.c (gdm_send_protocol_msg),
+ (get_display_number), (gdm_authenticate_connection),
+ (gdm_shutdown_protocol_connection), (gdm_init_protocol_connection),
+ (gdm_parse_query_response), (gdm_update_logout_actions),
+ (gdm_is_available), (gdm_set_logout_action), (gdm_new_login):
+ * gnome-session/gsm-logout-dialog.c:
+ * gnome-session/gsm-manager.c:
+ * gnome-session/gsm-power-manager.c (on_name_owner_changed),
+ (ensure_gpm_connection), (gsm_power_manager_init),
+ (gsm_power_manager_finalize), (gsm_power_manager_get_property),
+ (gsm_power_manager_can_suspend), (gsm_power_manager_can_hibernate),
+ (gsm_power_manager_attempt_suspend),
+ (gsm_power_manager_attempt_hibernate), (gsm_get_power_manager):
+ * gnome-session/gsm-power-manager.h:
+ * gnome-session/logout-dialog.c:
+ * gnome-session/logout-dialog.h:
+ * gnome-session/power-manager.c:
+ * gnome-session/power-manager.h:
+ Strip trailing whitespace. Make pretty.
+
+2008-06-15 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in:
+ * gnome-session/gsm-manager.c (initiate_shutdown),
+ (logout_dialog_response), (gsm_manager_logout):
+ * gnome-session/logout-dialog.c (gsm_logout_dialog_set_property),
+ (gsm_logout_dialog_get_property), (on_ck_request_completed),
+ (gsm_logout_dialog_destroy), (gsm_logout_supports_reboot),
+ (gsm_logout_supports_shutdown), (gsm_logout_dialog_timeout),
+ (gsm_logout_dialog_set_timeout), (gsm_get_logout_dialog):
+ * gnome-session/logout-dialog.h:
+ Add config summary. Add some debug spew.
+
+2008-06-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (register_manager),
+ (gsm_manager_shutdown), (gsm_manager_logout):
+ * gnome-session/gsm-manager.h:
+ Register to the session bus.
+
+2008-06-15 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/main.c (maybe_start_session_bus),
+ (acquire_name_on_proxy), (acquire_name), (main):
+ Acquire a name on the bus.
+
+2008-06-15 William Jon McCann <jmccann@redhat.com>
+
+ Don't use "capplet" anywhere as this term shouldn't used anymore.
+ #537310, Frederic Peters.
+
+ * data/gnome-session.schemas.in: replaced "capplet" with "Session
+ Preferences".
+
+2008-06-15 William Jon McCann <jmccann@redhat.com>
+
+ * configure.in:
+ * gnome-session/Makefile.am:
+ * gnome-session/gdm.c (gdm_init_protocol_connection),
+ (gdm_is_available):
+ * gnome-session/gdm.h:
+ * gnome-session/gsm-consolekit.c (gsm_consolekit_get_property),
+ (gsm_consolekit_class_init), (gsm_consolekit_ensure_ck_connection),
+ (gsm_consolekit_on_name_owner_changed), (gsm_consolekit_init),
+ (gsm_consolekit_finalize), (gsm_consolekit_error_quark),
+ (gsm_consolekit_new), (try_system_stop), (try_system_restart),
+ (emit_restart_complete), (emit_stop_complete),
+ (system_restart_auth_cb), (system_stop_auth_cb),
+ (get_action_from_error), (request_restart_priv),
+ (request_stop_priv), (gsm_consolekit_attempt_restart),
+ (gsm_consolekit_attempt_stop), (gsm_consolekit_can_restart),
+ (gsm_consolekit_can_stop), (gsm_get_consolekit):
+ * gnome-session/gsm-consolekit.h:
+ * gnome-session/gsm-manager.c (do_request_reboot),
+ (do_request_shutdown), (manager_shutdown):
+ * gnome-session/logout-dialog.c (on_ck_request_completed),
+ (gsm_logout_dialog_init), (gsm_logout_dialog_destroy),
+ (gsm_logout_supports_reboot), (gsm_logout_supports_shutdown),
+ (gsm_get_logout_dialog):
+ Add CK shutdown support. Merged from trunk.
+
+2008-06-13 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-manager.c (on_app_exited), (_start_app),
+ (on_client_disconnected), (on_manage_request):
+ Add restart support back.
+
+2008-06-13 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-app.c (gsm_app_class_init), (gsm_app_died):
+ * gnome-session/gsm-app.h:
+ * gnome-session/gsm-autostart-app.c (app_exited), (launch):
+ Wait on processes so we don't create zombies.
+
+2008-06-13 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-app.c (gsm_app_init), (gsm_app_set_phase),
+ (set_property), (gsm_app_class_init), (gsm_app_start):
+ * gnome-session/gsm-autostart-app.c (get_basename),
+ (gsm_autostart_app_constructor), (gsm_autostart_app_class_init),
+ (gsm_autostart_app_new):
+ * gnome-session/gsm-client-store.c (gsm_client_store_add):
+ * gnome-session/gsm-client.c (gsm_client_class_init):
+ * gnome-session/gsm-manager.c (end_phase), (_start_app),
+ (start_phase), (_client_has_client_id), (_app_has_client_id),
+ (on_manage_request), (on_store_client_added),
+ (gsm_manager_set_client_store), (append_app),
+ (append_default_apps), (append_autostart_apps),
+ (append_legacy_session_apps), (append_required_apps),
+ (gsm_manager_class_init):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/gsm-resumed-app.c (gsm_resumed_app_init),
+ (gsm_resumed_app_class_init):
+ * gnome-session/gsm-xsmp-client.c (client_iochannel_watch),
+ (client_protocol_timeout), (setup_connection),
+ (debug_print_property), (set_properties_callback),
+ (delete_properties_callback), (get_properties_callback),
+ (do_save_yourself), (xsmp_save_yourself),
+ (xsmp_save_yourself_phase2), (xsmp_interact),
+ (xsmp_shutdown_cancelled), (xsmp_stop), (gsm_xsmp_client_finalize),
+ (gsm_xsmp_client_class_init), (register_client_callback),
+ (save_yourself_request_callback):
+ * gnome-session/gsm-xsmp-server.c (accept_ice_connection),
+ (accept_xsmp_connection), (ice_error_handler),
+ (ice_io_error_handler), (sms_error_handler), (setup_listener):
+ Actually register clients.
+
+2008-06-12 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-app.c (gsm_app_init), (set_property),
+ (get_property), (dispose), (gsm_app_class_init), (gsm_app_get_id),
+ (gsm_app_get_client_id), (gsm_app_get_phase), (gsm_app_is_running),
+ (gsm_app_provides), (gsm_app_start), (gsm_app_stop),
+ (gsm_app_exited):
+ * gnome-session/gsm-app.h:
+ * gnome-session/gsm-autostart-app.c (gsm_autostart_app_init),
+ (gsm_autostart_app_set_desktop_file),
+ (gsm_autostart_app_set_property), (gsm_autostart_app_get_property),
+ (gsm_autostart_app_dispose), (if_exists_condition_cb),
+ (unless_exists_condition_cb), (is_running), (is_disabled),
+ (app_exited), (launch), (get_basename),
+ (gsm_autostart_app_provides), (gsm_autostart_app_class_init),
+ (gsm_autostart_app_new):
+ * gnome-session/gsm-client-store.c:
+ * gnome-session/gsm-client-store.h:
+ * gnome-session/gsm-client.c (gsm_client_finalize):
+ * gnome-session/gsm-manager.c (app_condition_changed),
+ (_start_app), (start_phase), (append_app), (_find_app_provides),
+ (append_required_apps), (gsm_manager_init), (gsm_manager_finalize),
+ (initiate_shutdown):
+ * gnome-session/gsm-resumed-app.c (launch), (get_basename),
+ (gsm_resumed_app_class_init),
+ (gsm_resumed_app_new_from_legacy_session):
+ * gnome-session/gsm-resumed-app.h:
+ * gnome-session/gsm-xsmp-client.c (gsm_xsmp_client_finalize):
+ A bit more refactoring.
+
+2008-06-12 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/gsm-client-store.c (gsm_client_store_size),
+ (gsm_client_store_lookup), (_has_client_id),
+ (gsm_client_store_add), (gsm_client_store_set_locked),
+ (gsm_client_store_set_property), (gsm_client_store_get_property),
+ (gsm_client_store_class_init):
+ * gnome-session/gsm-client-store.h:
+ * gnome-session/gsm-client.c (gsm_client_set_status),
+ (gsm_client_set_client_id), (gsm_client_set_property),
+ (gsm_client_get_property), (_boolean_handled_accumulator),
+ (gsm_client_class_init), (gsm_client_get_client_id),
+ (gsm_client_stop), (gsm_client_manage_request),
+ (gsm_client_logout_request):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-manager.c (_find_by_client_id),
+ (app_condition_changed), (on_store_client_added),
+ (gsm_manager_set_client_store), (_stop_client), (manager_shutdown),
+ (_shutdown_client), (initiate_shutdown):
+ * gnome-session/gsm-marshal.list:
+ * gnome-session/gsm-xsmp-client.c (client_iochannel_watch),
+ (client_protocol_timeout), (find_property), (set_description),
+ (setup_connection), (gsm_xsmp_client_constructor),
+ (gsm_xsmp_client_init), (delete_property), (debug_print_property),
+ (set_properties_callback), (delete_properties_callback),
+ (get_properties_callback), (prop_to_command),
+ (xsmp_get_restart_command), (xsmp_get_discard_command),
+ (xsmp_get_autorestart), (xsmp_restart), (do_save_yourself),
+ (xsmp_save_yourself), (xsmp_save_yourself_phase2), (xsmp_interact),
+ (xsmp_shutdown_cancelled), (xsmp_stop),
+ (gsm_client_set_ice_connection), (gsm_xsmp_client_set_property),
+ (gsm_xsmp_client_get_property), (gsm_xsmp_client_finalize),
+ (gsm_xsmp_client_class_init), (gsm_xsmp_client_new),
+ (register_client_callback), (save_yourself_request_callback),
+ (save_yourself_phase2_request_callback),
+ (interact_request_callback), (interact_done_callback),
+ (save_yourself_done_callback), (close_connection_callback),
+ (gsm_xsmp_client_connect):
+ * gnome-session/gsm-xsmp-client.h:
+ * gnome-session/gsm-xsmp-server.c (accept_ice_connection):
+ Give the code another whacking.
+
+2008-06-11 William Jon McCann <jmccann@redhat.com>
+
+ * gnome-session/Makefile.am:
+ * gnome-session/app-autostart.c:
+ * gnome-session/app-autostart.h:
+ * gnome-session/app-resumed.c:
+ * gnome-session/app-resumed.h:
+ * gnome-session/app.c:
+ * gnome-session/app.h:
+ * gnome-session/client-xsmp.c:
+ * gnome-session/client-xsmp.h:
+ * gnome-session/client.c:
+ * gnome-session/client.h:
+ * gnome-session/dbus.c:
+ * gnome-session/dbus.h:
+ * gnome-session/gconf.c (gsm_gconf_check):
+ * gnome-session/gsm-app.c (set_property), (get_property),
+ (dispose), (get_basename), (gsm_app_get_phase),
+ (gsm_app_is_disabled), (gsm_app_provides), (app_exited), (launch):
+ * gnome-session/gsm-app.h:
+ * gnome-session/gsm-autostart-app.c (gsm_autostart_app_init),
+ (gsm_autostart_app_class_init), (gsm_autostart_app_dispose),
+ (gsm_autostart_app_new), (unless_exists_condition_cb),
+ (if_exists_condition_cb), (gconf_condition_cb), (is_disabled):
+ * gnome-session/gsm-autostart-app.h:
+ * gnome-session/gsm-client-store.c (gsm_client_store_error_quark),
+ (gsm_client_store_clear), (remove_client),
+ (gsm_client_store_remove), (gsm_client_store_foreach),
+ (gsm_client_store_find), (gsm_client_store_foreach_remove),
+ (gsm_client_store_add), (gsm_client_store_class_init),
+ (client_unref), (gsm_client_store_init),
+ (gsm_client_store_finalize), (gsm_client_store_new):
+ * gnome-session/gsm-client-store.h:
+ * gnome-session/gsm-client.c (get_next_client_serial),
+ (gsm_client_constructor), (gsm_client_init), (gsm_client_finalize),
+ (gsm_client_class_init), (gsm_client_get_id),
+ (gsm_client_register_client), (gsm_client_request_logout):
+ * gnome-session/gsm-client.h:
+ * gnome-session/gsm-manager.c (gsm_manager_error_quark),
+ (app_condition_changed), (end_phase), (app_registered),
+ (phase_timeout), (start_phase), (gsm_manager_start),
+ (remove_client_for_connection), (remove_clients_for_connection),
+ (bus_name_owner_changed), (register_manager),
+ (gsm_manager_set_failsafe), (gsm_manager_set_client_store),
+ (gsm_manager_set_property), (gsm_manager_get_property),
+ (append_app), (append_default_apps), (append_autostart_apps),
+ (append_legacy_session_apps), (append_saved_session_apps),
+ (append_required_apps), (load_apps), (gsm_manager_constructor),
+ (gsm_manager_class_init), (gsm_manager_init),
+ (gsm_manager_finalize), (gsm_manager_new), (gsm_manager_setenv),
+ (gsm_manager_initialization_error), (manager_shutdown),
+ (initiate_shutdown), (logout_dialog_response),
+ (gsm_manager_initiate_shutdown), (gsm_manager_shutdown),
+ (gsm_manager_logout), (manager_set_name), (gsm_manager_set_name):
+ * gnome-session/gsm-manager.h:
+ * gnome-session/gsm-marshal.list:
+ * gnome-session/gsm-resumed-app.c (gsm_resumed_app_init),
+ (gsm_resumed_app_class_init),
+ (gsm_resumed_app_new_from_legacy_session),
+ (gsm_resumed_app_new_from_session), (get_basename), (launch):
+ * gnome-session/gsm-resumed-app.h:
+ * gnome-session/gsm-xsmp-client.c (gsm_xsmp_client_init),
+ (gsm_xsmp_client_class_init), (gsm_xsmp_client_new),
+ (xsmp_finalize), (client_iochannel_watch),
+ (client_protocol_timeout), (register_client_callback),
+ (do_save_yourself), (save_yourself_request_callback),
+ (xsmp_save_yourself), (save_yourself_phase2_request_callback),
+ (xsmp_save_yourself_phase2), (interact_request_callback),
+ (xsmp_interact), (interact_done_callback),
+ (xsmp_shutdown_cancelled), (xsmp_die),
+ (save_yourself_done_callback), (close_connection_callback),
+ (debug_print_property), (find_property), (delete_property),
+ (set_properties_callback), (delete_properties_callback),
+ (get_properties_callback), (xsmp_get_client_id), (xsmp_get_pid),
+ (xsmp_get_desktop_file), (prop_to_command),
+ (xsmp_get_restart_command), (xsmp_get_discard_command),
+ (xsmp_get_autorestart), (set_description),
+ (gsm_xsmp_client_connect):
+ * gnome-session/gsm-xsmp-client.h:
+ * gnome-session/gsm-xsmp-server.c (accept_ice_connection),
+ (gsm_xsmp_server_start), (gsm_xsmp_server_set_client_store),
+ (gsm_xsmp_server_set_property), (gsm_xsmp_server_get_property),
+ (accept_xsmp_connection), (ice_error_handler),
+ (ice_io_error_handler), (sms_error_handler), (auth_entry_new),
+ (update_iceauthority), (setup_listener),
+ (gsm_xsmp_server_constructor), (gsm_xsmp_server_class_init),
+ (gsm_xsmp_server_init), (gsm_xsmp_server_finalize),
+ (gsm_xsmp_server_new):
+ * gnome-session/gsm-xsmp-server.h:
+ * gnome-session/gsm.h:
+ * gnome-session/logout-dialog.c (gsm_logout_dialog_timeout),
+ (gsm_get_logout_dialog):
+ * gnome-session/logout-dialog.h:
+ * gnome-session/main.c (gsm_dbus_init), (gsm_dbus_check), (main):
+ * gnome-session/org.gnome.SessionManagement.xml:
+ * gnome-session/session.c:
+ * gnome-session/session.h:
+ * gnome-session/util.c (gsm_util_init_error),
+ (gsm_util_generate_client_id):
+ * gnome-session/util.h:
+ * gnome-session/xsmp.c:
+ * gnome-session/xsmp.h:
+ First crack at new new gnome-session based around D-Bus.
+ XSMP still provided but more as a legacy feature. Not quite
+ operational yet. See bug #535829 for more info.
+
+2008-06-10 Kjartan Maraas <kmaraas@gnome.org>
+
+ * compat/gnome-keyring-daemon-wrapper.c: (keyring_daemon_start),
+ (main): Fix some invalid reads and a leak reported by valgrind. Closes
+ bug #537577.
+
+2008-06-05 Lucas Rocha <lucasr@gnome.org>
+
+ * data/session-properties.glade: add bevel to list of startup apps on
+ session properties capplet. #536833, Matthias Clasen.
+
+2008-06-03 Lucas Rocha <lucasr@gnome.org>
+
+ * configure.in: post-release bump to 2.23.4
+
+2008-06-03 Lucas Rocha <lucasr@gnome.org>
+
+ * NEWS:
+ * README: Version 2.23.3.
+
+2008-05-31 Lucas Rocha <lucasr@gnome.org>
+
+ * compat/at-spi-registryd-wrapper.c (show_error, registry_ior_watch,
+ registry_ior_watch_timeout, main): remove dialog shown after a timeout
+ in at-spi wrapper program in order to avoid false-positive at-spi
+ errors. #524263, Li Yuan.
+
+2008-05-31 Lucas Rocha <lucasr@gnome.org>
+
+ * configure.in: properly check for broadcast startup message function
+ on Gdk to have icons shown on session startup.
+
+2008-05-31 Lucas Rocha <lucasr@gnome.org>
+
+ Fix crash when appending resumed apps from legacy session file.
+ #532075, Ed Catmur. Patch by Ed Catmur.
+
+ * gnome-session/app-resumed.c (get_basename): implement get_basename
+ by returning the program name for now. This will probably need to be
+ changed in the future with the new session saving implementation based
+ on desktop files.
+ * gnome-session/app.c (get_basename, gsm_app_get_basename,
+ gsm_app_class_init): turn gsm_app_get_basename into an overridable
+ method so that we can re-implement it on different types of apps.
+ * gnome-session/session.c (append_app): check if basename is NULL
+ before checking if app has been registered earlier.
+
+2008-05-29 Dan Winship <danw@gnome.org>
+
+ * gnome-session/xsmp.c: Deal with the possibility of multiple
+ local connections, and recognize "unix/" as a local connection
+ prefix as well as "local/". Fixes XSMP under Fedora Rawhide.
+ Problem noted by Kjartan Maraas.
+
+2008-05-27 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/session.c, gnome-session/xsmp.c, gnome-session/app.c:
+ fixed several memory leaks. #534641, Kjartan Maraas.
+
+2008-05-25 Lucas Rocha <lucasr@gnome.org>
+
+ Add support for drag and drop of desktop files on Session Properties
+ capplet. #437206, Vincent Untz. Patch from Jared Moore <jaredm@gmx.com>
+
+ * capplet/commands.c (spc_command_add_app): check if icon is set
+ on iter before using default app icon.
+ * capplet/ui.c
+ (setup_treeview, drag_data_cb, add_from_desktop_file): set drag and
+ drop handlers. The treeview now can receive a list of desktop file uris
+ from DnD.
+
+2008-05-25 Lucas Rocha <lucasr@gnome.org>
+
+ Fix gnome-keyring-wrapper program to correctly set SSH_AUTH_SOCK env
+ variable on session initialization phase. #534055, Dan Winship.
+
+ * compat/gnome-keyring-daemon-wrapper.c (keyring_daemon_start):
+ capture output from gnome-keyring-daemon and set SSH_AUTH_SOCK and
+ GNOME_KEYRING_PID env variables properly.
+
+2008-05-25 Lucas Rocha <lucasr@gnome.org>
+
+ Make splash listen to "SessionRunning" to know when to go away on
+ session startup. #529602, Karsten Bräckelmann.
+
+ * splash/Makefile.am: add D-Bus bits on INCLUDES and LDADD.
+ * splash/README: remove obsolete note about gnome-session-splash.
+ * splash/gnome-session-splash.c (get_session_bus,
+ set_session_running_handler, on_session_running, main): listen to
+ "SessionRunning" D-Bus signal to know when go away.
+ * splash/gnome-session-splash.desktop.in: move splash to Panel phase
+ as it's the phase just after window manager is started.
+
+2008-05-25 Lucas Rocha <lucasr@gnome.org>
+
+ Emit "SessionRunning" D-Bus signal when session is fully up and
+ running with all autostart apps present.
+
+ * gnome-session/dbus.[ch]
+ (gsm_dbus_server_class_init): add "session-running" signal to
+ GsmDBusServer class.
+ (gsm_dbus_emit_session_running): new method for emitting the new signal.
+ * gnome-session/org.gnome.SessionManagement.xml: added "SessionRunning"
+ signal.
+ (gsm_dbus_emit_session_over): rename gsm_dbus_session_over to
+ gsm_dbus_emit_session_over for consistency.
+ * gnome-session/session.c (end_phase): added
+ gsm_dbus_emit_session_emit() call when GSM_SESSION_PHASE_RUNNING is
+ reached.
+
+2008-05-24 Lucas Rocha <lucasr@gnome.org>
+
+ Emit "SessionOver" D-Bus signal before ending the session.
+
+ * gnome-session/dbus.[ch]
+ (gsm_dbus_server_class_init): add "session-over" signal to
+ GsmDBusServer class.
+ (gsm_dbus_session_over): new method for emitting the new signal.
+ * gnome-session/org.gnome.SessionManagement.xml: added "SessionOver"
+ signal.
+ * gnome-session/session.c (session_shutdown): added
+ gsm_dbus_session_over() call.
+
+2008-05-17 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/logout-dialog.c: fixes small build warning.
+
+2008-05-17 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/main.c
+ (main): call gsm_dbus_shutdown, gsm_xsmp_shutdown, and
+ gsm_gconf_shutdown after main quit.
+ (gsm_initialization_error): call gtk_main_quit after showing error
+ dialog.
+
+2008-05-17 Lucas Rocha <lucasr@gnome.org>
+
+ Port gnome-session-save tool to new code base.
+
+ * tools/gnome-session-save.c: tool source code.
+ * configure.in, Makefile.am, tools/Makefile.am: add tools to build.
+ * gnome-session/org.gnome.SessionManagement.xml,
+ gnome-session/dbus.c (gsm_dbus_server_set_name): new SetName D-Bus
+ method which should be used to set the name of current session.
+ * gnome-session/session.[ch] (gsm_session_set_name): new GsmSession
+ method for setting session name.
+
+2008-05-14 Lucas Rocha <lucasr@gnome.org>
+
+ * configure.in: post-release bump to 2.23.3
+
+2008-05-14 Lucas Rocha <lucasr@gnome.org>
+
+ * NEWS:
+ * README: Version 2.23.2.2.
+
+2008-05-14 Lucas Rocha <lucasr@gnome.org>
+
+ * capplet/ui.c (add_app_cb): remove iter from store if app is not
+ actually added. #532973, David Ronis.
+
+2008-05-14 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/main.c (main): fixed a build warning on the
+ gtk_init_with_args() call.
+
+2008-05-14 Lucas Rocha <lucasr@gnome.org>
+
+ * capplet/ui.c: fixed command entry widget name to match the one
+ in the glade.
+
+2008-05-14 Kjartan Maraas <kmaraas@gnome.org>
+
+ * data/session-properties.glade: Don't translate
+ widget labels.
+
+2008-05-13 Lucas Rocha <lucasr@gnome.org>
+
+ * configure.in: post-release bump to 2.23.3
+
+2008-05-13 Lucas Rocha <lucasr@gnome.org>
+
+ * NEWS:
+ * README: Version 2.23.2.1.
+
+2008-05-13 Lucas Rocha <lucasr@gnome.org>
+
+ * configure.in: fixed libglade dependency to 2.3.6.
+ #532835, Karsten Bräckelmann.
+
+2008-05-12 Lucas Rocha <lucasr@gnome.org>
+
+ * configure.in: post-release bump to 2.23.3
+
+2008-05-12 Lucas Rocha <lucasr@gnome.org>
+
+ * NEWS:
+ * README: Version 2.23.2.
+
+2008-05-12 Lucas Rocha <lucasr@gnome.org>
+
+ * capplet/main.c, capplet/ui.[ch], capplet/commands.[ch]: added
+ copyright headers.
+
+2008-05-10 Lucas Rocha <lucasr@gnome.org>
+
+ Session properties capplet re-implemented for new code base.
+ #529601, Karsten Bräckelmann.
+
+ * capplet/main.c, capplet/ui.[ch], capplet/commands.[ch]: session
+ properties capplet code.
+ * gnome-session/util.[ch]: utility functions shared among session
+ manager and capplet.
+ * gnome-session/session.c (gsm_session_new): use gsm_util_* functions
+ instead of local ones.
+ * data/session-properties.glade: capplet Glade file.
+
+2008-04-22 Lucas Rocha <lucasr@gnome.org>
+
+ * configure.in: post-release bump to 2.23.2
+
+2008-04-22 Lucas Rocha <lucasr@gnome.org>
+
+ * NEWS:
+ * README: Version 2.23.1.1.
+
+2008-04-22 Lucas Rocha <lucasr@gnome.org>
+
+ * splash/Makefile.am: install splash .desktop files in an autostart
+ directory instead of old default-session one.
+ * compat/Makefile.am: install compat .desktop files in an autostart
+ directory instead of old default-session one.
+
+2008-04-21 Lucas Rocha <lucasr@gnome.org>
+
+ * configure.in: post-release bump to 2.23.2
+
+==================== 2.23.1 ====================
+
+2008-04-21 Lucas Rocha <lucasr@gnome.org>
+
+ * NEWS:
+ * README: Version 2.23.1.
+
+2008-04-21 Lucas Rocha <lucasr@gnome.org>
+
+ * data/Makefile.am, data/nautilus.desktop,
+ data/gnome-settings-daemon.desktop: don't install .desktop files for
+ nautilus and gnome-settings-daemon because gnome-session looks for
+ those in their origin paths now.
+
+2008-04-21 Lucas Rocha <lucasr@gnome.org>
+
+ * data/gnome-wm: restore the gnome-wm script to keep backwards
+ compatibitility.
+
+2008-04-19 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/app-autostart (file_condition_cb, is_disabled):
+ Separate callbacks for if-exists and unless-exists condition
+ to not need a condition_type private attribute.
+
+2008-04-13 Lucas Rocha <lucasr@gnome.org>
+
+ Fully implement if-exists and unless-exists condition types.
+
+ * configure.in: bump glib dependency to 2.16.0 and add gio bits.
+ * gnome-session/app-autostart.c: added condition and condition_type
+ private attribute to keep track of codition changes in the app.
+ (gsm_app_autostart_class_init, gsm_app_autostart_dispose): added
+ dispose to free internal resources.
+ (file_condition_cb): callback for file monitor used to keep track
+ of if-exists and unless-exists condition changes.
+ (gconf_condition_cb): only emit "condition-changed" if the condition
+ actually changed.
+ (is_disabled): added file monitors for if-exists and unless-exists
+ condition types.
+
+2008-04-10 Lucas Rocha <lucasr@gnome.org>
+
+ * data/gnome-panel.desktop, data/Makefile.am: don't install
+ gnome-panel.desktop anymore as gnome-panel has all needed keys
+ in its .desktop file now.
+
+2008-04-10 Lucas Rocha <lucasr@gnome.org>
+
+ Re-implemented the way we define the default session. Instead of a
+ directory full of .desktop files, we now get the list of default apps
+ from a gconf key. Then session manager then looks for those apps in
+ the standard applications and autostart directories. This way we don't
+ require default apps to export their .desktop files in a special
+ directory. #525157, Rob Bradford.
+
+ * data/gnome-session.schemas.in: added a new gconf key
+ /desktop/gnome/session/default-session which stores the list of
+ default session apps.
+ * gnome-session/Makefile.am: no need to define default-session
+ directory anymore.
+ * gnome-session/gsm.h: added new constant called
+ GSM_GCONF_DEFAULT_SESSION_KEY refering to new gconf key.
+ * gnome-session/session.c
+ (gsm_session_new, append_default_apps): new function to load default
+ apps from gconf key. The gconf key only stores the application names
+ and GsmSession looks for a respective .desktop file in some standard
+ application and autostart directories.
+ (get_autostart_dirs, get_app_dirs): new utility functions which return
+ all autostart and applications directories respectively.
+
+2008-04-10 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/README: fix small typo.
+
+2008-04-10 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/Makefile.am: use GNOME_SESSION_FLAGS and
+ GNOME_SESSION_LIBS in INCLUDES and LDADD respectively.
+
+2008-04-10 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/main.c (main): correctly set translation domain on
+ gtk_init_with_args() call.
+
+2008-04-10 Lucas Rocha <lucasr@gnome.org>
+
+ * configure.in: several cosmetic changes.
+
+2008-04-10 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/main.c (main), gnome-session/Makefile.am: uncommented
+ gettext-related code. Defined locale directory.
+
+2008-04-09 Lucas Rocha <lucasr@gnome.org>
+
+ * HACKING: removed obsolete information and updated the content.
+
+2008-03-31 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/app-autostart.c (is_disabled): Call
+ egg_desktop_file_can_launch() to check OnlyShowIn/NotShowIn and
+ TryExec. #525184, Owen Taylor. Patch by Dan Winship.
+
+2008-03-31 Lucas Rocha <lucasr@gnome.org>
+
+ * data/default-session.in: removed default-session.in as this is
+ not necessary or used by gnome-session anymore.
+
+2008-03-30 Lucas Rocha <lucasr@gnome.org>
+
+ * data/metacity.desktop, data/Makefile.am: don't install
+ metacity.desktop anymore as metacity is doing it now.
+
+2008-03-23 Lucas Rocha <lucasr@gnome.org>
+
+ * AUTHORS, MAINTAINERS: updated with real content.
+
+2008-03-23 Lucas Rocha <lucasr@gnome.org>
+
+ Fix relation between apps set with X-GNOME-Autorestart and
+ AutostartCondition.
+
+ * gnome-session/session.c
+ (app_condition_changed, client_disconnected): don't restart apps if
+ their condition are set to false.
+ * gnome-session/app-autostart.c (is_disabled): don't keep track of
+ condition in case the app is not set with X-GNOME-Autorestart.
+
+2008-03-22 Lucas Rocha <lucasr@gnome.org>
+
+ * configure.in: removed libnotify dependency and made some cleanups.
+
+2008-03-22 Lucas Rocha <lucasr@gnome.org>
+
+ * configure.in: update version to 2.23.1 for future release.
+ * po/POTFILES.in, data/Makefile.am: Several fixes in the build files
+ in order to make it pass distcheck.
+
+2008-03-06 Lucas Rocha <lucasr@gnome.org>
+
+ * egg/eggdesktopfile.c (egg_desktop_file_new_from_key_file),
+ gnome-session/xsmp.c (gsm_xsmp_init): fixed two memory leaks.
+
+2008-03-05 Lucas Rocha <lucasr@gnome.org>
+
+ * egg/eggdesktopfile.c (egg_desktop_file_launchv): use g_ptr_array_add
+ instead of g_ptr_array_set_size to add NULL item to env array.
+
+2008-03-05 Lucas Rocha <lucasr@gnome.org>
+
+ * egg/eggdesktopfile.c (egg_desktop_file_launchv): add a NULL item to
+ the environment vars array in order to avoid invalid memory access.
+
+2008-03-05 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/client-xsmp.c (debug_print_property): removed useless
+ debug message.
+
+2008-03-04 Lucas Rocha <lucasr@gnome.org>
+
+ Added support for stopping/starting autostart apps based on their
+ AutostartCondition key definition (GConf-only for now).
+
+ * gnome-session/app-autostart.[ch]: added condition-changed signal and
+ keep track of gconf key changes from the .desktop AutostartCondition
+ key.
+ * gnome-session/session.c (start_phase): connect to condition-changed
+ signal and launch or kill autostart app depending on the new condition
+ state.
+
+2008-02-19 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/Makefile.am: added app-resumed.[ch] to the build.
+ * gnome-session/app-resumed.[ch]: fix attribute name.
+ * gnome-session/session.c (gsm_session_new,
+ append_saved_session_apps): uncomment legacy saved session loading
+ code.
+
+2008-02-19 Lucas Rocha <lucasr@gnome.org>
+
+ * data/Makefile.am: added autotools bits for session .desktop file.
+ * data/gnome.desktop.in: added xsession .desktop file.
+
+2008-02-19 Lucas Rocha <lucasr@gnome.org>
+
+ * data/Makefile.am: added autotools bits for GConf schemas.
+ * gnome-session/gsm.schemas: moved schemas file to "data" directory as
+ gnome-session.schemas.in.
+
+2007-11-27 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/dbus.c (gsm_dbus_init): use G_SPAWN_SEARCH_PATH flag
+ and do not use '--sh-syntax' option on dbus-launch in order to have it
+ correctly running and setting the respective environment vars.
+
+2007-11-26 Lucas Rocha <lucasr@gnome.org>
+
+ New D-Bus APIs for logging out (org.gnome.SessionManager.Logout)
+ and shutting down the computer (org.gnome.SessionManager.Shutdown).
+
+ * gnome-session/Makefile.am: added gdm.[ch], power-manager.[ch]
+ and logout-dialog.[ch] to the build.
+ * gnome-session/logout-dialog.[ch]: new logout dialog implementation
+ for logout and shutdown operations.
+ * gnome-session/power-manager.[ch]: new functions for powering down,
+ restarting, and suspending the computer through GNOME Power Manager.
+ * gnome-session/gdm.[ch]: new functions for communication with GDM.
+ * gnome-session/client-xsmp.c: (save_yourself_request_callback): update
+ with new gnome_session_initiate_shutdown() API.
+ * gnome-session/dbus.c (gsm_dbus_server_logout,
+ gsm_dbus_server_shutdown), gnome-session/org.gnome.SessionManagement.xml:
+ new D-Bus APIs for Logout and Shutdown.
+ * gnome-session/session.[ch]:
+ (logout_dialog_response, gsm_session_initiate_shutdown): new parameter
+ for determining which logout mode to use (normal logout or shutdown). Use
+ new logout dialog when a confirmation is requested.
+ (session_cancel_shutdown): reset the logout dialog response in case the
+ shutdown process is cancelled.
+ (initiate_shutdown): moved the code for initiating the session shutdown
+ to a separate function.
+ (session_shutdown): activate shutdown functions in case this is
+ requested in the logout dialog.
+
+2007-11-20 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/session.c (app_registered): remove timeout function
+ when all applications from a certain phase are registered on time.
+
+2007-11-18 Lucas Rocha <lucasr@gnome.org>
+
+ * compat/gnome-settings-daemon-helper.c: remove screen resolution
+ settings code as this is now handled by gnome-settings-daemon
+ accordingly. See bug #434982.
+ * configure.in: don't check XRandr bits anymore.
+
+2007-11-17 Dan Winship <danw@gnome.org>
+
+ * gnome-session/xsmp.c:
+ * gnome-session/client-xsmp.c:
+ * gnome-session/app-resumed.c: add some comments explaining
+ various things
+
+2007-11-12 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/session.c (start_phase): only add autostarted apps
+ to pending apps on phases before GSM_SESSION_PHASE_APPLICATION.
+
+2007-11-10 Lucas Rocha <lucasr@gnome.org>
+
+ Add support for client autorestart which can be activated by the
+ "X-GNOME-AutoRestart" .desktop file key or by setting the restart
+ style accordingly through the session client API (GnomeClient's
+ gnome_client_set_restart_style()).
+
+ * gnome-session/client-xsmp.c
+ (register_client_callback): do not generate new IDs itself, and have it just pass
+ the previous_id directly to gsm_session_register_client(), and if it's NULL, then
+ gsm_session_register_client() can generate the new client ID using
+ gsm_xsmp_generate_client_id().
+ (gsm_client_xsmp_class_init, xsmp_restart): XSMP client implementation
+ of gsm_client_restart() method.
+ * gnome-session/client.[ch] (gsm_client_restart): new abstract method
+ for restarting a session client.
+ * gnome-session/session.c (gsm_session_register_client): change it to
+ generate a new client ID in case the provided ID is NULL and return the
+ generated ID in case the client is accepted. A client ID is accepted
+ by the session manager if it's not duplicated, belongs to one of the
+ autostarted apps or is NULL.
+
+2007-11-07 Lucas Rocha <lucasr@gnome.org>
+
+ * egg/eggdesktopfile.c (egg_desktop_file_launchv): fix build warning.
+
+2007-10-27 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/client-xsmp.c (xsmp_get_client_id, xsmp_get_pid,
+ xsmp_get_restart_command, xsmp_get_autorestart): cast correct variable
+ in order to make invalid memory accesses on wrong variable.
+
+2007-10-27 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/client.c (gsm_client_get_client_id,
+ gsm_client_get_pid, gsm_client_get_desktop_file,
+ gsm_client_get_restart_command, gsm_client_get_discard_command,
+ gsm_client_get_autorestart, gsm_client_save_state): add definition for
+ abstract methods in GsmClient.
+
+2007-10-23 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/gconf.c (unset_display_setup): revert change for
+ unsetting DISPLAY environment variable before running
+ gconf-sanity-check as now it can run without a display.
+
+2007-10-21 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/session.c
+ (start_phase): correctly check if application was successfully
+ launched. Fix crasher when printing out error message in case application
+ failed to launch and returned no error.
+ (gsm_session_register_client): emit "registered" signal on application
+ with the registered session client id.
+
+2007-10-21 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/app.[ch]
+ (gsm_app_class_init): added new GsmApp signals "registered" and "exited".
+ (launch, app_exited): if case the application belongs to
+ Initialization phase, monitor program exit in order to emit "exited"
+ signal accordingly.
+ (gsm_app_registered): new method for emitting "registered" signal on
+ an GsmApp object.
+
+2007-10-21 Lucas Rocha <lucasr@gnome.org>
+
+ * gnome-session/gconf.c (unset_display_setup): do not unset DISPLAY
+ environment variable as gconf-sanity-check doesn't run if there's no
+ defined display.
+
+2007-10-21 Lucas Rocha <lucasr@gnome.org>
+
+ * egg/eggsmclient.c (sm_client_post_parse_func): try to get session
+ client id from the DESKTOP_AUTOSTART_ID environment variable in case
+ no client id is given from command line option --sm-client-id. Unset
+ this environment variable just after using it in order to avoid child
+ processes to use the same client id.
+
+2007-10-21 Lucas Rocha <lucasr@gnome.org>
+
+ * egg/eggdesktopfile.c (egg_desktop_file_launchv): fix leak and
+ invalid memory access on environment variables array.
+
+2007-10-21 Lucas Rocha <lucasr@gnome.org>
+
+ * compat/gnome-keyring-daemon-wrapper.desktop.in,
+ compat/gnome-settings-daemon-helper.desktop.in,
+ data/gnome-panel.desktop, data/gnome-settings-daemon.desktop,
+ data/metacity.desktop, data/nautilus.desktop,
+ splash/gnome-login-sound.desktop.in,
+ splash/gnome-session-splash.desktop.in: use
+ X-GNOME-Autostart-Notify key for passing session client ids
+ through the DESKTOP_AUTOSTART_ID environment variable.
+
+2007-06-29 Dan Winship <danw@gnome.org>
+
+ * Initial commit. Don't expect it to be useful yet. :)
diff --git a/HACKING b/HACKING
new file mode 100644
index 0000000..d13731d
--- /dev/null
+++ b/HACKING
@@ -0,0 +1,31 @@
+Hacking on gnome-session
+========================
+
+ + The development occurs in git:
+
+ http://git.gnome.org/browse/gnome-session
+
+ For information on how to access GNOME git please read:
+
+ https://wiki.gnome.org/Git
+
+ + Please send patches as bug reports in GNOME Bugzilla:
+
+ https://bugzilla.gnome.org/ (product gnome-session)
+
+ Your patch should be in unified diff form (the -u option to GNU
+ diff). See also:
+
+ https://wiki.gnome.org/GnomeLove/SubmittingPatches
+
+ + Please try and send a patch against a recent version of this package.
+ Patches against git master are most preferable.
+
+ + Don't commit any but the most trivial patches without approval.
+
+ + Exceptions to this are:
+
+ - Translators may commit basic i18n related patches to the build
+ setup.
+ - Build sheriff are welcome - in accordance with the relevant build
+ sheriff constraints.
diff --git a/MAINTAINERS b/MAINTAINERS
new file mode 100644
index 0000000..3e1bb16
--- /dev/null
+++ b/MAINTAINERS
@@ -0,0 +1,24 @@
+Currently active maintainers
+----------------------------
+
+Ray Strode
+E-mail: rstrode@redhat.com
+Userid: halfline
+
+William Jon McCann
+E-mail: mccann@jhu.edu
+Userid: mccann
+
+Non-active maintainers, who have a good understanding of the code
+-----------------------------------------------------------------
+
+#Vincent Untz
+#E-mail: vuntz@gnome.org
+#Userid: vuntz
+
+#Lucas Rocha
+#E-mail: lucasr@gnome.org
+#Userid: lucasr
+
+#Mark McLoughlin
+#E-mail: mark@skynet.ie
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..d60256a
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,39 @@
+==============
+Version 3.38.0
+==============
+ Build goo updates
+ Translations Updates
+
+==============
+Version 3.37.0
+==============
+
+ util: Unset GNOME_SETUP_DISPLAY at login time
+ main: clear environment on shutdown
+ gnome-session: avoid setting LC_ unless LANG and region disagree
+ data: Add drop-in to configure launched applications
+ autostart-app: Place launched applications into a systemd scope
+ doc: Add description of important systemd units to man page
+ fail-whale-dialog: Make dialog visible in all monitors
+ gnome-session-inhibit: Add --list command
+ gnome-session-ctl: Add systemd service failure checker
+ data: Major changes in systemd configuration
+ Translation Updates: Brazilian Portuguese, Catalan, Chinese (Taiwan),
+ Czech, Friulian, German, Hebrew, Indonesian, Kazakh, Norwegian Bokmål,
+ Polish, Romanian, Slovak, Spanish, Swedish, Turkish, Ukrainian
+
+==============
+Version 3.36.0
+==============
+
+ data: Require UsbProtection component
+ doap: Call this "GNOME Session Manager"
+ Translation Updates: Indonesian, Punjabi
+
+==============
+Version 3.35.3
+==============
+
+ binary: Allow quitting early on SIGTERM/SIGINT
+ binary: Log a critical when our SIGTERM/SIGINT handler fails to log out
+ Translation updates: Chinese (China), Galician
diff --git a/README b/README
new file mode 100644
index 0000000..c395946
--- /dev/null
+++ b/README
@@ -0,0 +1,45 @@
+gnome-session
+=============
+
+gnome-session contains the GNOME session manager, as well as a
+configuration program to choose applications starting on login.
+
+You may download updates to the package from:
+
+ http://download.gnome.org/sources/gnome-session/
+
+To discuss gnome-session, you may use the desktop-devel-list mailing
+list:
+
+ http://mail.gnome.org/mailman/listinfo/desktop-devel-list
+
+
+Design notes
+============
+
+See https://wiki.gnome.org/Projects/SessionManagement
+
+
+Installation
+============
+
+See the file 'INSTALL'. If you are not using a released version of
+gnome-session (for example, if you checked out the code from git), you
+first need to run './autogen.sh'.
+
+
+How to report bugs
+==================
+
+Bugs should be reported to the GNOME bug tracking system:
+
+ https://bugzilla.gnome.org/ (product gnome-session)
+
+You will need to create an account for yourself.
+
+Please read the following page on how to prepare a useful bug report:
+
+ https://bugzilla.gnome.org/page.cgi?id=bug-writing.html
+
+Please read the HACKING file for information on where to send changes or
+bugfixes for this package.
diff --git a/data/gnome-custom-session.desktop.in.in b/data/gnome-custom-session.desktop.in.in
new file mode 100644
index 0000000..5fadaa0
--- /dev/null
+++ b/data/gnome-custom-session.desktop.in.in
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Name=Custom
+Comment=This entry lets you select a saved session
+Exec=@bindir@/gnome-session-custom-session
+TryExec=@bindir@/gnome-session-custom-session
diff --git a/data/gnome-dummy.session.desktop.in.in b/data/gnome-dummy.session.desktop.in.in
new file mode 100644
index 0000000..1052346
--- /dev/null
+++ b/data/gnome-dummy.session.desktop.in.in
@@ -0,0 +1,2 @@
+[GNOME Session]
+Name=GNOME dummy
diff --git a/data/gnome-launched-override.scope.conf b/data/gnome-launched-override.scope.conf
new file mode 100644
index 0000000..810bf23
--- /dev/null
+++ b/data/gnome-launched-override.scope.conf
@@ -0,0 +1,6 @@
+[Unit]
+CollectMode=inactive-or-failed
+PartOf=graphical-session.target
+
+[Scope]
+TimeoutStopSec=5s
diff --git a/data/gnome-session-failed.service.in b/data/gnome-session-failed.service.in
new file mode 100644
index 0000000..4e22ab7
--- /dev/null
+++ b/data/gnome-session-failed.service.in
@@ -0,0 +1,19 @@
+[Unit]
+Description=GNOME Session Failed lockdown screen (user)
+OnFailure=gnome-session-shutdown.target
+OnFailureJobMode=replace-irreversibly
+CollectMode=inactive-or-failed
+
+PartOf=gnome-session-failed.target
+
+# We could do this, but it requires an intermediate target for OnFailure
+# handling, so gnome-session-failed checks RUNNING_UNDER_GDM itself
+#Conflicts=gnome-session@gnome-login.target
+# or in the case of GDM and then not passing --allow-logout
+#Requisite=gnome-session@gnome-login.target
+
+[Service]
+Type=simple
+ExecStart=@libexecdir@/gnome-session-failed --allow-logout
+# The fail whale doesn't trigger a shutdown itself, so do it here
+ExecStopPost=-@libexecdir@/gnome-session-ctl --shutdown
diff --git a/data/gnome-session-failed.target b/data/gnome-session-failed.target
new file mode 100644
index 0000000..5296762
--- /dev/null
+++ b/data/gnome-session-failed.target
@@ -0,0 +1,10 @@
+[Unit]
+Description=GNOME Session Failed
+
+# We need an initialized session
+Requisite=gnome-session-initialized.target
+BindsTo=gnome-session-initialized.target
+After=gnome-session-initialized.target
+
+BindsTo=gnome-session-failed.service
+After=gnome-session-failed.service
diff --git a/data/gnome-session-initialized.target b/data/gnome-session-initialized.target
new file mode 100644
index 0000000..b771257
--- /dev/null
+++ b/data/gnome-session-initialized.target
@@ -0,0 +1,17 @@
+[Unit]
+Description=GNOME Session is initialized
+DefaultDependencies=no
+RefuseManualStart=yes
+RefuseManualStop=yes
+
+Requires=gnome-session-pre.target
+After=gnome-session-pre.target
+
+Requisite=gnome-session.target
+PartOf=gnome-session.target
+Before=gnome-session.target
+
+# Signal gnome-session that we reached the initialized target and
+# that it may start applications.
+Requires=gnome-session-signal-init.service
+Before=gnome-session-signal-init.service
diff --git a/data/gnome-session-manager.target b/data/gnome-session-manager.target
new file mode 100644
index 0000000..a9d2053
--- /dev/null
+++ b/data/gnome-session-manager.target
@@ -0,0 +1,12 @@
+[Unit]
+Description=GNOME Session Manager is ready
+DefaultDependencies=no
+RefuseManualStart=yes
+RefuseManualStop=yes
+
+Requisite=gnome-session-pre.target
+After=gnome-session-pre.target
+
+Requisite=gnome-session-initialized.target
+PartOf=gnome-session-initialized.target
+Before=gnome-session-initialized.target
diff --git a/data/gnome-session-manager@.service.in b/data/gnome-session-manager@.service.in
new file mode 100644
index 0000000..b06dbeb
--- /dev/null
+++ b/data/gnome-session-manager@.service.in
@@ -0,0 +1,19 @@
+[Unit]
+Description=GNOME Session Manager (session: %i)
+RefuseManualStart=yes
+RefuseManualStop=yes
+OnFailure=gnome-session-shutdown.target
+OnFailureJobMode=replace-irreversibly
+CollectMode=inactive-or-failed
+
+Requisite=gnome-session-pre.target
+After=gnome-session-pre.target
+
+Requires=gnome-session-manager.target
+PartOf=gnome-session-manager.target
+Before=gnome-session-manager.target
+
+[Service]
+Type=notify
+ExecStart=@libexecdir@/gnome-session-binary --systemd-service --session=%i
+ExecStopPost=-@libexecdir@/gnome-session-ctl --shutdown
diff --git a/data/gnome-session-monitor.service.in b/data/gnome-session-monitor.service.in
new file mode 100644
index 0000000..5e5edb7
--- /dev/null
+++ b/data/gnome-session-monitor.service.in
@@ -0,0 +1,15 @@
+[Unit]
+Description=Monitor Session leader for GNOME Session
+CollectMode=inactive-or-failed
+
+# All services started after gnome-session-pre.target need to be torn down
+# before the session finish can be signalled back to the display manager.
+PartOf=gnome-session-pre.target
+Before=gnome-session-pre.target
+
+# No After, as we want this to start up immediately
+
+[Service]
+Type=notify
+ExecStart=@libexecdir@/gnome-session-ctl --monitor
+TimeoutStopSec=5
diff --git a/data/gnome-session-pre.target b/data/gnome-session-pre.target
new file mode 100644
index 0000000..3e6d083
--- /dev/null
+++ b/data/gnome-session-pre.target
@@ -0,0 +1,12 @@
+[Unit]
+Description=Tasks to be run before GNOME Session starts
+DefaultDependencies=no
+RefuseManualStart=yes
+RefuseManualStop=yes
+
+Requires=graphical-session-pre.target
+After=graphical-session-pre.target
+
+Requisite=gnome-session-initialized.target
+PartOf=gnome-session-initialized.target
+Before=gnome-session-initialized.target
diff --git a/data/gnome-session-restart-dbus.service.in b/data/gnome-session-restart-dbus.service.in
new file mode 100644
index 0000000..e90f6bc
--- /dev/null
+++ b/data/gnome-session-restart-dbus.service.in
@@ -0,0 +1,10 @@
+[Unit]
+Description=Restart DBus after GNOME Session shutdown
+
+# Allow exit.target to start even if this unit is started with replace-irreversibly
+# Also put it into a slice that doesn't have such implicit dependencies
+DefaultDependencies=no
+
+[Service]
+Type=notify
+ExecStart=@libexecdir@/gnome-session-ctl --restart-dbus
diff --git a/data/gnome-session-shutdown.target b/data/gnome-session-shutdown.target
new file mode 100644
index 0000000..607dc6e
--- /dev/null
+++ b/data/gnome-session-shutdown.target
@@ -0,0 +1,32 @@
+[Unit]
+Description=Shutdown running GNOME Session
+
+# Allow exit.target to start even if this unit is started with replace-irreversibly
+# The same is needed for all (weak) dependencies
+DefaultDependencies=no
+
+Conflicts=graphical-session.target graphical-session-pre.target
+After=graphical-session.target graphical-session-pre.target
+
+# Add explicit conflicts/after lines for gnome-session targets, technically
+# this should not be needed, but is an extra safety measure.
+Conflicts=gnome-session.target gnome-session-manager.target
+After=gnome-session.target gnome-session-manager.target
+
+Conflicts=gnome-session-pre.target gnome-session-initialized.target gnome-session-failed.target
+After=gnome-session-pre.target gnome-session-initialized.target gnome-session-failed.target
+
+# We need to make sure this unit is stopped; primarily so that the tree of
+# units that we created is completely cleaned.
+# Note that this can also be improved by reversing the conflicts above and
+# not listing them in the shutdown unit.
+StopWhenUnneeded=true
+
+# We trigger a restart of DBus after reaching the shutdown target this
+# is a workaround so that DBus services that do not connect to the
+# display server are shut down after log-out.
+# This should be removed when the relevant services add a
+# PartOf=graphical-session.target
+# Historic bug: https://bugzilla.gnome.org/show_bug.cgi?id=764029
+Wants=gnome-session-restart-dbus.service
+Before=gnome-session-restart-dbus.service
diff --git a/data/gnome-session-signal-init.service.in b/data/gnome-session-signal-init.service.in
new file mode 100644
index 0000000..e3d2c46
--- /dev/null
+++ b/data/gnome-session-signal-init.service.in
@@ -0,0 +1,8 @@
+[Unit]
+Description=Signal initialization done to GNOME Session Manager
+
+PartOf=gnome-session.target
+
+[Service]
+Type=oneshot
+ExecStart=@libexecdir@/gnome-session-ctl --signal-init
diff --git a/data/gnome-session-wayland.target b/data/gnome-session-wayland.target
new file mode 100644
index 0000000..29f95c5
--- /dev/null
+++ b/data/gnome-session-wayland.target
@@ -0,0 +1,10 @@
+[Unit]
+Description=GNOME Wayland Session
+# Avoid default After/Before rules
+DefaultDependencies=no
+
+Before=gnome-session.target
+
+PartOf=graphical-session.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/data/gnome-session-wayland@.target b/data/gnome-session-wayland@.target
new file mode 100644
index 0000000..ba2a918
--- /dev/null
+++ b/data/gnome-session-wayland@.target
@@ -0,0 +1,20 @@
+[Unit]
+Description=GNOME Wayland Session (session: %i)
+DefaultDependencies=no
+# Start happens explicitly
+RefuseManualStart=no
+# Stop happens by starting gnome-session-shutdown.target
+RefuseManualStop=yes
+
+Conflicts=shutdown.target gnome-session-shutdown.target
+PartOf=graphical-session.target
+
+# As this is the main entry point, pull in the other toplevel gnome-session targets
+Requires=gnome-session@.target
+After=gnome-session@.target
+
+Requires=gnome-session-wayland.target
+After=gnome-session-wayland.target
+
+Requires=gnome-session.target
+After=gnome-session.target
diff --git a/data/gnome-session-x11-services-ready.target b/data/gnome-session-x11-services-ready.target
new file mode 100644
index 0000000..371e173
--- /dev/null
+++ b/data/gnome-session-x11-services-ready.target
@@ -0,0 +1,8 @@
+[Unit]
+Description=GNOME session X11 services
+DefaultDependencies=no
+
+BindsTo=gnome-session-x11-services.target
+After=gnome-session-x11-services.target
+
+Before=gnome-session.target
diff --git a/data/gnome-session-x11-services.target b/data/gnome-session-x11-services.target
new file mode 100644
index 0000000..5c63db5
--- /dev/null
+++ b/data/gnome-session-x11-services.target
@@ -0,0 +1,11 @@
+[Unit]
+Description=GNOME session X11 services
+DefaultDependencies=no
+
+Requisite=gnome-session-initialized.target
+After=gnome-session-initialized.target
+PartOf=gnome-session-initialized.target
+
+Requisite=gnome-session-x11-services-ready.target
+Before=gnome-session-x11-services-ready.target
+PartOf=gnome-session-x11-services-ready.target
diff --git a/data/gnome-session-x11.target b/data/gnome-session-x11.target
new file mode 100644
index 0000000..67dec0f
--- /dev/null
+++ b/data/gnome-session-x11.target
@@ -0,0 +1,13 @@
+[Unit]
+Description=GNOME X11 Session
+# Avoid default After/Before rules
+DefaultDependencies=no
+
+Before=gnome-session.target
+
+PartOf=graphical-session.target
+RefuseManualStart=yes
+RefuseManualStop=yes
+
+# Pull in all X11-specific services the session might depend on
+Requires=gnome-session-x11-services.target
diff --git a/data/gnome-session-x11@.target b/data/gnome-session-x11@.target
new file mode 100644
index 0000000..663040e
--- /dev/null
+++ b/data/gnome-session-x11@.target
@@ -0,0 +1,20 @@
+[Unit]
+Description=GNOME X11 Session (session: %i)
+DefaultDependencies=no
+# Start happens explicitly
+RefuseManualStart=no
+# Stop happens by starting gnome-session-shutdown.target
+#RefuseManualStop=yes
+
+Conflicts=shutdown.target gnome-session-shutdown.target
+PartOf=graphical-session.target
+
+# As this is the main entry point, pull in the other toplevel gnome-session targets
+BindsTo=gnome-session@.target
+After=gnome-session@.target
+
+BindsTo=gnome-session-x11.target
+After=gnome-session-x11.target
+
+BindsTo=gnome-session.target
+After=gnome-session.target
diff --git a/data/gnome-session.convert b/data/gnome-session.convert
new file mode 100644
index 0000000..fd4dfab
--- /dev/null
+++ b/data/gnome-session.convert
@@ -0,0 +1,3 @@
+[org.gnome.SessionManager]
+auto-save-session = /apps/gnome-session/options/auto_save_session
+logout-prompt = /apps/gnome-session/options/logout_prompt
diff --git a/data/gnome-session.target b/data/gnome-session.target
new file mode 100644
index 0000000..e8d228e
--- /dev/null
+++ b/data/gnome-session.target
@@ -0,0 +1,13 @@
+[Unit]
+Description=GNOME Session
+DefaultDependencies=no
+RefuseManualStart=yes
+RefuseManualStop=yes
+
+BindsTo=graphical-session.target
+Before=graphical-session.target
+
+# gnome-session-monitor.service will quit with the session leader process
+# gnome-session.target pulls in graphical-session.target
+BindsTo=gnome-session-monitor.service
+After=gnome-session-monitor.service
diff --git a/data/gnome-session@.target b/data/gnome-session@.target
new file mode 100644
index 0000000..f7df863
--- /dev/null
+++ b/data/gnome-session@.target
@@ -0,0 +1,14 @@
+[Unit]
+Description=GNOME Session (session: %i)
+DefaultDependencies=no
+RefuseManualStart=yes
+RefuseManualStop=yes
+
+Requires=gnome-session-initialized.target
+After=gnome-session-initialized.target
+
+Requisite=gnome-session.target
+PartOf=gnome-session.target
+Before=gnome-session.target
+
+Requires=gnome-session-manager@.service
diff --git a/data/gnome-wayland.desktop.in.in b/data/gnome-wayland.desktop.in.in
new file mode 100644
index 0000000..516c211
--- /dev/null
+++ b/data/gnome-wayland.desktop.in.in
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Name=GNOME
+Comment=This session logs you into GNOME
+Exec=@bindir@/gnome-session
+TryExec=@bindir@/gnome-session
+Type=Application
+DesktopNames=GNOME
diff --git a/data/gnome-xorg.desktop.in.in b/data/gnome-xorg.desktop.in.in
new file mode 100644
index 0000000..9a76fac
--- /dev/null
+++ b/data/gnome-xorg.desktop.in.in
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Name=GNOME on Xorg
+Comment=This session logs you into GNOME
+Exec=@bindir@/gnome-session
+TryExec=@bindir@/gnome-session
+Type=Application
+DesktopNames=GNOME
+X-GDM-SessionRegisters=true
diff --git a/data/gnome.desktop.in.in b/data/gnome.desktop.in.in
new file mode 100644
index 0000000..7eec1de
--- /dev/null
+++ b/data/gnome.desktop.in.in
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Name=GNOME
+Comment=This session logs you into GNOME
+Exec=@bindir@/gnome-session
+TryExec=@bindir@/gnome-session
+Type=Application
+DesktopNames=GNOME
+X-GDM-SessionRegisters=true
diff --git a/data/gnome.session.conf.in b/data/gnome.session.conf.in
new file mode 100644
index 0000000..3f79d9e
--- /dev/null
+++ b/data/gnome.session.conf.in
@@ -0,0 +1,5 @@
+[Unit]
+# Must be in sync with gnome.session
+@wants_required_components@
+
+Requires=@requires_component@.target
diff --git a/data/gnome.session.desktop.in.in b/data/gnome.session.desktop.in.in
new file mode 100644
index 0000000..b3ea9fc
--- /dev/null
+++ b/data/gnome.session.desktop.in.in
@@ -0,0 +1,4 @@
+[GNOME Session]
+Name=GNOME
+# Must be in sync with gnome-session@gnome.target.d/gnome.session.conf drop-in
+RequiredComponents=@required_components@;
diff --git a/data/hardware-compatibility b/data/hardware-compatibility
new file mode 100644
index 0000000..48b7946
--- /dev/null
+++ b/data/hardware-compatibility
@@ -0,0 +1,32 @@
+##
+## This file contains a list of blacklist/whitelist regular expressions for
+## renderer strings.
+##
+## The regular expressions are case-insensitive POSIX Extended Regular
+## Expressions. See regex(7) for details.
+##
+## Syntax:
+## - Comment lines start with '#'
+## - Lines starting with '+' are whitelisting.
+## - Lines starting with '-' are blacklisting.
+## - Lines not starting with '#', '+', '-' are ignored.
+##
+
+# Intel 830-865
+-Intel\(R\) 8[[:digit:]]{2,2}[^[:digit:]]
+
+# Intel IGD
+-Intel IGD
+
+# Pre-R300 radeon
+-Mesa DRI R[12]00[^[:digit:]]
+-Mesa DRI R[12]00$
+
+# Old Mesa software GL renderer
+-software rasterizer
+
+# Gallium has softpipe; we explicitly enable llvmpipe
+-softpipe
+
+# nouveau vieux NV25 doesn't work too well
+-Mesa DRI nv25
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 0000000..e02b80d
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,193 @@
+desktop_plain = 'gnome'
+
+desktops = [
+ desktop_plain,
+ 'gnome-xorg'
+]
+
+shell_component = {
+ desktop_plain: 'org.gnome.Shell',
+}
+
+required_components = {
+ desktop_plain: [
+ 'org.gnome.SettingsDaemon.A11ySettings',
+ 'org.gnome.SettingsDaemon.Color',
+ 'org.gnome.SettingsDaemon.Datetime',
+ 'org.gnome.SettingsDaemon.Housekeeping',
+ 'org.gnome.SettingsDaemon.Keyboard',
+ 'org.gnome.SettingsDaemon.MediaKeys',
+ 'org.gnome.SettingsDaemon.Power',
+ 'org.gnome.SettingsDaemon.PrintNotifications',
+ 'org.gnome.SettingsDaemon.Rfkill',
+ 'org.gnome.SettingsDaemon.ScreensaverProxy',
+ 'org.gnome.SettingsDaemon.Sharing',
+ 'org.gnome.SettingsDaemon.Smartcard',
+ 'org.gnome.SettingsDaemon.Sound',
+ 'org.gnome.SettingsDaemon.UsbProtection',
+ 'org.gnome.SettingsDaemon.Wacom',
+ 'org.gnome.SettingsDaemon.XSettings',
+ ],
+}
+
+if enable_session_selector
+ desktops += 'gnome-custom-session'
+endif
+
+foreach name: desktops
+ desktop_conf = configuration_data()
+ desktop_conf.set('bindir', session_bindir)
+
+ desktop = name + '.desktop'
+
+ desktop_in = configure_file(
+ input: desktop + '.in.in',
+ output: desktop + '.in',
+ configuration: desktop_conf
+ )
+
+ install_dir = join_paths(session_datadir, 'xsessions')
+ # FIXME: The same target can not be copied into two directories.
+ # There is a workaround in meson_post_install.py until proper solution arises:
+ # https://groups.google.com/forum/#!topic/mesonbuild/3iIoYPrN4P0
+ if name == desktop_plain
+ #install_dir: [
+ # join_paths(session_datadir, 'xsessions'),
+ # join_paths(session_datadir, 'wayland-sessions')
+ #]
+ endif
+
+ desktop_target = i18n.merge_file(
+ desktop,
+ type: 'desktop',
+ input: desktop_in,
+ output: desktop,
+ po_dir: po_dir,
+ install: true,
+ install_dir: install_dir
+ )
+endforeach
+
+sessions = [
+ 'gnome',
+ 'gnome-dummy'
+]
+
+foreach session: sessions
+ session_file = session + '.session'
+ desktop_conf = configuration_data()
+ desktop_conf.set('libexecdir', session_libexecdir)
+ desktop_conf.set('required_components', ';'.join(
+ [shell_component.get(session, '')] + required_components.get(session, [])))
+
+ desktop = session_file + '.desktop'
+
+ desktop_in = configure_file(
+ input: desktop + '.in.in',
+ output: desktop + '.in',
+ configuration: desktop_conf
+ )
+
+ i18n.merge_file(
+ session_file,
+ type: 'desktop',
+ input: desktop_in,
+ output: session_file,
+ po_dir: po_dir,
+ install: true,
+ install_dir: join_paths(session_pkgdatadir, 'sessions')
+ )
+endforeach
+
+schema_conf = configuration_data()
+
+schema = 'org.gnome.SessionManager.gschema.xml'
+
+configure_file(
+ input: schema + '.in',
+ output: schema,
+ install: true,
+ install_dir: join_paths(session_datadir, 'glib-2.0', 'schemas'),
+ configuration: schema_conf
+)
+
+install_data(
+ 'gnome-session.convert',
+ install_dir: join_paths(session_datadir, 'GConf', 'gsettings')
+)
+
+if enable_systemd_session
+ unit_conf = configuration_data()
+ unit_conf.set('libexecdir', session_libexecdir)
+
+ systemd_service = ['gnome-session-manager@.service',
+ 'gnome-session-signal-init.service',
+ 'gnome-session-restart-dbus.service',
+ 'gnome-session-monitor.service',
+ 'gnome-session-failed.service']
+
+ foreach service: systemd_service
+ configure_file(
+ input: service + '.in',
+ output: service,
+ install: true,
+ install_dir: systemd_userunitdir,
+ configuration: unit_conf
+ )
+ endforeach
+
+ systemd_target = files('gnome-session-wayland@.target',
+ 'gnome-session-wayland.target',
+ 'gnome-session-x11@.target',
+ 'gnome-session-x11.target',
+ 'gnome-session-x11-services.target',
+ 'gnome-session-x11-services-ready.target',
+ 'gnome-session@.target',
+ 'gnome-session.target',
+ 'gnome-session-pre.target',
+ 'gnome-session-manager.target',
+ 'gnome-session-initialized.target',
+ 'gnome-session-shutdown.target',
+ 'gnome-session-failed.target',
+ )
+
+ install_data(
+ systemd_target,
+ install_dir: systemd_userunitdir
+ )
+
+ install_data(
+ 'gnome-launched-override.scope.conf',
+ rename: 'override.conf',
+ install_dir : join_paths(systemd_userunitdir, 'gnome-launched-.scope.d')
+ )
+
+ foreach session, req_components: required_components
+ wanted_targets = []
+ foreach component: req_components
+ wanted_targets += 'Wants=@0@.target'.format(component)
+ endforeach
+
+ configure_file(
+ input: session + '.session.conf.in',
+ output: session + '.session.conf',
+ configuration: {
+ 'requires_component': shell_component[session],
+ 'wants_required_components': '\n'.join(wanted_targets),
+ },
+ install_dir: systemd_userunitdir / 'gnome-session@@0@.target.d'.format(
+ session),
+ )
+ endforeach
+endif
+
+data = files('hardware-compatibility')
+
+if enable_session_selector
+ data += files('session-selector.ui')
+endif
+
+install_data(
+ data,
+ install_dir: session_pkgdatadir
+)
diff --git a/data/org.gnome.SessionManager.gschema.xml.in b/data/org.gnome.SessionManager.gschema.xml.in
new file mode 100644
index 0000000..b2b220d
--- /dev/null
+++ b/data/org.gnome.SessionManager.gschema.xml.in
@@ -0,0 +1,24 @@
+<schemalist gettext-domain="gnome-session-3.0">
+ <schema id="org.gnome.SessionManager" path="/org/gnome/gnome-session/">
+ <key name="auto-save-session" type="b">
+ <default>false</default>
+ <summary>Save sessions</summary>
+ <description>If enabled, gnome-session will save the session automatically.</description>
+ </key>
+ <key name="auto-save-session-one-shot" type="b">
+ <default>false</default>
+ <summary>Save this session</summary>
+ <description>When enabled, gnome-session will automatically save the next session at log out even if auto saving is disabled.</description>
+ </key>
+ <key name="logout-prompt" type="b">
+ <default>true</default>
+ <summary>Logout prompt</summary>
+ <description>If enabled, gnome-session will prompt the user before ending a session.</description>
+ </key>
+ <key name="show-fallback-warning" type="b">
+ <default>true</default>
+ <summary>Show the fallback warning</summary>
+ <description>If enabled, gnome-session will display a warning dialog after login if the session was automatically fallen back.</description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/data/session-selector.ui b/data/session-selector.ui
new file mode 100644
index 0000000..1c55712
--- /dev/null
+++ b/data/session-selector.ui
@@ -0,0 +1,195 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy project-wide -->
+ <object class="GtkListStore" id="session-store">
+ <columns>
+ <!-- column-name name -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
+ <object class="GtkTreeModelSort" id="sort-model">
+ <property name="model">session-store</property>
+ </object>
+ <object class="GtkWindow" id="main-window">
+ <property name="title" translatable="yes">Custom Session</property>
+ <property name="window_position">center</property>
+ <property name="default_width">500</property>
+ <property name="default_height">310</property>
+ <property name="decorated">False</property>
+ <child>
+ <object class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="label_xalign">0.5</property>
+ <property name="shadow_type">out</property>
+ <child>
+ <object class="GtkAlignment" id="alignment3">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox3">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <object class="GtkInfoBar" id="info-bar">
+ <property name="visible">True</property>
+ <property name="message-type">other</property>
+
+ <child internal-child="content_area">
+ <object class="GtkHBox" id="info-bar-content_area">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkLabel" id="info-label">
+ <property name="visible">True</property>
+ <property name="xalign">0.0</property>
+ <property name="yalign">0.5</property>
+ <property name="label" translatable="yes">Please select a custom session to run</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox4">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkHBox" id="hbox3">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="session-list">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <property name="search_column">0</property>
+ <property name="model">sort-model</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVButtonBox" id="vbuttonbox2">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="layout_style">start</property>
+ <child>
+ <object class="GtkButton" id="new-session">
+ <property name="label" translatable="yes">_New Session</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="remove-session">
+ <property name="label" translatable="yes">_Remove Session</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="rename-session">
+ <property name="label" translatable="yes">Rena_me Session</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHButtonBox" id="hbuttonbox2">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="continue-button">
+ <property name="label" translatable="yes">_Continue</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/doc/dbus/config.xsl b/doc/dbus/config.xsl
new file mode 100644
index 0000000..7aa9def
--- /dev/null
+++ b/doc/dbus/config.xsl
@@ -0,0 +1,6 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ version="1.0">
+ <xsl:param name="html.stylesheet" select="'docbook.css'"/>
+</xsl:stylesheet>
diff --git a/doc/dbus/dbus-introspect-docs.dtd b/doc/dbus/dbus-introspect-docs.dtd
new file mode 100644
index 0000000..ca918fb
--- /dev/null
+++ b/doc/dbus/dbus-introspect-docs.dtd
@@ -0,0 +1,32 @@
+<!-- DTD for D-Bus Introspection Documentation -->
+
+<!ELEMENT doc (summary?,description?,errors?,permission?,since?,deprecated,seealso?)>
+
+<!ELEMENT summary (#PCDATA|ref)*>
+<!ELEMENT description (#PCDATA|para|example)*>
+<!ELEMENT errors (error)*>
+<!ELEMENT permission (#PCDATA|ref|para)*>
+<!ELEMENT since EMPTY>
+<!ATTLIST since version CDATA #REQUIRED>
+<!ELEMENT deprecated (#PCDATA|ref)>
+<!ATTLIST deprecated version CDATA #REQUIRED>
+<!ATTLIST deprecated instead CDATA #REQUIRED>
+<!ELEMENT seealso (ref+)>
+
+<!ELEMENT error (#PCDATA|para)*>
+<!ATTLIST error name CDATA #REQUIRED>
+<!ELEMENT para (#PCDATA|example|code|list|ref)*>
+<!ELEMENT example (#PCDATA|para|code|ref)*>
+<!ATTLIST language (c|glib|python|shell) #REQUIRED>
+<!ATTLIST title CDATA #IMPLIED>
+<!ELEMENT list (item*)>
+<!ATTLIST list type (bullet|number) #REQUIRED>
+<!ELEMENT item (term|definition)*>
+<!ELEMENT term (#PCDATA|ref)*>
+<!ELEMENT definition (#PCDATA|para)*>
+
+<!ELEMENT code (#PCDATA)>
+<!ATTLIST code lang CDATA #IMPLIED>
+<!ELEMENT ref CDATA>
+<!ATTLIST ref type (parameter|arg|signal|method|interface) #REQUIRED>
+<!ATTLIST ref to CDATA #REQUIRED>
diff --git a/doc/dbus/docbook.css b/doc/dbus/docbook.css
new file mode 100644
index 0000000..6a7373e
--- /dev/null
+++ b/doc/dbus/docbook.css
@@ -0,0 +1,78 @@
+body
+{
+ font-family: sans-serif;
+}
+h1.title
+{
+}
+.permission
+{
+ color: #ee0000;
+ text-decoration: underline;
+}
+.synopsis, .classsynopsis
+{
+ background: #eeeeee;
+ border: solid 1px #aaaaaa;
+ padding: 0.5em;
+}
+.programlisting
+{
+ background: #eeeeff;
+ border: solid 1px #aaaaff;
+ padding: 0.5em;
+}
+.variablelist
+{
+ padding: 4px;
+ margin-left: 3em;
+}
+.variablelist td:first-child
+{
+ vertical-align: top;
+}
+td.shortcuts
+{
+ color: #770000;
+ font-size: 80%;
+}
+div.refnamediv
+{
+ margin-top: 2em;
+}
+div.toc
+{
+ border: 2em;
+}
+a
+{
+ text-decoration: none;
+}
+a:hover
+{
+ text-decoration: underline;
+ color: #FF0000;
+}
+
+div.table table
+{
+ border-collapse: collapse;
+ border-spacing: 0px;
+ border-style: solid;
+ border-color: #777777;
+ border-width: 1px;
+}
+
+div.table table td, div.table table th
+{
+ border-style: solid;
+ border-color: #777777;
+ border-width: 1px;
+ padding: 3px;
+ vertical-align: top;
+}
+
+div.table table th
+{
+ background-color: #eeeeee;
+}
diff --git a/doc/dbus/gnome-session.xml.in b/doc/dbus/gnome-session.xml.in
new file mode 100644
index 0000000..5ffdaaf
--- /dev/null
+++ b/doc/dbus/gnome-session.xml.in
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY dbus-Manager SYSTEM "org.gnome.SessionManager.ref.xml">
+<!ENTITY dbus-Client SYSTEM "org.gnome.SessionManager.Client.ref.xml">
+<!ENTITY dbus-ClientPrivate SYSTEM "org.gnome.SessionManager.ClientPrivate.ref.xml">
+<!ENTITY dbus-Inhibitor SYSTEM "org.gnome.SessionManager.Inhibitor.ref.xml">
+<!ENTITY dbus-Presence SYSTEM "org.gnome.SessionManager.Presence.ref.xml">
+]>
+
+<book id="index">
+ <bookinfo>
+ <title>GNOME Session @VERSION@ Documentation</title>
+ <releaseinfo>Version @VERSION@</releaseinfo>
+ <authorgroup>
+ <author>
+ <firstname>William Jon</firstname>
+ <surname>McCann</surname>
+ <affiliation>
+ <address>
+ <email>jmccann@redhat.com</email>
+ </address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ </bookinfo>
+
+ <part>
+ <title>Reference</title>
+
+ <reference id="dbus-reference">
+ <title>D-Bus API Reference</title>
+
+ <partintro>
+ <para>
+ This API is not yet stable and is likely to change in the future.
+ </para>
+ </partintro>
+
+ &dbus-Manager;
+ &dbus-Client;
+ &dbus-ClientPrivate;
+ &dbus-Inhibitor;
+ &dbus-Presence;
+
+ </reference>
+ </part>
+
+ <index>
+ <title>Index</title>
+ </index>
+
+</book>
diff --git a/doc/dbus/meson.build b/doc/dbus/meson.build
new file mode 100644
index 0000000..12ebce6
--- /dev/null
+++ b/doc/dbus/meson.build
@@ -0,0 +1,46 @@
+ifaces_refs = []
+
+ifaces = [
+ 'org.gnome.SessionManager',
+ 'org.gnome.SessionManager.Client',
+ 'org.gnome.SessionManager.ClientPrivate',
+ 'org.gnome.SessionManager.Inhibitor',
+ 'org.gnome.SessionManager.Presence'
+]
+
+gnome_session_dir = join_paths(meson.source_root(), 'gnome-session')
+spec_to_docbook = files('spec-to-docbook.xsl')
+
+foreach iface: ifaces
+ iface_ref = iface + '.ref.xml'
+
+ ifaces_refs += custom_target(
+ iface_ref,
+ input: files(join_paths(gnome_session_dir, iface + '.xml')),
+ output: iface_ref,
+ command: [xsltproc, '--output', '@OUTPUT@', spec_to_docbook, '@INPUT@']
+ )
+endforeach
+
+session_conf = configuration_data()
+session_conf.set('VERSION', session_version)
+
+session = meson.project_name()
+
+xml_in = configure_file(
+ input: session + '.xml.in',
+ output: session + '.xml',
+ configuration: session_conf
+)
+
+config_xsl = files('config.xsl')
+
+custom_target(
+ session,
+ input: xml_in,
+ output: session + '.html',
+ command: [find_program('xmlto'), 'xhtml-nochunks', '-o', meson.current_build_dir(), '-m', config_xsl, '@INPUT@'],
+ depends: ifaces_refs,
+ install: true,
+ install_dir: join_paths(session_datadir, 'doc', meson.project_name(), 'dbus')
+)
diff --git a/doc/dbus/spec-to-docbook.xsl b/doc/dbus/spec-to-docbook.xsl
new file mode 100644
index 0000000..9a6a8da
--- /dev/null
+++ b/doc/dbus/spec-to-docbook.xsl
@@ -0,0 +1,555 @@
+<?xml version='1.0'?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd"
+ exclude-result-prefixes="doc">
+<!--
+ Convert D-Bus Glib xml into DocBook refentries
+ Copyright (C) 2007-2008 William Jon McCann
+ License: GPL
+-->
+<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
+
+<xsl:template match="/">
+
+<xsl:variable name="interface" select="//interface/@name"/>
+<xsl:variable name="basename">
+ <xsl:call-template name="interface-basename">
+ <xsl:with-param name="str" select="$interface"/>
+ </xsl:call-template>
+</xsl:variable>
+
+<refentry><xsl:attribute name="id"><xsl:value-of select="$interface"/></xsl:attribute>
+ <refmeta>
+ <refentrytitle role="top_of_page"><xsl:value-of select="//interface/@name"/></refentrytitle>
+ </refmeta>
+
+ <refnamediv>
+ <refname><xsl:value-of select="$interface"/></refname>
+ <refpurpose><xsl:value-of select="$basename"/> interface</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv role="synopsis">
+ <title role="synopsis.title">Methods</title>
+ <synopsis>
+ <xsl:call-template name="methods-synopsis">
+ <xsl:with-param name="interface" select="$interface"/>
+ </xsl:call-template>
+ </synopsis>
+ </refsynopsisdiv>
+
+ <xsl:choose>
+ <xsl:when test="count(///signal) > 0">
+ <refsect1 role="signal_proto">
+ <title role="signal_proto.title">Signals</title>
+ <synopsis>
+ <xsl:call-template name="signals-synopsis">
+ <xsl:with-param name="interface" select="$interface"/>
+ </xsl:call-template>
+ </synopsis>
+ </refsect1>
+ </xsl:when>
+ </xsl:choose>
+
+ <refsect1 role="impl_interfaces">
+ <title role="impl_interfaces.title">Implemented Interfaces</title>
+ <para>
+ Objects implementing <xsl:value-of select="$interface"/> also implements
+ org.freedesktop.DBus.Introspectable,
+ org.freedesktop.DBus.Properties
+ </para>
+ </refsect1>
+
+ <xsl:choose>
+ <xsl:when test="count(///property) > 0">
+ <refsect1 role="properties">
+ <title role="properties.title">Properties</title>
+ <synopsis>
+ <xsl:call-template name="properties-synopsis">
+ <xsl:with-param name="interface" select="$interface"/>
+ </xsl:call-template>
+ </synopsis>
+ </refsect1>
+ </xsl:when>
+ </xsl:choose>
+
+ <refsect1 role="desc">
+ <title role="desc.title">Description</title>
+ <para>
+ <xsl:apply-templates select="//interface/doc:doc"/>
+ </para>
+ </refsect1>
+
+ <refsect1 role="details">
+ <title role="details.title">Details</title>
+ <xsl:call-template name="method-details">
+ <xsl:with-param name="interface" select="$interface"/>
+ </xsl:call-template>
+ </refsect1>
+
+ <xsl:choose>
+ <xsl:when test="count(///signal) > 0">
+ <refsect1 role="signals">
+ <title role="signals.title">Signal Details</title>
+ <xsl:call-template name="signal-details">
+ <xsl:with-param name="interface" select="$interface"/>
+ </xsl:call-template>
+ </refsect1>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:choose>
+ <xsl:when test="count(///property) > 0">
+ <refsect1 role="property_details">
+ <title role="property_details.title">Property Details</title>
+ <xsl:call-template name="property-details">
+ <xsl:with-param name="interface" select="$interface"/>
+ </xsl:call-template>
+ </refsect1>
+ </xsl:when>
+ </xsl:choose>
+
+</refentry>
+</xsl:template>
+
+
+<xsl:template name="property-doc">
+ <xsl:apply-templates select="doc:doc/doc:description"/>
+
+ <xsl:choose>
+ <xsl:when test="count(arg) > 0">
+ <variablelist role="params">
+ <xsl:for-each select="arg">
+ <varlistentry><term><parameter><xsl:value-of select="@name"/></parameter>:</term>
+ <listitem><simpara><xsl:apply-templates select="doc:doc/doc:summary"/></simpara></listitem>
+ </varlistentry>
+ </xsl:for-each>
+ </variablelist>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:apply-templates select="doc:doc/doc:since"/>
+ <xsl:apply-templates select="doc:doc/doc:deprecated"/>
+ <xsl:apply-templates select="doc:doc/doc:permission"/>
+ <xsl:apply-templates select="doc:doc/doc:seealso"/>
+</xsl:template>
+
+
+<xsl:template name="property-details">
+ <xsl:param name="interface"/>
+ <xsl:variable name="longest">
+ <xsl:call-template name="find-longest">
+ <xsl:with-param name="set" select="@name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:for-each select="///property">
+ <refsect2>
+ <title><anchor role="function"><xsl:attribute name="id"><xsl:value-of select="$interface"/>:<xsl:value-of select="@name"/></xsl:attribute></anchor>The "<xsl:value-of select="@name"/>" property</title>
+<indexterm><primary><xsl:value-of select="@name"/></primary><secondary><xsl:value-of select="$interface"/></secondary></indexterm>
+<programlisting>'<xsl:value-of select="@name"/>'<xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="2"/></xsl:call-template>
+<xsl:call-template name="property-args"><xsl:with-param name="indent" select="string-length(@name) + 2"/></xsl:call-template></programlisting>
+
+ <xsl:call-template name="property-doc"/>
+ </refsect2>
+
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="signal-doc">
+ <xsl:apply-templates select="doc:doc/doc:description"/>
+
+ <xsl:choose>
+ <xsl:when test="count(arg) > 0">
+ <variablelist role="params">
+ <xsl:for-each select="arg">
+ <varlistentry><term><parameter><xsl:value-of select="@name"/></parameter>:</term>
+ <listitem><simpara><xsl:apply-templates select="doc:doc/doc:summary"/></simpara></listitem>
+ </varlistentry>
+ </xsl:for-each>
+ </variablelist>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:apply-templates select="doc:doc/doc:since"/>
+ <xsl:apply-templates select="doc:doc/doc:deprecated"/>
+ <xsl:apply-templates select="doc:doc/doc:permission"/>
+ <xsl:apply-templates select="doc:doc/doc:seealso"/>
+</xsl:template>
+
+<xsl:template name="signal-details">
+ <xsl:param name="interface"/>
+ <xsl:variable name="longest">
+ <xsl:call-template name="find-longest">
+ <xsl:with-param name="set" select="@name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:for-each select="///signal">
+ <refsect2>
+ <title><anchor role="function"><xsl:attribute name="id"><xsl:value-of select="$interface"/>::<xsl:value-of select="@name"/></xsl:attribute></anchor>The <xsl:value-of select="@name"/> signal</title>
+<indexterm><primary><xsl:value-of select="@name"/></primary><secondary><xsl:value-of select="$interface"/></secondary></indexterm>
+<programlisting><xsl:value-of select="@name"/> (<xsl:call-template name="signal-args"><xsl:with-param name="indent" select="string-length(@name) + 2"/><xsl:with-param name="prefix" select="."/></xsl:call-template>)</programlisting>
+
+ <xsl:call-template name="signal-doc"/>
+ </refsect2>
+
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match="doc:code">
+<programlisting>
+<xsl:apply-templates />
+</programlisting>
+</xsl:template>
+
+<xsl:template match="doc:tt">
+ <literal>
+ <xsl:apply-templates />
+ </literal>
+</xsl:template>
+
+<xsl:template match="doc:i">
+ <emphasis>
+ <xsl:apply-templates />
+ </emphasis>
+</xsl:template>
+
+<xsl:template match="doc:b">
+ <emphasis role="bold">
+ <xsl:apply-templates />
+ </emphasis>
+</xsl:template>
+
+<xsl:template match="doc:ulink">
+ <ulink>
+ <xsl:attribute name="url"><xsl:value-of select="@url"/></xsl:attribute>
+ <xsl:value-of select="."/>
+ </ulink>
+</xsl:template>
+
+<xsl:template match="doc:summary">
+ <xsl:apply-templates />
+</xsl:template>
+
+<xsl:template match="doc:example">
+<informalexample>
+<xsl:apply-templates />
+</informalexample>
+</xsl:template>
+
+<xsl:template name="listitems-do-term">
+ <xsl:param name="str"/>
+ <xsl:choose>
+ <xsl:when test="string-length($str) > 0">
+ <emphasis role="bold"><xsl:value-of select="$str"/>: </emphasis>
+ </xsl:when>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="do-listitems">
+ <xsl:for-each select="doc:item">
+ <listitem>
+ <simpara>
+ <xsl:call-template name="listitems-do-term"><xsl:with-param name="str" select="doc:term"/></xsl:call-template>
+ <xsl:apply-templates select="doc:definition"/>
+ </simpara>
+ </listitem>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match="doc:list">
+ <xsl:choose>
+ <xsl:when test="contains(@type,'number')">
+ <orderedlist>
+ <xsl:call-template name="do-listitems"/>
+ </orderedlist>
+ </xsl:when>
+ <xsl:otherwise>
+ <itemizedlist>
+ <xsl:call-template name="do-listitems"/>
+ </itemizedlist>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="doc:para">
+<para>
+<xsl:apply-templates />
+</para>
+</xsl:template>
+
+<xsl:template match="doc:description">
+<xsl:apply-templates />
+</xsl:template>
+
+<xsl:template match="doc:since">
+<para role="since">Since <xsl:value-of select="@version"/>
+</para>
+</xsl:template>
+
+<xsl:template match="doc:deprecated">
+ <xsl:variable name="name" select="../../@name"/>
+ <xsl:variable name="parent">
+ <xsl:call-template name="interface-basename">
+ <xsl:with-param name="str" select="../../../@name"/>/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="type" select="name(../..)"/>
+
+ <para role="deprecated">
+ <warning><para><literal><xsl:value-of select="$name"/></literal> is deprecated since version <xsl:value-of select="@version"/> and should not be used in newly-written code. Use
+
+ <xsl:variable name="to">
+ <xsl:choose>
+ <xsl:when test="contains($type,'property')">
+ <xsl:value-of select="$parent"/>:<xsl:value-of select="@instead"/>
+ </xsl:when>
+ <xsl:when test="contains($type,'signal')">
+ <xsl:value-of select="$parent"/>::<xsl:value-of select="@instead"/>
+ </xsl:when>
+ <xsl:when test="contains($type,'method')">
+ <xsl:value-of select="$parent"/>.<xsl:value-of select="@instead"/>
+ </xsl:when>
+ <xsl:when test="contains($type,'interface')">
+ <xsl:value-of select="@instead"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@instead"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:call-template name="create-link">
+ <xsl:with-param name="type" select="$type"/>
+ <xsl:with-param name="to" select="$to"/>
+ <xsl:with-param name="val" select="@instead"/>
+ </xsl:call-template>
+instead.</para></warning>
+</para>
+</xsl:template>
+
+<xsl:template match="doc:permission">
+<para role="permission">
+<xsl:apply-templates />
+</para>
+</xsl:template>
+
+<xsl:template match="doc:errors">
+<para role="errors">
+<xsl:apply-templates />
+</para>
+</xsl:template>
+
+<xsl:template match="doc:seealso">
+<para>
+See also:
+<xsl:apply-templates />
+
+</para>
+</xsl:template>
+
+<xsl:template name="create-link">
+ <xsl:param name="type"/>
+ <xsl:param name="to"/>
+ <xsl:param name="val"/>
+
+ <xsl:choose>
+ <xsl:when test="contains($type,'property')">
+ <link><xsl:attribute name="linkend"><xsl:value-of select="$to"/></xsl:attribute><literal><xsl:value-of select="$val"/></literal></link>
+ </xsl:when>
+ <xsl:when test="contains($type,'signal')">
+ <link><xsl:attribute name="linkend"><xsl:value-of select="$to"/></xsl:attribute><literal><xsl:value-of select="$val"/></literal></link>
+ </xsl:when>
+ <xsl:when test="contains($type,'method')">
+ <link><xsl:attribute name="linkend"><xsl:value-of select="$to"/></xsl:attribute><function><xsl:value-of select="$val"/></function></link>
+ </xsl:when>
+ <xsl:when test="contains($type,'interface')">
+ <link><xsl:attribute name="linkend"><xsl:value-of select="$to"/></xsl:attribute><xsl:value-of select="$val"/></link>
+ </xsl:when>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="doc:ref">
+ <xsl:call-template name="create-link">
+ <xsl:with-param name="type" select="@type"/>
+ <xsl:with-param name="to" select="@to"/>
+ <xsl:with-param name="val" select="."/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="method-doc">
+ <xsl:apply-templates select="doc:doc/doc:description"/>
+
+ <xsl:choose>
+ <xsl:when test="count(arg) > 0">
+ <variablelist role="params">
+ <xsl:for-each select="arg">
+ <varlistentry><term><parameter><xsl:value-of select="@name"/></parameter>:</term>
+ <listitem><simpara><xsl:apply-templates select="doc:doc/doc:summary"/></simpara></listitem>
+ </varlistentry>
+ </xsl:for-each>
+ </variablelist>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:apply-templates select="doc:doc/doc:since"/>
+ <xsl:apply-templates select="doc:doc/doc:deprecated"/>
+
+ <xsl:choose>
+ <xsl:when test="count(doc:doc/doc:errors) > 0">
+ <refsect3>
+ <title>Errors</title>
+ <variablelist role="errors">
+ <xsl:for-each select="doc:doc/doc:errors/doc:error">
+ <varlistentry>
+ <term><parameter><xsl:value-of select="@name"/></parameter>:</term>
+ <listitem><simpara><xsl:apply-templates select="."/></simpara></listitem>
+ </varlistentry>
+ </xsl:for-each>
+ </variablelist>
+ </refsect3>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:choose>
+ <xsl:when test="count(doc:doc/doc:permission) > 0">
+ <refsect3>
+ <title>Permissions</title>
+ <xsl:apply-templates select="doc:doc/doc:permission"/>
+ </refsect3>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:apply-templates select="doc:doc/doc:seealso"/>
+</xsl:template>
+
+<xsl:template name="method-details">
+ <xsl:param name="interface"/>
+ <xsl:variable name="longest">
+ <xsl:call-template name="find-longest">
+ <xsl:with-param name="set" select="@name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:for-each select="///method">
+ <refsect2>
+ <title><anchor role="function"><xsl:attribute name="id"><xsl:value-of select="$interface"/>.<xsl:value-of select="@name"/></xsl:attribute></anchor><xsl:value-of select="@name"/> ()</title>
+<indexterm><primary><xsl:value-of select="@name"/></primary><secondary><xsl:value-of select="$interface"/></secondary></indexterm>
+<programlisting><xsl:value-of select="@name"/> (<xsl:call-template name="method-args"><xsl:with-param name="indent" select="string-length(@name) + 2"/><xsl:with-param name="prefix" select="."/></xsl:call-template>)</programlisting>
+
+ <xsl:call-template name="method-doc"/>
+ </refsect2>
+
+ </xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="properties-synopsis">
+ <xsl:param name="interface"/>
+ <xsl:variable name="longest">
+ <xsl:call-template name="find-longest">
+ <xsl:with-param name="set" select="///property/@name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:for-each select="///property">
+<link><xsl:attribute name="linkend"><xsl:value-of select="$interface"/>:<xsl:value-of select="@name"/></xsl:attribute>'<xsl:value-of select="@name"/>'</link><xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@name) + 1"/></xsl:call-template> <xsl:call-template name="property-args"><xsl:with-param name="indent" select="$longest + 2"/></xsl:call-template>
+</xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="signals-synopsis">
+ <xsl:param name="interface"/>
+ <xsl:variable name="longest">
+ <xsl:call-template name="find-longest">
+ <xsl:with-param name="set" select="///signal/@name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:for-each select="///signal">
+<link><xsl:attribute name="linkend"><xsl:value-of select="$interface"/>::<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></link><xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@name) + 1"/></xsl:call-template>(<xsl:call-template name="signal-args"><xsl:with-param name="indent" select="$longest + 2"/><xsl:with-param name="prefix" select="///signal"/></xsl:call-template>)
+</xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="methods-synopsis">
+ <xsl:param name="interface"/>
+ <xsl:variable name="longest">
+ <xsl:call-template name="find-longest">
+ <xsl:with-param name="set" select="///method/@name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:for-each select="///method">
+<link><xsl:attribute name="linkend"><xsl:value-of select="$interface"/>.<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></link><xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@name) + 1"/></xsl:call-template>(<xsl:call-template name="method-args"><xsl:with-param name="indent" select="$longest + 2"/><xsl:with-param name="prefix" select="///method"/></xsl:call-template>)
+</xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="method-args"><xsl:param name="indent"/><xsl:param name="prefix"/><xsl:variable name="longest"><xsl:call-template name="find-longest"><xsl:with-param name="set" select="$prefix/arg/@type"/></xsl:call-template></xsl:variable><xsl:for-each select="arg"><xsl:value-of select="@direction"/>
+<xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="4 - string-length(@direction)"/></xsl:call-template>'<xsl:value-of select="@type"/>'<xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@type) + 1"/></xsl:call-template>
+<xsl:value-of select="@name"/><xsl:if test="not(position() = last())">,
+<xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$indent"/></xsl:call-template></xsl:if>
+</xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="signal-args"><xsl:param name="indent"/><xsl:param name="prefix"/><xsl:variable name="longest"><xsl:call-template name="find-longest"><xsl:with-param name="set" select="$prefix/arg/@type"/></xsl:call-template></xsl:variable><xsl:for-each select="arg">'<xsl:value-of select="@type"/>'<xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@type) + 1"/></xsl:call-template>
+<xsl:value-of select="@name"/><xsl:if test="not(position() = last())">,
+<xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$indent"/></xsl:call-template></xsl:if>
+</xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="property-args"><xsl:param name="indent"/>
+<xsl:value-of select="@access"/><xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="9 - string-length(@access) + 1"/></xsl:call-template>'<xsl:value-of select="@type"/>'
+</xsl:template>
+
+
+<xsl:template name="pad-spaces">
+ <xsl:param name="width"/>
+ <xsl:variable name="spaces" xml:space="preserve"> </xsl:variable>
+ <xsl:value-of select="substring($spaces,1,$width)"/>
+</xsl:template>
+
+
+<xsl:template name="find-longest">
+ <xsl:param name="set"/>
+ <xsl:param name="index" select="1"/>
+ <xsl:param name="longest" select="0"/>
+
+ <xsl:choose>
+ <xsl:when test="$index > count($set)">
+ <!--finished looking-->
+ <xsl:value-of select="$longest"/>
+ </xsl:when>
+ <xsl:when test="string-length($set[$index])>$longest">
+ <!--found new longest-->
+ <xsl:call-template name="find-longest">
+ <xsl:with-param name="set" select="$set"/>
+ <xsl:with-param name="index" select="$index + 1"/>
+ <xsl:with-param name="longest" select="string-length($set[$index])"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <!--this isn't any longer-->
+ <xsl:call-template name="find-longest">
+ <xsl:with-param name="set" select="$set"/>
+ <xsl:with-param name="index" select="$index + 1"/>
+ <xsl:with-param name="longest" select="$longest"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<xsl:template name="interface-basename">
+ <xsl:param name="str"/>
+ <xsl:choose>
+ <xsl:when test="contains($str,'.')">
+ <xsl:call-template name="interface-basename">
+ <xsl:with-param name="str" select="substring-after($str,'.')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$str"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/doc/man/gnome-session-inhibit.xml b/doc/man/gnome-session-inhibit.xml
new file mode 100644
index 0000000..1cc03b1
--- /dev/null
+++ b/doc/man/gnome-session-inhibit.xml
@@ -0,0 +1,106 @@
+<refentry id="gnome-session-inhibit" lang="en">
+
+<refentryinfo>
+<title>gnome-session-inhibit</title>
+<productname>gnome-session</productname>
+</refentryinfo>
+
+<refmeta>
+<refentrytitle>gnome-session-inhibit</refentrytitle>
+<manvolnum>1</manvolnum>
+<refmiscinfo class="manual">User Commands</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>gnome-session-inhibit</refname>
+<refpurpose>inhibit gnome-session functionality</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<cmdsynopsis>
+<command>gnome-session-inhibit</command>
+<arg choice="opt" rep="repeat">OPTION</arg>
+<arg choice="opt">COMMAND</arg>
+</cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title>Description</title>
+<para><command>gnome-session-inhibit</command> can inhibit certain
+gnome-session functionality while executing the given COMMAND. To
+achieve this, it calls the Inhibit() method of the gnome-session
+D-Bus API and creates an inhibitor. The inhibitor is automatically
+removed when gnome-session-inhibit exits.
+</para>
+<para>
+A typical use case is to prevent the session from going idle (and
+thus locking the screen) while a movie player is running.
+</para>
+
+</refsect1>
+
+<refsect1><title>Options</title>
+<variablelist>
+
+<varlistentry>
+<term><option>-h</option>, <option>--help</option></term>
+<listitem><para>
+print help and exit
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--version</option></term>
+<listitem><para>
+print version information and exit
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--app-id</option> ID</term>
+<listitem><para>
+The application id to use when calling the gnome-session Inhibit() method.
+If this option is not specified, "unknown" is used.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--reason</option> REASON</term>
+<listitem><para>
+A human-readable reason to pass along when calling the gnome-session
+Inhibit() method. If this option is not specified, "not specified" is used.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--inhibit</option> ARG</term>
+<listitem><para>
+ARG specifies the things to inhibit, as a colon-separated list. The
+possible values are logout, switch-user, suspend, idle, automount.
+If this option is used more than once, the values are combined.
+If this option is not specified, "idle" is assumed.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--inhibit-only</option></term>
+<listitem><para>
+Do not launch COMMAND and wait forever instead
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-l</option>, <option>--list</option></term>
+<listitem><para>
+list the existing inhibitions and exit
+</para></listitem>
+</varlistentry>
+
+</variablelist>
+</refsect1>
+
+<refsect1><title>See also</title>
+<para>
+<citerefentry><refentrytitle>systemd-inhibit</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+</para>
+</refsect1>
+</refentry>
diff --git a/doc/man/gnome-session-quit.1 b/doc/man/gnome-session-quit.1
new file mode 100644
index 0000000..f0fdd16
--- /dev/null
+++ b/doc/man/gnome-session-quit.1
@@ -0,0 +1,34 @@
+.\"
+.\" gnome-session-quit manual page.
+.\" (C) 2000 Miguel de Icaza (miguel@helixcode.com)
+.\" (C) 2009-2010 Vincent Untz (vuntz@gnome.org)
+.\"
+.TH GNOME-SESSION-QUIT 1 "GNOME"
+.SH NAME
+gnome-session-quit \- End the current GNOME session
+.SH SYNOPSIS
+.B gnome-session-quit [\-\-logout|\-\-power-off|\-\-reboot] [\-\-force] [\-\-no-prompt]
+.SH DESCRIPTION
+The \fIgnome-session-quit\fP program can be used to end a GNOME session.
+.SH OPTIONS
+The following options are supported:
+.TP
+.I "--logout"
+Prompt the user to confirm logout. This is the default behavior.
+.TP
+.I "--power-off"
+Prompt the user to confirm system power off.
+.TP
+.I "--reboot"
+Prompt the user to confirm system reboot.
+.TP
+.I "--force"
+Ignore any inhibitors.
+.TP
+.I "--no-prompt"
+End the session without user interaction. This only works with \fI--logout\fP.
+.SH BUGS
+If you find bugs in the \fIgnome-session-quit\fP program, please report
+these on https://bugzilla.gnome.org.
+.SH SEE ALSO
+.BR gnome-session(1)
diff --git a/doc/man/gnome-session-selector.xml b/doc/man/gnome-session-selector.xml
new file mode 100644
index 0000000..7beb1e4
--- /dev/null
+++ b/doc/man/gnome-session-selector.xml
@@ -0,0 +1,52 @@
+<refentry id="gnome-session-selector" lang="en">
+
+<refentryinfo>
+<title>gnome-session-selector</title>
+<productname>gnome-session</productname>
+</refentryinfo>
+
+<refmeta>
+<refentrytitle>gnome-session-selector</refentrytitle>
+<manvolnum>1</manvolnum>
+<refmiscinfo class="manual">User Commands</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>gnome-session-selector</refname>
+<refpurpose>Selects a session to use with gnome-session</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<cmdsynopsis>
+<command>gnome-session-selector</command>
+<arg choice="opt">session</arg>
+</cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title>Description</title>
+<para><command>gnome-session-selector</command> can be used from a
+xsession desktop file to select a session before gnome-session is run.
+gnome-session reads and stores its session in the
+<filename><envar>$XDG_DATA_HOME</envar>/gnome-session/saved-session</filename>
+directory. <command>gnome-session-selector</command> works by replacing
+the saved-session directory by a symlink to another directory. Since the
+session name is used as the directory name, it may not contain '/' characters
+or begin with a '.'.
+</para>
+<para>
+When a session name is specified, <command>gnome-session-selector</command>
+will create a symlink to select this session.
+</para>
+<para>
+When started without arguments, <command>gnome-session-selector</command>
+will present a dialog that allows to choose one of the existing sessions
+or create a new one.
+</para>
+</refsect1>
+
+<refsect1><title>See also</title>
+<para>
+<citerefentry><refentrytitle>gnome-session</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+</para>
+</refsect1>
+</refentry>
diff --git a/doc/man/gnome-session.1 b/doc/man/gnome-session.1
new file mode 100644
index 0000000..7f6f360
--- /dev/null
+++ b/doc/man/gnome-session.1
@@ -0,0 +1,184 @@
+.\"
+.\" gnome-session manual page.
+.\" (C) 2000 Miguel de Icaza (miguel@helixcode.com)
+.\" (C) 2009-2010 Vincent Untz (vuntz@gnome.org)
+.\" (C) 2019 Benjamin Berg (bberg@redhat.com)
+.\" (C) 2020 Sebastian Geiger (sbastig@gmx.net)
+.\"
+.TH GNOME-SESSION 1 "May 2020" "GNOME"
+.SH NAME
+gnome-session \- Start the GNOME desktop environment
+.SH SYNOPSIS
+.B gnome-session [\-a|\-\-autostart=DIR] [\-\-session=SESSION] [\-\-failsafe|\-f] [\-\-debug] [\-\-whale]
+.SH DESCRIPTION
+The \fIgnome-session\fP program starts up the GNOME desktop
+environment. This command is typically executed by your login manager
+(either gdm, xdm, or from your X startup scripts). It will load
+either your saved session, or it will provide a default session for the
+user as defined by the system administrator (or the default GNOME
+installation on your system). Note that \fIgnome-session\fP is a wrapper
+script for \fIgnome-session-binary\fP.
+.PP
+The default session is defined in \fBgnome.session\fP, a .desktop-like
+file that is looked for in
+\fB$XDG_CONFIG_HOME/gnome-session/sessions\fP,
+\fB$XDG_CONFIG_DIRS/gnome-session/sessions\fP and
+\fB$XDG_DATA_DIRS/gnome-session/sessions\fP.
+.PP
+When saving a session, \fIgnome-session\fP saves the currently running
+applications in the \fB$XDG_CONFIG_HOME/gnome-session/saved-session\fP
+directory. Saving sessions is only supported with the legacy non-systemd
+startup method.
+.PP
+\fIgnome-session\fP is an X11R6 session manager. It can manage GNOME
+applications as well as any X11R6 SM compliant application.
+.SH OPTIONS
+The following options are supported:
+.TP
+.I "--autostart=DIR"
+The directory \fBDIR\fP to be searched for autostart .desktop files. This option can be used multiple times.
+When this option is present, then default autostart directories will not be searched.
+.TP
+.I "--session=SESSION"
+Use the applications defined in \fBSESSION.session\fP. If not specified,
+\fBgnome.session\fP will be used.
+.TP
+.I "--builtin"
+Use the legacy non-systemd method of managing the user session. This is the
+opposite of the \fI--systemd\fP option.
+.TP
+.I "--systemd"
+Use the systemd method of managing the user session. This is the opposite of
+the \fI--builtin\fP option.
+.TP
+.I "--failsafe"
+Run in fail-safe mode. User-specified applications will not be started.
+.TP
+.I "--debug"
+Enable debugging code.
+.TP
+.I "--whale"
+Show the fail whale in a dialog for debugging it.
+.SH SESSION DEFINITION
+Sessions are defined in \fB.session\fP files, that are using a .desktop-like
+format, with the following keys in the \fBGNOME Session\fP group:
+.TP
+.I Name
+Name of the session. This can be localized.
+.TP
+.I RequiredComponents
+List of component identifiers (desktop files) that are required by the session. The required components will always run in the session.
+.PP
+Here is an example of a session definition:
+.PP
+.in +4n
+.nf
+[GNOME Session]
+Name=GNOME
+RequiredComponents=gnome-shell;gnome-settings-daemon;
+.in
+.fi
+.PP
+In \fBsystemd\fP managed sessions the RequiredComponents may be provided by
+systemd units instead. In this case the corresponding \fB.desktop\fP file needs
+to contain \fBX-GNOME-HiddenUnderSystemd=true\fP. \fIgnome-session\fP will
+ignore these components and rely on \fIsystemd\fP to manage them appropriately,
+see the \fIsystemd\fP for more information on how this works.
+.PP
+The \fB.session\fP files are looked for in
+\fB$XDG_CONFIG_HOME/gnome-session/sessions\fP,
+\fB$XDG_CONFIG_DIRS/gnome-session/sessions\fP and
+\fB$XDG_DATA_DIRS/gnome-session/sessions\fP.
+.SH systemd
+\fIgnome-session\fP can pass much of the session management over to systemd
+(see the \fI--systemd\fP option which may be the default since 3.34). In this
+case, startup components that have \fBX-GNOME-HiddenUnderSystemd=true\fP
+set in their \fB.desktop\fP file will be ignored by \fIgnome-session\fP. It
+instead relies on the fact that these components are managed by systemd.
+.PP
+As of GNOME 3.34 the systemd support is new and the customizing the
+configuration is not yet easily possible. With GNOME 3.34 it may be best to use
+\fI--builtin\fP if session customizations are required. This is due to the way
+that GNOME currently defines the components that will be started on each session
+type.
+.PP
+\fBsystemd\fP provides the two special targets \fBgraphical-session.target\fP
+and \fBgraphical-session-pre.target\fP which are fully functional and should be
+used. \fIgnome-session\fP provides the following main targets:
+.TP
+.I "gnome-session.target"
+Generic unit that will be active throughout the session. Similar to
+\fBgraphical-session.target\fP.
+.TP
+.I "gnome-session-pre.target"
+Used for tasks that need to be done before session startup. Similar to
+\fBgraphical-session-pre.target\fP.
+.TP
+.I "gnome-session-x11@SESSION.target" "gnome-session-wayland@SESSION.target"
+Main unit started for X11/wayland based session. \fBSESSION\fP is set according
+to the session that is passed in \fI--session\fP.
+.TP
+.I "gnome-session-x11.target" "gnome-session-wayland.target"
+Convenience units without the session embedded into the target.
+.TP
+.I "gnome-session@SESSION.target"
+Convenience unit with just the \fBSESSION\fP information embedded.
+.TP
+.I "gnome-session-x11-services.target"
+Special unit started when X11 services are needed. This will be used from GNOME
+3.36 onwards. Programs will need to use the special \fBGNOME_SETUP_DISPLAY\fP
+environment variable instead of \fIDISPLAY\fP.
+.PP
+Note that care must be taken to set appropriate \fBAfter=\fP rules. It is also
+strongly recommended to always do this in combination with \fBBindsTo=\fP or
+\fBPartOf=\fP on one of the core targets (e.g. \fBgraphical-session.target\fP).
+.PP
+Units are required to set \fBCollectMode=inactive-or-failed\fP. In addition, it
+is strongly recommended to set \fBTimeoutStopSec=5\fP so that logout
+will not be delayed indefinitely in case the process does not stop properly.
+.SH ENVIRONMENT
+\fIgnome-session\fP sets several environment variables for the use of
+its child processes:
+.PP
+.B SESSION_MANAGER
+.IP
+This variable is used by session-manager aware clients to contact
+gnome-session.
+.PP
+.B DISPLAY
+.IP
+This variable is set to the X display being used by
+\fIgnome-session\fP. Note that if the \fI--display\fP option is used
+this might be different from the setting of the environment variable
+when gnome-session is invoked.
+.PP
+Behavior of \fIgnome-session\fP ifself can be modified via the following environment variable:
+.PP
+.B GNOME_SESSION_AUTOSTART_DIR
+.IP
+This variable specifies a list of directories to the searched for autostart
+files. This variable overrides all directories specified via the
+\fI--autostart\fP option, as well as all default autostart directories.
+.SH FILES
+.PP
+.B $XDG_CONFIG_HOME/autostart
+.B $XDG_CONFIG_DIRS/autostart
+.B /usr/share/gnome/autostart
+.IP
+Applications defined via .desktop files in those directories will be started on login.
+.PP
+.B $XDG_CONFIG_HOME/gnome-session/sessions
+.B $XDG_CONFIG_DIRS/gnome-session/sessions
+.B $XDG_DATA_DIRS/gnome-session/sessions
+.IP
+These directories contain the \fB.session\fP files that can be used
+with the \fI--session\fP option.
+.PP
+.B $XDG_CONFIG_HOME/gnome-session/saved-session
+.IP
+This directory contains the list of applications of the saved session.
+.SH BUGS
+If you find bugs in the \fIgnome-session\fP program, please report
+these on https://gitlab.gnome.org/GNOME/gnome-session/issues.
+.SH SEE ALSO
+.BR gnome-session-quit(1)
diff --git a/doc/man/meson.build b/doc/man/meson.build
new file mode 100644
index 0000000..4a389bc
--- /dev/null
+++ b/doc/man/meson.build
@@ -0,0 +1,43 @@
+man1_dir = join_paths(session_mandir, 'man1')
+
+xsltproc_cmd = [
+ xsltproc,
+ '--output', '@OUTPUT@',
+ '--nonet',
+ '--stringparam', 'man.output.quietly', '1',
+ '--stringparam', 'funcsynopsis.style', 'ansi',
+ '--stringparam', 'man.th.extra1.suppress', '1',
+ '--stringparam', 'man.authors.section.enabled', '0',
+ '--stringparam', 'man.copyright.section.enabled', '0',
+ 'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl',
+ '@INPUT@'
+]
+
+mans = ['gnome-session-inhibit']
+
+if enable_session_selector
+ mans += 'gnome-session-selector'
+endif
+
+foreach man: mans
+ output = man + '.1'
+
+ custom_target(
+ output,
+ input: man + '.xml',
+ output: output,
+ command: xsltproc_cmd,
+ install: true,
+ install_dir: man1_dir
+ )
+endforeach
+
+man_data = files(
+ 'gnome-session.1',
+ 'gnome-session-quit.1'
+)
+
+install_data(
+ man_data,
+ install_dir: man1_dir
+)
diff --git a/doc/meson.build b/doc/meson.build
new file mode 100644
index 0000000..6d323bb
--- /dev/null
+++ b/doc/meson.build
@@ -0,0 +1,9 @@
+xsltproc = find_program('xsltproc')
+
+if enable_docbook
+ subdir('dbus')
+endif
+
+if enable_man
+ subdir('man')
+endif
diff --git a/gnome-session.doap b/gnome-session.doap
new file mode 100644
index 0000000..0d2bbef
--- /dev/null
+++ b/gnome-session.doap
@@ -0,0 +1,58 @@
+<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:foaf="http://xmlns.com/foaf/0.1/"
+ xmlns:gnome="http://api.gnome.org/doap-extensions#"
+ xmlns="http://usefulinc.com/ns/doap#">
+
+ <name xml:lang="en">GNOME Session Manager</name>
+ <shortdesc xml:lang="en">The GNOME Session Manager</shortdesc>
+ <description>The GNOME Session Manager is in charge of starting the core
+components of the GNOME desktop, and applications that should be launched at
+login time.
+
+GNOME Session also provides the definition of what a standard GNOME session
+consists of.</description>
+ <homepage rdf:resource="https://wiki.gnome.org/Projects/SessionManagement" />
+ <mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/desktop-devel-list" />
+ <download-page rdf:resource="http://download.gnome.org/sources/gnome-session/" />
+ <bug-database rdf:resource="https://bugzilla.gnome.org/browse.cgi?product=gnome-session" />
+
+ <category rdf:resource="http://api.gnome.org/doap-extensions#core" />
+ <programming-language>C</programming-language>
+
+ <maintainer>
+ <foaf:Person>
+ <foaf:name>Ray Strode</foaf:name>
+ <foaf:mbox rdf:resource="mailto:rstrode@redhat.com" />
+ <gnome:userid>halfline</gnome:userid>
+ </foaf:Person>
+ </maintainer>
+ <maintainer>
+ <foaf:Person>
+ <foaf:name>William Jon McCann</foaf:name>
+ <foaf:mbox rdf:resource="mailto:mccann@jhu.edu" />
+ <gnome:userid>mccann</gnome:userid>
+ </foaf:Person>
+ </maintainer>
+ <maintainer>
+ <foaf:Person>
+ <foaf:name>Colin Walters</foaf:name>
+ <foaf:mbox rdf:resource="mailto:walters@verbum.org" />
+ <gnome:userid>walters</gnome:userid>
+ </foaf:Person>
+ </maintainer>
+ <maintainer>
+ <foaf:Person>
+ <foaf:name>Iain Lane</foaf:name>
+ <foaf:mbox rdf:resource="mailto:iainl@gnome.org" />
+ <gnome:userid>iainl</gnome:userid>
+ </foaf:Person>
+ </maintainer>
+ <maintainer>
+ <foaf:Person>
+ <foaf:name>Benjamin Berg</foaf:name>
+ <foaf:mbox rdf:resource="mailto:bberg@gnome.org" />
+ <gnome:userid>bberg</gnome:userid>
+ </foaf:Person>
+ </maintainer>
+</Project>
diff --git a/gnome-session/README b/gnome-session/README
new file mode 100644
index 0000000..f0bd4cc
--- /dev/null
+++ b/gnome-session/README
@@ -0,0 +1,69 @@
+See also http://live.gnome.org/SessionManagement/NewGnomeSession
+
+Startup
+-------
+
+main() creates the GsmSession object representing the session (either
+failsafe or normal). gsm_session_new() reads the appropriate autostart
+and session files to create a list of GsmApps to be started.
+(GsmAppAutostart represents an autostarted app, and GsmAppResumed
+represents an app resumed from the previous saved session.)
+
+Startup is divided into 7 phases (GsmManagerPhase):
+
+ * GSM_MANAGER_PHASE_STARTUP covers gnome-session's internal
+ startup, which also includes starting dbus-daemon (if
+ it's not already running). Gnome-session starts up those
+ explicitly because it needs them for its own purposes.
+
+ * GSM_MANAGER_PHASE_EARLY_INITIALIZATION is the first phase of
+ "normal" startup (ie, startup controlled by .desktop files
+ rather than hardcoding). It covers the possible installation of
+ files in $HOME by gnome-initial-setup and must be done before
+ other components such as gnome-keyring use those files.
+
+ * GSM_MANAGER_PHASE_INITIALIZATION covers low-level stuff like
+ gnome-settings-daemon helpers, that need to be
+ running very early (before any windows are displayed).
+
+ Apps in this phase can make use of a D-Bus interface
+ (org.gnome.SessionManager.Setenv) to set environment variables
+ in gnome-session's environment. This can be used for things like
+ $GTK_MODULES, $GNOME_KEYRING_SOCKET, etc
+
+ * GSM_MANAGER_PHASE_WINDOW_MANAGER includes window managers and
+ compositing managers, and anything else that has to be running
+ before any windows are mapped
+
+ * GSM_MANAGER_PHASE_PANEL includes anything that permanently takes
+ up screen real estate (via EWMH struts). This is the first phase
+ where things actually appear on the screen.
+
+ * GSM_MANAGER_PHASE_DESKTOP includes anything that draws directly
+ on the desktop (eg, nautilus).
+
+ * GSM_MANAGER_PHASE_APPLICATION is everything else (normal apps,
+ tray icons, etc)
+
+For each startup phase, GsmSession launches the appropriate GsmApps.
+When apps connect to the XSMP or D-Bus servers, GsmClients are created
+and added to the session. The session tries to map these clients to
+GsmApps. GsmApps signal when they register (via XSMP or SN) or exit,
+and GsmSession uses this to decide when the phase is complete.
+
+FIXME: after starting the session, we need to run the DiscardCommands
+of resumed apps.
+
+
+Running/Shutdown
+----------------
+
+GSM_MANAGER_PHASE_RUNNING is pretty similar to the old gnome-session;
+mostly it just tracks XSMP clients, and watches for
+SmRestartImmediately clients exiting (NOTE: THIS DOESN'T HAPPEN YET).
+
+GsmClient is in theory not XSMP-specific, but it's very very
+XSMP-like, and the shutdown procedure is also very XSMP-like. This is
+just because there's no way to do XSMP shutdown correctly otherwise.
+However, GsmClientDBus will still be able to present a more sane
+protocol to its clients than GsmClient presents to it.
diff --git a/gnome-session/gdm-log.c b/gnome-session/gdm-log.c
new file mode 100644
index 0000000..c0dca41
--- /dev/null
+++ b/gnome-session/gdm-log.c
@@ -0,0 +1,205 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors: William Jon McCann <mccann@jhu.edu>
+ *
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <signal.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <syslog.h>
+
+#include <glib.h>
+#include <glib/gstdio.h>
+
+#include "gdm-log.h"
+
+static gboolean initialized = FALSE;
+static int syslog_levels = (G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING);
+
+static void
+log_level_to_priority_and_prefix (GLogLevelFlags log_level,
+ int *priorityp,
+ const char **prefixp)
+{
+ int priority;
+ const char *prefix;
+
+ /* Process the message prefix and priority */
+ switch (log_level & G_LOG_LEVEL_MASK) {
+ case G_LOG_FLAG_FATAL:
+ priority = LOG_EMERG;
+ prefix = "FATAL";
+ break;
+ case G_LOG_LEVEL_ERROR:
+ priority = LOG_ERR;
+ prefix = "ERROR";
+ break;
+ case G_LOG_LEVEL_CRITICAL:
+ priority = LOG_CRIT;
+ prefix = "CRITICAL";
+ break;
+ case G_LOG_LEVEL_WARNING:
+ priority = LOG_WARNING;
+ prefix = "WARNING";
+ break;
+ case G_LOG_LEVEL_MESSAGE:
+ priority = LOG_NOTICE;
+ prefix = "MESSAGE";
+ break;
+ case G_LOG_LEVEL_INFO:
+ priority = LOG_INFO;
+ prefix = "INFO";
+ break;
+ case G_LOG_LEVEL_DEBUG:
+ /* if debug was requested then bump this up to ERROR
+ * to ensure it is seen in a log */
+ if (syslog_levels & G_LOG_LEVEL_DEBUG) {
+ priority = LOG_WARNING;
+ prefix = "DEBUG(+)";
+ } else {
+ priority = LOG_DEBUG;
+ prefix = "DEBUG";
+ }
+ break;
+ default:
+ priority = LOG_DEBUG;
+ prefix = "UNKNOWN";
+ break;
+ }
+
+ if (priorityp != NULL) {
+ *priorityp = priority;
+ }
+ if (prefixp != NULL) {
+ *prefixp = prefix;
+ }
+}
+
+void
+gdm_log_default_handler (const gchar *log_domain,
+ GLogLevelFlags log_level,
+ const gchar *message,
+ gpointer unused_data)
+{
+ GString *gstring;
+ int priority;
+ const char *level_prefix;
+ char *string;
+ gboolean do_log;
+ gboolean is_fatal;
+
+ is_fatal = (log_level & G_LOG_FLAG_FATAL) != 0;
+
+ do_log = (log_level & syslog_levels);
+ if (! do_log) {
+ return;
+ }
+
+ if (! initialized) {
+ gdm_log_init ();
+ }
+
+ log_level_to_priority_and_prefix (log_level,
+ &priority,
+ &level_prefix);
+
+ gstring = g_string_new (NULL);
+
+ if (log_domain != NULL) {
+ g_string_append (gstring, log_domain);
+ g_string_append_c (gstring, '-');
+ }
+ g_string_append (gstring, level_prefix);
+
+ g_string_append (gstring, ": ");
+ if (message == NULL) {
+ g_string_append (gstring, "(NULL) message");
+ } else {
+ g_string_append (gstring, message);
+ }
+ if (is_fatal) {
+ g_string_append (gstring, "\naborting...\n");
+ } else {
+ g_string_append (gstring, "\n");
+ }
+
+ string = g_string_free (gstring, FALSE);
+
+ syslog (priority, "%s", string);
+
+ g_free (string);
+}
+
+void
+gdm_log_toggle_debug (void)
+{
+ if (syslog_levels & G_LOG_LEVEL_DEBUG) {
+ g_debug ("Debugging disabled");
+ syslog_levels &= ~G_LOG_LEVEL_DEBUG;
+ } else {
+ syslog_levels |= G_LOG_LEVEL_DEBUG;
+ g_debug ("Debugging enabled");
+ }
+}
+
+void
+gdm_log_set_debug (gboolean debug)
+{
+ if (debug) {
+ syslog_levels |= G_LOG_LEVEL_DEBUG;
+ g_debug ("Enabling debugging");
+ } else {
+ g_debug ("Disabling debugging");
+ syslog_levels &= ~G_LOG_LEVEL_DEBUG;
+ }
+}
+
+void
+gdm_log_init (void)
+{
+ const char *prg_name;
+ int options;
+
+ g_log_set_default_handler (gdm_log_default_handler, NULL);
+
+ prg_name = g_get_prgname ();
+
+ options = LOG_PID;
+#ifdef LOG_PERROR
+ options |= LOG_PERROR;
+#endif
+
+ openlog (prg_name, options, LOG_DAEMON);
+
+ initialized = TRUE;
+}
+
+void
+gdm_log_shutdown (void)
+{
+ closelog ();
+ initialized = FALSE;
+}
+
diff --git a/gnome-session/gdm-log.h b/gnome-session/gdm-log.h
new file mode 100644
index 0000000..33daf40
--- /dev/null
+++ b/gnome-session/gdm-log.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors: William Jon McCann <mccann@jhu.edu>
+ *
+ */
+
+#ifndef __GDM_LOG_H
+#define __GDM_LOG_H
+
+#include <stdarg.h>
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+void gdm_log_default_handler (const gchar *log_domain,
+ GLogLevelFlags log_level,
+ const gchar *message,
+ gpointer unused_data);
+void gdm_log_set_debug (gboolean debug);
+void gdm_log_toggle_debug (void);
+void gdm_log_init (void);
+void gdm_log_shutdown (void);
+
+/* compatibility */
+#define gdm_fail g_critical
+#define gdm_error g_warning
+#define gdm_info g_message
+#define gdm_debug g_debug
+
+#define gdm_assert g_assert
+#define gdm_assert_not_reached g_assert_not_reached
+
+G_END_DECLS
+
+#endif /* __GDM_LOG_H */
diff --git a/gnome-session/gnome-session.in b/gnome-session/gnome-session.in
new file mode 100755
index 0000000..ddd1a59
--- /dev/null
+++ b/gnome-session/gnome-session.in
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+if [ "x$XDG_SESSION_TYPE" = "xwayland" ] &&
+ [ "x$XDG_SESSION_CLASS" != "xgreeter" ] &&
+ [ -n "$SHELL" ] &&
+ grep -q "$SHELL" /etc/shells &&
+ ! (echo "$SHELL" | grep -q "false") &&
+ ! (echo "$SHELL" | grep -q "nologin"); then
+ if [ "$1" != '-l' ]; then
+ exec bash -c "exec -l '$SHELL' -c '$0 -l $*'"
+ else
+ shift
+ fi
+fi
+
+SETTING=$(G_MESSAGES_DEBUG='' gsettings get org.gnome.system.locale region)
+REGION=${SETTING#\'}
+REGION=${REGION%\'}
+
+if [ -n "$REGION" ]; then
+ unset LC_TIME LC_NUMERIC LC_MONETARY LC_MEASUREMENT LC_PAPER
+
+ if [ "$LANG" != "$REGION" ] ; then
+ export LC_TIME=$REGION
+ export LC_NUMERIC=$REGION
+ export LC_MONETARY=$REGION
+ export LC_MEASUREMENT=$REGION
+ export LC_PAPER=$REGION
+ fi
+fi
+
+exec @libexecdir@/gnome-session-binary "$@"
diff --git a/gnome-session/gsm-app.c b/gnome-session/gsm-app.c
new file mode 100644
index 0000000..d1ef89a
--- /dev/null
+++ b/gnome-session/gsm-app.c
@@ -0,0 +1,569 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Novell, Inc.
+ * Copyright (C) 2008 Red Hat, 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 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib.h>
+#include <string.h>
+
+#include "gsm-app.h"
+#include "org.gnome.SessionManager.App.h"
+
+#define GSM_APP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSM_TYPE_APP, GsmAppPrivate))
+
+/* If a component crashes twice within a minute, we count that as a fatal error */
+#define _GSM_APP_RESPAWN_RATELIMIT_SECONDS 60
+
+struct _GsmAppPrivate
+{
+ char *id;
+ char *app_id;
+ int phase;
+ char *startup_id;
+ gboolean registered;
+ GTimeVal last_restart_time;
+ GDBusConnection *connection;
+ GsmExportedApp *skeleton;
+};
+
+
+enum {
+ EXITED,
+ DIED,
+ LAST_SIGNAL
+};
+
+static guint32 app_serial = 1;
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+enum {
+ PROP_0,
+ PROP_ID,
+ PROP_STARTUP_ID,
+ PROP_PHASE,
+ PROP_REGISTERED,
+ LAST_PROP
+};
+
+G_DEFINE_TYPE (GsmApp, gsm_app, G_TYPE_OBJECT)
+
+GQuark
+gsm_app_error_quark (void)
+{
+ static GQuark ret = 0;
+ if (ret == 0) {
+ ret = g_quark_from_static_string ("gsm_app_error");
+ }
+
+ return ret;
+
+}
+
+static gboolean
+gsm_app_get_app_id (GsmExportedApp *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmApp *app)
+{
+ const gchar *id;
+
+ id = GSM_APP_GET_CLASS (app)->impl_get_app_id (app);
+ gsm_exported_app_complete_get_app_id (skeleton, invocation, id);
+
+ return TRUE;
+}
+
+static gboolean
+gsm_app_get_startup_id (GsmExportedApp *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmApp *app)
+{
+ const gchar *id;
+
+ id = g_strdup (app->priv->startup_id);
+ gsm_exported_app_complete_get_startup_id (skeleton, invocation, id);
+
+ return TRUE;
+}
+
+static gboolean
+gsm_app_get_phase (GsmExportedApp *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmApp *app)
+{
+ gsm_exported_app_complete_get_phase (skeleton, invocation, app->priv->phase);
+ return TRUE;
+}
+
+static guint32
+get_next_app_serial (void)
+{
+ guint32 serial;
+
+ serial = app_serial++;
+
+ if ((gint32)app_serial < 0) {
+ app_serial = 1;
+ }
+
+ return serial;
+}
+
+static gboolean
+register_app (GsmApp *app)
+{
+ GError *error;
+ GsmExportedApp *skeleton;
+
+ error = NULL;
+ app->priv->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+ if (error != NULL) {
+ g_critical ("error getting session bus: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ skeleton = gsm_exported_app_skeleton_new ();
+ app->priv->skeleton = skeleton;
+ g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (skeleton),
+ app->priv->connection, app->priv->id,
+ &error);
+
+ if (error != NULL) {
+ g_critical ("error registering app on session bus: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ g_signal_connect (skeleton, "handle-get-app-id",
+ G_CALLBACK (gsm_app_get_app_id), app);
+ g_signal_connect (skeleton, "handle-get-phase",
+ G_CALLBACK (gsm_app_get_phase), app);
+ g_signal_connect (skeleton, "handle-get-startup-id",
+ G_CALLBACK (gsm_app_get_startup_id), app);
+
+ return TRUE;
+}
+
+static GObject *
+gsm_app_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_properties)
+{
+ GsmApp *app;
+ gboolean res;
+
+ app = GSM_APP (G_OBJECT_CLASS (gsm_app_parent_class)->constructor (type,
+ n_construct_properties,
+ construct_properties));
+
+ g_free (app->priv->id);
+ app->priv->id = g_strdup_printf ("/org/gnome/SessionManager/App%u", get_next_app_serial ());
+
+ res = register_app (app);
+ if (! res) {
+ g_warning ("Unable to register app with session bus");
+ }
+
+ return G_OBJECT (app);
+}
+
+static void
+gsm_app_init (GsmApp *app)
+{
+ app->priv = GSM_APP_GET_PRIVATE (app);
+}
+
+static void
+gsm_app_set_phase (GsmApp *app,
+ int phase)
+{
+ g_return_if_fail (GSM_IS_APP (app));
+
+ app->priv->phase = phase;
+}
+
+static void
+gsm_app_set_id (GsmApp *app,
+ const char *id)
+{
+ g_return_if_fail (GSM_IS_APP (app));
+
+ g_free (app->priv->id);
+
+ app->priv->id = g_strdup (id);
+ g_object_notify (G_OBJECT (app), "id");
+
+}
+static void
+gsm_app_set_startup_id (GsmApp *app,
+ const char *startup_id)
+{
+ g_return_if_fail (GSM_IS_APP (app));
+
+ g_free (app->priv->startup_id);
+
+ app->priv->startup_id = g_strdup (startup_id);
+ g_object_notify (G_OBJECT (app), "startup-id");
+
+}
+
+static void
+gsm_app_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GsmApp *app = GSM_APP (object);
+
+ switch (prop_id) {
+ case PROP_STARTUP_ID:
+ gsm_app_set_startup_id (app, g_value_get_string (value));
+ break;
+ case PROP_ID:
+ gsm_app_set_id (app, g_value_get_string (value));
+ break;
+ case PROP_PHASE:
+ gsm_app_set_phase (app, g_value_get_int (value));
+ break;
+ case PROP_REGISTERED:
+ gsm_app_set_registered (app, g_value_get_boolean (value));
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+gsm_app_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GsmApp *app = GSM_APP (object);
+
+ switch (prop_id) {
+ case PROP_STARTUP_ID:
+ g_value_set_string (value, app->priv->startup_id);
+ break;
+ case PROP_ID:
+ g_value_set_string (value, app->priv->id);
+ break;
+ case PROP_PHASE:
+ g_value_set_int (value, app->priv->phase);
+ break;
+ case PROP_REGISTERED:
+ g_value_set_boolean (value, app->priv->registered);
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+gsm_app_dispose (GObject *object)
+{
+ GsmApp *app = GSM_APP (object);
+
+ g_free (app->priv->startup_id);
+ app->priv->startup_id = NULL;
+
+ g_free (app->priv->id);
+ app->priv->id = NULL;
+
+ if (app->priv->skeleton != NULL) {
+ g_dbus_interface_skeleton_unexport_from_connection (G_DBUS_INTERFACE_SKELETON (app->priv->skeleton),
+ app->priv->connection);
+ g_clear_object (&app->priv->skeleton);
+ }
+
+ g_clear_object (&app->priv->connection);
+
+ G_OBJECT_CLASS (gsm_app_parent_class)->dispose (object);
+}
+
+static void
+gsm_app_class_init (GsmAppClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->set_property = gsm_app_set_property;
+ object_class->get_property = gsm_app_get_property;
+ object_class->dispose = gsm_app_dispose;
+ object_class->constructor = gsm_app_constructor;
+
+ klass->impl_start = NULL;
+ klass->impl_get_app_id = NULL;
+ klass->impl_get_autorestart = NULL;
+ klass->impl_provides = NULL;
+ klass->impl_get_provides = NULL;
+ klass->impl_is_running = NULL;
+
+ g_object_class_install_property (object_class,
+ PROP_PHASE,
+ g_param_spec_int ("phase",
+ "Phase",
+ "Phase",
+ -1,
+ G_MAXINT,
+ -1,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_ID,
+ g_param_spec_string ("id",
+ "ID",
+ "ID",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_STARTUP_ID,
+ g_param_spec_string ("startup-id",
+ "startup ID",
+ "Session management startup ID",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (object_class,
+ PROP_REGISTERED,
+ g_param_spec_boolean ("registered",
+ "Registered",
+ "Registered",
+ FALSE,
+ G_PARAM_READWRITE));
+
+ signals[EXITED] =
+ g_signal_new ("exited",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsmAppClass, exited),
+ NULL, NULL, NULL,
+ G_TYPE_NONE,
+ 1, G_TYPE_UCHAR);
+ signals[DIED] =
+ g_signal_new ("died",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsmAppClass, died),
+ NULL, NULL, NULL,
+ G_TYPE_NONE,
+ 1, G_TYPE_INT);
+
+ g_type_class_add_private (klass, sizeof (GsmAppPrivate));
+}
+
+const char *
+gsm_app_peek_id (GsmApp *app)
+{
+ return app->priv->id;
+}
+
+const char *
+gsm_app_peek_app_id (GsmApp *app)
+{
+ return GSM_APP_GET_CLASS (app)->impl_get_app_id (app);
+}
+
+const char *
+gsm_app_peek_startup_id (GsmApp *app)
+{
+ return app->priv->startup_id;
+}
+
+/**
+ * gsm_app_peek_phase:
+ * @app: a %GsmApp
+ *
+ * Returns @app's startup phase.
+ *
+ * Return value: @app's startup phase
+ **/
+GsmManagerPhase
+gsm_app_peek_phase (GsmApp *app)
+{
+ g_return_val_if_fail (GSM_IS_APP (app), GSM_MANAGER_PHASE_APPLICATION);
+
+ return app->priv->phase;
+}
+
+gboolean
+gsm_app_peek_is_disabled (GsmApp *app)
+{
+ g_return_val_if_fail (GSM_IS_APP (app), FALSE);
+
+ if (GSM_APP_GET_CLASS (app)->impl_is_disabled) {
+ return GSM_APP_GET_CLASS (app)->impl_is_disabled (app);
+ } else {
+ return FALSE;
+ }
+}
+
+gboolean
+gsm_app_peek_is_conditionally_disabled (GsmApp *app)
+{
+ g_return_val_if_fail (GSM_IS_APP (app), FALSE);
+
+ if (GSM_APP_GET_CLASS (app)->impl_is_conditionally_disabled) {
+ return GSM_APP_GET_CLASS (app)->impl_is_conditionally_disabled (app);
+ } else {
+ return FALSE;
+ }
+}
+
+gboolean
+gsm_app_is_running (GsmApp *app)
+{
+ g_return_val_if_fail (GSM_IS_APP (app), FALSE);
+
+ if (GSM_APP_GET_CLASS (app)->impl_is_running) {
+ return GSM_APP_GET_CLASS (app)->impl_is_running (app);
+ } else {
+ return FALSE;
+ }
+}
+
+gboolean
+gsm_app_peek_autorestart (GsmApp *app)
+{
+ g_return_val_if_fail (GSM_IS_APP (app), FALSE);
+
+ if (GSM_APP_GET_CLASS (app)->impl_get_autorestart) {
+ return GSM_APP_GET_CLASS (app)->impl_get_autorestart (app);
+ } else {
+ return FALSE;
+ }
+}
+
+gboolean
+gsm_app_provides (GsmApp *app, const char *service)
+{
+ if (GSM_APP_GET_CLASS (app)->impl_provides) {
+ return GSM_APP_GET_CLASS (app)->impl_provides (app, service);
+ } else {
+ return FALSE;
+ }
+}
+
+char **
+gsm_app_get_provides (GsmApp *app)
+{
+ if (GSM_APP_GET_CLASS (app)->impl_get_provides) {
+ return GSM_APP_GET_CLASS (app)->impl_get_provides (app);
+ } else {
+ return NULL;
+ }
+}
+
+gboolean
+gsm_app_has_autostart_condition (GsmApp *app,
+ const char *condition)
+{
+
+ if (GSM_APP_GET_CLASS (app)->impl_has_autostart_condition) {
+ return GSM_APP_GET_CLASS (app)->impl_has_autostart_condition (app, condition);
+ } else {
+ return FALSE;
+ }
+}
+
+gboolean
+gsm_app_start (GsmApp *app,
+ GError **error)
+{
+ g_debug ("Starting app: %s", app->priv->id);
+ return GSM_APP_GET_CLASS (app)->impl_start (app, error);
+}
+
+gboolean
+gsm_app_restart (GsmApp *app,
+ GError **error)
+{
+ GTimeVal current_time;
+ g_debug ("Re-starting app: %s", app->priv->id);
+
+ g_get_current_time (&current_time);
+ if (app->priv->last_restart_time.tv_sec > 0
+ && (current_time.tv_sec - app->priv->last_restart_time.tv_sec) < _GSM_APP_RESPAWN_RATELIMIT_SECONDS) {
+ g_warning ("App '%s' respawning too quickly", gsm_app_peek_app_id (app));
+ g_set_error (error,
+ GSM_APP_ERROR,
+ GSM_APP_ERROR_RESTART_LIMIT,
+ "Component '%s' crashing too quickly",
+ gsm_app_peek_app_id (app));
+ return FALSE;
+ }
+ app->priv->last_restart_time = current_time;
+
+ return GSM_APP_GET_CLASS (app)->impl_restart (app, error);
+}
+
+gboolean
+gsm_app_stop (GsmApp *app,
+ GError **error)
+{
+ return GSM_APP_GET_CLASS (app)->impl_stop (app, error);
+}
+
+void
+gsm_app_exited (GsmApp *app,
+ guchar exit_code)
+{
+ g_return_if_fail (GSM_IS_APP (app));
+
+ g_signal_emit (app, signals[EXITED], 0, exit_code);
+}
+
+void
+gsm_app_died (GsmApp *app,
+ int signal)
+{
+ g_return_if_fail (GSM_IS_APP (app));
+
+ g_signal_emit (app, signals[DIED], 0, signal);
+}
+
+gboolean
+gsm_app_get_registered (GsmApp *app)
+{
+ g_return_val_if_fail (GSM_IS_APP (app), FALSE);
+
+ return app->priv->registered;
+}
+
+void
+gsm_app_set_registered (GsmApp *app,
+ gboolean registered)
+{
+ g_return_if_fail (GSM_IS_APP (app));
+
+ if (app->priv->registered != registered) {
+ app->priv->registered = registered;
+ g_object_notify (G_OBJECT (app), "registered");
+ }
+}
+
+gboolean
+gsm_app_save_to_keyfile (GsmApp *app,
+ GKeyFile *keyfile,
+ GError **error)
+{
+ g_debug ("Saving app: %s", app->priv->id);
+ return GSM_APP_GET_CLASS (app)->impl_save_to_keyfile (app, keyfile, error);
+}
diff --git a/gnome-session/gsm-app.h b/gnome-session/gsm-app.h
new file mode 100644
index 0000000..f38b3be
--- /dev/null
+++ b/gnome-session/gsm-app.h
@@ -0,0 +1,134 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Novell, Inc.
+ * Copyright (C) 2008 Red Hat, 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 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GSM_APP_H__
+#define __GSM_APP_H__
+
+#include <glib-object.h>
+#include <sys/types.h>
+
+
+#include "gsm-manager.h"
+#include "gsm-client.h"
+
+G_BEGIN_DECLS
+
+#define GSM_TYPE_APP (gsm_app_get_type ())
+#define GSM_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSM_TYPE_APP, GsmApp))
+#define GSM_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSM_TYPE_APP, GsmAppClass))
+#define GSM_IS_APP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSM_TYPE_APP))
+#define GSM_IS_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSM_TYPE_APP))
+#define GSM_APP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSM_TYPE_APP, GsmAppClass))
+
+typedef struct _GsmApp GsmApp;
+typedef struct _GsmAppClass GsmAppClass;
+typedef struct _GsmAppPrivate GsmAppPrivate;
+
+struct _GsmApp
+{
+ GObject parent;
+ GsmAppPrivate *priv;
+};
+
+struct _GsmAppClass
+{
+ GObjectClass parent_class;
+
+ /* signals */
+ void (*exited) (GsmApp *app,
+ guchar exit_code);
+ void (*died) (GsmApp *app,
+ int signal);
+
+ /* virtual methods */
+ gboolean (*impl_start) (GsmApp *app,
+ GError **error);
+ gboolean (*impl_restart) (GsmApp *app,
+ GError **error);
+ gboolean (*impl_stop) (GsmApp *app,
+ GError **error);
+ gboolean (*impl_provides) (GsmApp *app,
+ const char *service);
+ char ** (*impl_get_provides) (GsmApp *app);
+ gboolean (*impl_has_autostart_condition) (GsmApp *app,
+ const char *service);
+ gboolean (*impl_is_running) (GsmApp *app);
+
+ gboolean (*impl_get_autorestart) (GsmApp *app);
+ const char *(*impl_get_app_id) (GsmApp *app);
+ gboolean (*impl_is_disabled) (GsmApp *app);
+ gboolean (*impl_is_conditionally_disabled) (GsmApp *app);
+
+ gboolean (*impl_save_to_keyfile) (GsmApp *app,
+ GKeyFile *keyfile,
+ GError **error);
+};
+
+typedef enum
+{
+ GSM_APP_ERROR_GENERAL = 0,
+ GSM_APP_ERROR_RESTART_LIMIT,
+ GSM_APP_ERROR_START,
+ GSM_APP_ERROR_STOP,
+ GSM_APP_NUM_ERRORS
+} GsmAppError;
+
+#define GSM_APP_ERROR gsm_app_error_quark ()
+
+GQuark gsm_app_error_quark (void);
+GType gsm_app_get_type (void) G_GNUC_CONST;
+
+gboolean gsm_app_peek_autorestart (GsmApp *app);
+
+const char *gsm_app_peek_id (GsmApp *app);
+const char *gsm_app_peek_app_id (GsmApp *app);
+const char *gsm_app_peek_startup_id (GsmApp *app);
+GsmManagerPhase gsm_app_peek_phase (GsmApp *app);
+gboolean gsm_app_peek_is_disabled (GsmApp *app);
+gboolean gsm_app_peek_is_conditionally_disabled (GsmApp *app);
+
+gboolean gsm_app_start (GsmApp *app,
+ GError **error);
+gboolean gsm_app_restart (GsmApp *app,
+ GError **error);
+gboolean gsm_app_stop (GsmApp *app,
+ GError **error);
+gboolean gsm_app_is_running (GsmApp *app);
+
+void gsm_app_exited (GsmApp *app,
+ guchar exit_code);
+void gsm_app_died (GsmApp *app,
+ int signal);
+
+gboolean gsm_app_provides (GsmApp *app,
+ const char *service);
+char **gsm_app_get_provides (GsmApp *app);
+gboolean gsm_app_has_autostart_condition (GsmApp *app,
+ const char *condition);
+gboolean gsm_app_get_registered (GsmApp *app);
+void gsm_app_set_registered (GsmApp *app,
+ gboolean registered);
+
+gboolean gsm_app_save_to_keyfile (GsmApp *app,
+ GKeyFile *keyfile,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __GSM_APP_H__ */
diff --git a/gnome-session/gsm-autostart-app.c b/gnome-session/gsm-autostart-app.c
new file mode 100644
index 0000000..0893300
--- /dev/null
+++ b/gnome-session/gsm-autostart-app.c
@@ -0,0 +1,1516 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Novell, Inc.
+ * Copyright (C) 2008 Red Hat, 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 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <string.h>
+#include <sys/wait.h>
+#include <errno.h>
+
+#include <glib.h>
+#include <gio/gio.h>
+#include <gio/gdesktopappinfo.h>
+
+#define GNOME_DESKTOP_USE_UNSTABLE_API
+#include <libgnome-desktop/gnome-systemd.h>
+
+#ifdef HAVE_SYSTEMD
+#ifdef ENABLE_SYSTEMD_JOURNAL
+#include <systemd/sd-journal.h>
+#endif
+#include <systemd/sd-daemon.h>
+#endif
+
+#include "gsm-autostart-app.h"
+#include "gsm-util.h"
+
+enum {
+ AUTOSTART_LAUNCH_SPAWN = 0,
+ AUTOSTART_LAUNCH_ACTIVATE
+};
+
+enum {
+ GSM_CONDITION_NONE = 0,
+ GSM_CONDITION_IF_EXISTS = 1,
+ GSM_CONDITION_UNLESS_EXISTS = 2,
+ GSM_CONDITION_GSETTINGS = 3,
+ GSM_CONDITION_IF_SESSION = 4,
+ GSM_CONDITION_UNLESS_SESSION = 5,
+ GSM_CONDITION_UNKNOWN = 6
+};
+
+#define GSM_SESSION_CLIENT_DBUS_INTERFACE "org.gnome.SessionClient"
+
+struct _GsmAutostartAppPrivate {
+ gboolean mask_systemd;
+ char *desktop_filename;
+ char *desktop_id;
+ char *startup_id;
+
+ GDesktopAppInfo *app_info;
+ /* provides defined in session definition */
+ GSList *session_provides;
+
+ /* desktop file state */
+ char *condition_string;
+ gboolean condition;
+ gboolean autorestart;
+
+ GFileMonitor *condition_monitor;
+ guint condition_notify_id;
+ GSettings *condition_settings;
+
+ int launch_type;
+ GPid pid;
+ guint child_watch_id;
+};
+
+enum {
+ CONDITION_CHANGED,
+ LAST_SIGNAL
+};
+
+enum {
+ PROP_0,
+ PROP_DESKTOP_FILENAME,
+ PROP_MASK_SYSTEMD
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+#define GSM_AUTOSTART_APP_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), GSM_TYPE_AUTOSTART_APP, GsmAutostartAppPrivate))
+
+static void gsm_autostart_app_initable_iface_init (GInitableIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (GsmAutostartApp, gsm_autostart_app, GSM_TYPE_APP,
+ G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, gsm_autostart_app_initable_iface_init))
+
+static void
+gsm_autostart_app_init (GsmAutostartApp *app)
+{
+ app->priv = GSM_AUTOSTART_APP_GET_PRIVATE (app);
+
+ app->priv->pid = -1;
+ app->priv->condition_monitor = NULL;
+ app->priv->condition = FALSE;
+}
+
+static gboolean
+is_disabled (GsmApp *app)
+{
+ GsmAutostartAppPrivate *priv;
+
+ priv = GSM_AUTOSTART_APP (app)->priv;
+
+ /* GSM_AUTOSTART_APP_ENABLED_KEY key, used by old gnome-session */
+ if (g_desktop_app_info_has_key (priv->app_info,
+ GSM_AUTOSTART_APP_ENABLED_KEY) &&
+ !g_desktop_app_info_get_boolean (priv->app_info,
+ GSM_AUTOSTART_APP_ENABLED_KEY)) {
+ g_debug ("app %s is disabled by " GSM_AUTOSTART_APP_ENABLED_KEY,
+ gsm_app_peek_id (app));
+ return TRUE;
+ }
+
+ /* Hidden key, used by autostart spec */
+ if (g_desktop_app_info_get_is_hidden (priv->app_info)) {
+ g_debug ("app %s is disabled by Hidden",
+ gsm_app_peek_id (app));
+ return TRUE;
+ }
+
+ /* Check OnlyShowIn/NotShowIn/TryExec */
+ if (!g_desktop_app_info_get_show_in (priv->app_info, NULL)) {
+ g_debug ("app %s is not for the current desktop",
+ gsm_app_peek_id (app));
+ return TRUE;
+ }
+
+ /* Check if app is systemd enabled and mask-systemd is set. */
+ if (priv->mask_systemd &&
+ g_desktop_app_info_has_key (priv->app_info,
+ GSM_AUTOSTART_APP_SYSTEMD_KEY) &&
+ g_desktop_app_info_get_boolean (priv->app_info,
+ GSM_AUTOSTART_APP_SYSTEMD_KEY)) {
+ g_debug ("app %s is disabled by " GSM_AUTOSTART_APP_SYSTEMD_KEY,
+ gsm_app_peek_id (app));
+ return TRUE;
+ }
+
+ /* Do not check AutostartCondition - this method is only to determine
+ if the app is unconditionally disabled */
+
+ return FALSE;
+}
+
+static gboolean
+parse_condition_string (const char *condition_string,
+ guint *condition_kindp,
+ char **keyp)
+{
+ const char *space;
+ const char *key;
+ int len;
+ guint kind;
+
+ space = condition_string + strcspn (condition_string, " ");
+ len = space - condition_string;
+ key = space;
+ while (isspace ((unsigned char)*key)) {
+ key++;
+ }
+
+ kind = GSM_CONDITION_UNKNOWN;
+
+ if (!g_ascii_strncasecmp (condition_string, "if-exists", len) && key) {
+ kind = GSM_CONDITION_IF_EXISTS;
+ } else if (!g_ascii_strncasecmp (condition_string, "unless-exists", len) && key) {
+ kind = GSM_CONDITION_UNLESS_EXISTS;
+ } else if (!g_ascii_strncasecmp (condition_string, "GSettings", len)) {
+ kind = GSM_CONDITION_GSETTINGS;
+ } else if (!g_ascii_strncasecmp (condition_string, "GNOME3", len)) {
+ condition_string = key;
+ space = condition_string + strcspn (condition_string, " ");
+ len = space - condition_string;
+ key = space;
+ while (isspace ((unsigned char)*key)) {
+ key++;
+ }
+ if (!g_ascii_strncasecmp (condition_string, "if-session", len) && key) {
+ kind = GSM_CONDITION_IF_SESSION;
+ } else if (!g_ascii_strncasecmp (condition_string, "unless-session", len) && key) {
+ kind = GSM_CONDITION_UNLESS_SESSION;
+ }
+ }
+
+ if (kind == GSM_CONDITION_UNKNOWN) {
+ key = NULL;
+ }
+
+ if (keyp != NULL) {
+ *keyp = g_strdup (key);
+ }
+
+ if (condition_kindp != NULL) {
+ *condition_kindp = kind;
+ }
+
+ return (kind != GSM_CONDITION_UNKNOWN);
+}
+
+static void
+if_exists_condition_cb (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event,
+ GsmApp *app)
+{
+ GsmAutostartAppPrivate *priv;
+ gboolean condition = FALSE;
+
+ priv = GSM_AUTOSTART_APP (app)->priv;
+
+ switch (event) {
+ case G_FILE_MONITOR_EVENT_CREATED:
+ condition = TRUE;
+ break;
+ case G_FILE_MONITOR_EVENT_DELETED:
+ condition = FALSE;
+ break;
+ default:
+ /* Ignore any other monitor event */
+ return;
+ }
+
+ /* Emit only if the condition actually changed */
+ if (condition != priv->condition) {
+ priv->condition = condition;
+ g_signal_emit (app, signals[CONDITION_CHANGED], 0, condition);
+ }
+}
+
+static void
+unless_exists_condition_cb (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event,
+ GsmApp *app)
+{
+ GsmAutostartAppPrivate *priv;
+ gboolean condition = FALSE;
+
+ priv = GSM_AUTOSTART_APP (app)->priv;
+
+ switch (event) {
+ case G_FILE_MONITOR_EVENT_CREATED:
+ condition = FALSE;
+ break;
+ case G_FILE_MONITOR_EVENT_DELETED:
+ condition = TRUE;
+ break;
+ default:
+ /* Ignore any other monitor event */
+ return;
+ }
+
+ /* Emit only if the condition actually changed */
+ if (condition != priv->condition) {
+ priv->condition = condition;
+ g_signal_emit (app, signals[CONDITION_CHANGED], 0, condition);
+ }
+}
+
+static void
+gsettings_condition_cb (GSettings *settings,
+ const char *key,
+ gpointer user_data)
+{
+ GsmApp *app;
+ GsmAutostartAppPrivate *priv;
+ gboolean condition;
+
+ g_return_if_fail (GSM_IS_APP (user_data));
+
+ app = GSM_APP (user_data);
+
+ priv = GSM_AUTOSTART_APP (app)->priv;
+
+ condition = g_settings_get_boolean (settings, key);
+
+ g_debug ("GsmAutostartApp: app:%s condition changed condition:%d",
+ gsm_app_peek_id (app),
+ condition);
+
+ /* Emit only if the condition actually changed */
+ if (condition != priv->condition) {
+ priv->condition = condition;
+ g_signal_emit (app, signals[CONDITION_CHANGED], 0, condition);
+ }
+}
+
+static gboolean
+setup_gsettings_condition_monitor (GsmAutostartApp *app,
+ const char *key)
+{
+ GSettingsSchemaSource *source;
+ GSettingsSchema *schema;
+ GSettings *settings;
+ GSettingsSchemaKey *schema_key;
+ const GVariantType *key_type;
+ char **elems;
+ gboolean retval = FALSE;
+ char *signal;
+
+ retval = FALSE;
+
+ schema = NULL;
+
+ elems = g_strsplit (key, " ", 2);
+
+ if (elems == NULL)
+ goto out;
+
+ if (elems[0] == NULL || elems[1] == NULL)
+ goto out;
+
+ source = g_settings_schema_source_get_default ();
+
+ schema = g_settings_schema_source_lookup (source, elems[0], TRUE);
+
+ if (schema == NULL)
+ goto out;
+
+ if (!g_settings_schema_has_key (schema, elems[1]))
+ goto out;
+
+ schema_key = g_settings_schema_get_key (schema, elems[1]);
+
+ g_assert (schema_key != NULL);
+
+ key_type = g_settings_schema_key_get_value_type (schema_key);
+
+ g_settings_schema_key_unref (schema_key);
+
+ g_assert (key_type != NULL);
+
+ if (!g_variant_type_equal (key_type, G_VARIANT_TYPE_BOOLEAN))
+ goto out;
+
+ settings = g_settings_new_full (schema, NULL, NULL);
+ retval = g_settings_get_boolean (settings, elems[1]);
+
+ signal = g_strdup_printf ("changed::%s", elems[1]);
+ g_signal_connect (G_OBJECT (settings), signal,
+ G_CALLBACK (gsettings_condition_cb), app);
+ g_free (signal);
+
+ app->priv->condition_settings = settings;
+
+out:
+ if (schema)
+ g_settings_schema_unref (schema);
+ g_strfreev (elems);
+
+ return retval;
+}
+
+static void
+if_session_condition_cb (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ GsmApp *app;
+ GsmAutostartAppPrivate *priv;
+ char *session_name;
+ char *key;
+ gboolean condition;
+
+ g_return_if_fail (GSM_IS_APP (user_data));
+
+ app = GSM_APP (user_data);
+
+ priv = GSM_AUTOSTART_APP (app)->priv;
+
+ parse_condition_string (priv->condition_string, NULL, &key);
+
+ g_object_get (object, "session-name", &session_name, NULL);
+ condition = strcmp (session_name, key) == 0;
+ g_free (session_name);
+
+ g_free (key);
+
+ g_debug ("GsmAutostartApp: app:%s condition changed condition:%d",
+ gsm_app_peek_id (app),
+ condition);
+
+ /* Emit only if the condition actually changed */
+ if (condition != priv->condition) {
+ priv->condition = condition;
+ g_signal_emit (app, signals[CONDITION_CHANGED], 0, condition);
+ }
+}
+
+static void
+unless_session_condition_cb (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ GsmApp *app;
+ GsmAutostartAppPrivate *priv;
+ char *session_name;
+ char *key;
+ gboolean condition;
+
+ g_return_if_fail (GSM_IS_APP (user_data));
+
+ app = GSM_APP (user_data);
+
+ priv = GSM_AUTOSTART_APP (app)->priv;
+
+ parse_condition_string (priv->condition_string, NULL, &key);
+
+ g_object_get (object, "session-name", &session_name, NULL);
+ condition = strcmp (session_name, key) != 0;
+ g_free (session_name);
+
+ g_free (key);
+
+ g_debug ("GsmAutostartApp: app:%s condition changed condition:%d",
+ gsm_app_peek_id (app),
+ condition);
+
+ /* Emit only if the condition actually changed */
+ if (condition != priv->condition) {
+ priv->condition = condition;
+ g_signal_emit (app, signals[CONDITION_CHANGED], 0, condition);
+ }
+}
+
+static char *
+resolve_conditional_file_path (const char *file)
+{
+ if (g_path_is_absolute (file))
+ return g_strdup (file);
+ return g_build_filename (g_get_user_config_dir (), file, NULL);
+}
+
+static void
+setup_condition_monitor (GsmAutostartApp *app)
+{
+ guint kind;
+ char *key;
+ gboolean res;
+ gboolean disabled;
+
+ if (app->priv->condition_monitor != NULL) {
+ g_file_monitor_cancel (app->priv->condition_monitor);
+ }
+
+ if (app->priv->condition_string == NULL) {
+ return;
+ }
+
+ /* if it is disabled outright there is no point in monitoring */
+ if (is_disabled (GSM_APP (app))) {
+ return;
+ }
+
+ key = NULL;
+ res = parse_condition_string (app->priv->condition_string, &kind, &key);
+ if (! res) {
+ g_free (key);
+ return;
+ }
+
+ if (key == NULL) {
+ return;
+ }
+
+ if (kind == GSM_CONDITION_IF_EXISTS) {
+ char *file_path;
+ GFile *file;
+
+ file_path = resolve_conditional_file_path (key);
+ disabled = !g_file_test (file_path, G_FILE_TEST_EXISTS);
+
+ file = g_file_new_for_path (file_path);
+ app->priv->condition_monitor = g_file_monitor_file (file, 0, NULL, NULL);
+
+ g_signal_connect (app->priv->condition_monitor, "changed",
+ G_CALLBACK (if_exists_condition_cb),
+ app);
+
+ g_object_unref (file);
+ g_free (file_path);
+ } else if (kind == GSM_CONDITION_UNLESS_EXISTS) {
+ char *file_path;
+ GFile *file;
+
+ file_path = resolve_conditional_file_path (key);
+ disabled = g_file_test (file_path, G_FILE_TEST_EXISTS);
+
+ file = g_file_new_for_path (file_path);
+ app->priv->condition_monitor = g_file_monitor_file (file, 0, NULL, NULL);
+
+ g_signal_connect (app->priv->condition_monitor, "changed",
+ G_CALLBACK (unless_exists_condition_cb),
+ app);
+
+ g_object_unref (file);
+ g_free (file_path);
+ } else if (kind == GSM_CONDITION_GSETTINGS) {
+ disabled = !setup_gsettings_condition_monitor (app, key);
+ } else if (kind == GSM_CONDITION_IF_SESSION) {
+ GsmManager *manager;
+ char *session_name;
+
+ /* get the singleton */
+ manager = gsm_manager_get ();
+
+ g_object_get (manager, "session-name", &session_name, NULL);
+ disabled = strcmp (session_name, key) != 0;
+
+ g_signal_connect (manager, "notify::session-name",
+ G_CALLBACK (if_session_condition_cb), app);
+ g_free (session_name);
+ } else if (kind == GSM_CONDITION_UNLESS_SESSION) {
+ GsmManager *manager;
+ char *session_name;
+
+ /* get the singleton */
+ manager = gsm_manager_get ();
+
+ g_object_get (manager, "session-name", &session_name, NULL);
+ disabled = strcmp (session_name, key) == 0;
+
+ g_signal_connect (manager, "notify::session-name",
+ G_CALLBACK (unless_session_condition_cb), app);
+ g_free (session_name);
+ } else {
+ disabled = TRUE;
+ }
+
+ g_free (key);
+
+ if (disabled) {
+ /* FIXME: cache the disabled value? */
+ }
+}
+
+static void
+load_desktop_file (GsmAutostartApp *app)
+{
+ char *dbus_name;
+ char *startup_id;
+ char *phase_str;
+ int phase;
+ gboolean res;
+
+ g_assert (app->priv->app_info != NULL);
+
+ phase_str = g_desktop_app_info_get_string (app->priv->app_info,
+ GSM_AUTOSTART_APP_PHASE_KEY);
+ if (phase_str != NULL) {
+ if (strcmp (phase_str, "EarlyInitialization") == 0) {
+ phase = GSM_MANAGER_PHASE_EARLY_INITIALIZATION;
+ } else if (strcmp (phase_str, "PreDisplayServer") == 0) {
+ phase = GSM_MANAGER_PHASE_PRE_DISPLAY_SERVER;
+ } else if (strcmp (phase_str, "DisplayServer") == 0) {
+ phase = GSM_MANAGER_PHASE_DISPLAY_SERVER;
+ } else if (strcmp (phase_str, "Initialization") == 0) {
+ phase = GSM_MANAGER_PHASE_INITIALIZATION;
+ } else if (strcmp (phase_str, "WindowManager") == 0) {
+ phase = GSM_MANAGER_PHASE_WINDOW_MANAGER;
+ } else if (strcmp (phase_str, "Panel") == 0) {
+ phase = GSM_MANAGER_PHASE_PANEL;
+ } else if (strcmp (phase_str, "Desktop") == 0) {
+ phase = GSM_MANAGER_PHASE_DESKTOP;
+ } else {
+ phase = GSM_MANAGER_PHASE_APPLICATION;
+ }
+
+ g_free (phase_str);
+ } else {
+ phase = GSM_MANAGER_PHASE_APPLICATION;
+ }
+
+ dbus_name = g_desktop_app_info_get_string (app->priv->app_info,
+ GSM_AUTOSTART_APP_DBUS_NAME_KEY);
+ if (dbus_name != NULL) {
+ app->priv->launch_type = AUTOSTART_LAUNCH_ACTIVATE;
+ } else {
+ app->priv->launch_type = AUTOSTART_LAUNCH_SPAWN;
+ }
+
+ /* this must only be done on first load */
+ switch (app->priv->launch_type) {
+ case AUTOSTART_LAUNCH_SPAWN:
+ startup_id =
+ g_desktop_app_info_get_string (app->priv->app_info,
+ GSM_AUTOSTART_APP_STARTUP_ID_KEY);
+
+ if (startup_id == NULL) {
+ startup_id = gsm_util_generate_startup_id ();
+ }
+ break;
+ case AUTOSTART_LAUNCH_ACTIVATE:
+ startup_id = g_strdup (dbus_name);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ res = g_desktop_app_info_has_key (app->priv->app_info,
+ GSM_AUTOSTART_APP_AUTORESTART_KEY);
+ if (res) {
+ app->priv->autorestart = g_desktop_app_info_get_boolean (app->priv->app_info,
+ GSM_AUTOSTART_APP_AUTORESTART_KEY);
+ } else {
+ app->priv->autorestart = FALSE;
+ }
+
+ g_free (app->priv->condition_string);
+ app->priv->condition_string = g_desktop_app_info_get_string (app->priv->app_info,
+ "AutostartCondition");
+ setup_condition_monitor (app);
+
+ g_object_set (app,
+ "phase", phase,
+ "startup-id", startup_id,
+ NULL);
+
+ g_free (startup_id);
+ g_free (dbus_name);
+}
+
+static void
+gsm_autostart_app_set_desktop_filename (GsmAutostartApp *app,
+ const char *desktop_filename)
+{
+ if (app->priv->app_info != NULL) {
+ g_clear_object (&app->priv->app_info);
+ g_clear_pointer (&app->priv->desktop_filename, g_free);
+ g_clear_pointer (&app->priv->desktop_id, g_free);
+ }
+
+ if (desktop_filename == NULL) {
+ return;
+ }
+
+ app->priv->desktop_filename = g_strdup (desktop_filename);
+ app->priv->desktop_id = g_path_get_basename (desktop_filename);
+}
+
+static void
+gsm_autostart_app_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GsmAutostartApp *self;
+
+ self = GSM_AUTOSTART_APP (object);
+
+ switch (prop_id) {
+ case PROP_DESKTOP_FILENAME:
+ gsm_autostart_app_set_desktop_filename (self, g_value_get_string (value));
+ break;
+ case PROP_MASK_SYSTEMD:
+ self->priv->mask_systemd = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gsm_autostart_app_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GsmAutostartApp *self;
+
+ self = GSM_AUTOSTART_APP (object);
+
+ switch (prop_id) {
+ case PROP_DESKTOP_FILENAME:
+ if (self->priv->app_info != NULL) {
+ g_value_set_string (value, g_desktop_app_info_get_filename (self->priv->app_info));
+ } else {
+ g_value_set_string (value, NULL);
+ }
+ break;
+ case PROP_MASK_SYSTEMD:
+ g_value_set_boolean (value, self->priv->mask_systemd);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gsm_autostart_app_dispose (GObject *object)
+{
+ GsmAutostartAppPrivate *priv;
+
+ priv = GSM_AUTOSTART_APP (object)->priv;
+
+ g_clear_pointer (&priv->startup_id, g_free);
+
+ if (priv->session_provides) {
+ g_slist_free_full (priv->session_provides, g_free);
+ priv->session_provides = NULL;
+ }
+
+ g_clear_pointer (&priv->condition_string, g_free);
+ g_clear_object (&priv->condition_settings);
+ g_clear_object (&priv->app_info);
+ g_clear_pointer (&priv->desktop_filename, g_free);
+ g_clear_pointer (&priv->desktop_id, g_free);
+
+ if (priv->child_watch_id > 0) {
+ g_source_remove (priv->child_watch_id);
+ priv->child_watch_id = 0;
+ }
+
+ if (priv->condition_monitor) {
+ g_file_monitor_cancel (priv->condition_monitor);
+ }
+
+ G_OBJECT_CLASS (gsm_autostart_app_parent_class)->dispose (object);
+}
+
+static gboolean
+is_running (GsmApp *app)
+{
+ GsmAutostartAppPrivate *priv;
+ gboolean is;
+
+ priv = GSM_AUTOSTART_APP (app)->priv;
+
+ /* is running if pid is still valid or
+ * or a client is connected
+ */
+ /* FIXME: check client */
+ is = (priv->pid != -1);
+
+ return is;
+}
+
+static gboolean
+is_conditionally_disabled (GsmApp *app)
+{
+ GsmAutostartAppPrivate *priv;
+ gboolean res;
+ gboolean disabled;
+ char *key;
+ guint kind;
+
+ priv = GSM_AUTOSTART_APP (app)->priv;
+
+ /* Check AutostartCondition */
+ if (priv->condition_string == NULL) {
+ return FALSE;
+ }
+
+ key = NULL;
+ res = parse_condition_string (priv->condition_string, &kind, &key);
+ if (! res) {
+ g_free (key);
+ return TRUE;
+ }
+
+ if (key == NULL) {
+ return TRUE;
+ }
+
+ if (kind == GSM_CONDITION_IF_EXISTS) {
+ char *file_path;
+
+ file_path = resolve_conditional_file_path (key);
+ disabled = !g_file_test (file_path, G_FILE_TEST_EXISTS);
+ g_free (file_path);
+ } else if (kind == GSM_CONDITION_UNLESS_EXISTS) {
+ char *file_path;
+
+ file_path = resolve_conditional_file_path (key);
+ disabled = g_file_test (file_path, G_FILE_TEST_EXISTS);
+ g_free (file_path);
+ } else if (kind == GSM_CONDITION_GSETTINGS &&
+ priv->condition_settings != NULL) {
+ char **elems;
+ elems = g_strsplit (key, " ", 2);
+ disabled = !g_settings_get_boolean (priv->condition_settings, elems[1]);
+ g_strfreev (elems);
+ } else if (kind == GSM_CONDITION_IF_SESSION) {
+ GsmManager *manager;
+ char *session_name;
+
+ /* get the singleton */
+ manager = gsm_manager_get ();
+
+ g_object_get (manager, "session-name", &session_name, NULL);
+ disabled = strcmp (session_name, key) != 0;
+ g_free (session_name);
+ } else if (kind == GSM_CONDITION_UNLESS_SESSION) {
+ GsmManager *manager;
+ char *session_name;
+
+ /* get the singleton */
+ manager = gsm_manager_get ();
+
+ g_object_get (manager, "session-name", &session_name, NULL);
+ disabled = strcmp (session_name, key) == 0;
+ g_free (session_name);
+ } else {
+ disabled = TRUE;
+ }
+
+ /* Set initial condition */
+ priv->condition = !disabled;
+
+ g_free (key);
+
+ return disabled;
+}
+
+static void
+app_exited (GPid pid,
+ int status,
+ GsmAutostartApp *app)
+{
+ g_debug ("GsmAutostartApp: (pid:%d) done (%s:%d)",
+ (int) pid,
+ WIFEXITED (status) ? "status"
+ : WIFSIGNALED (status) ? "signal"
+ : "unknown",
+ WIFEXITED (status) ? WEXITSTATUS (status)
+ : WIFSIGNALED (status) ? WTERMSIG (status)
+ : -1);
+
+ g_spawn_close_pid (app->priv->pid);
+ app->priv->pid = -1;
+ app->priv->child_watch_id = 0;
+
+ if (WIFEXITED (status)) {
+ gsm_app_exited (GSM_APP (app), WEXITSTATUS (status));
+ } else if (WIFSIGNALED (status)) {
+ gsm_app_died (GSM_APP (app), WTERMSIG (status));
+ }
+}
+
+static int
+_signal_pid (int pid,
+ int signal)
+{
+ int status;
+
+ /* perhaps block sigchld */
+ g_debug ("GsmAutostartApp: sending signal %d to process %d", signal, pid);
+ errno = 0;
+ status = kill (pid, signal);
+
+ if (status < 0) {
+ if (errno == ESRCH) {
+ g_warning ("Child process %d was already dead.",
+ (int)pid);
+ } else {
+ g_warning ("Couldn't kill child process %d: %s",
+ pid,
+ g_strerror (errno));
+ }
+ }
+
+ /* perhaps unblock sigchld */
+
+ return status;
+}
+
+static gboolean
+autostart_app_stop_spawn (GsmAutostartApp *app,
+ GError **error)
+{
+ int res;
+
+ if (app->priv->pid < 1) {
+ g_set_error (error,
+ GSM_APP_ERROR,
+ GSM_APP_ERROR_STOP,
+ "Not running");
+ return FALSE;
+ }
+
+ res = _signal_pid (app->priv->pid, SIGTERM);
+ if (res != 0) {
+ g_set_error (error,
+ GSM_APP_ERROR,
+ GSM_APP_ERROR_STOP,
+ "Unable to stop: %s",
+ g_strerror (errno));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+autostart_app_stop_activate (GsmAutostartApp *app,
+ GError **error)
+{
+ return TRUE;
+}
+
+static gboolean
+gsm_autostart_app_stop (GsmApp *app,
+ GError **error)
+{
+ GsmAutostartApp *aapp;
+ gboolean ret;
+
+ aapp = GSM_AUTOSTART_APP (app);
+
+ g_return_val_if_fail (aapp->priv->app_info != NULL, FALSE);
+
+ switch (aapp->priv->launch_type) {
+ case AUTOSTART_LAUNCH_SPAWN:
+ ret = autostart_app_stop_spawn (aapp, error);
+ break;
+ case AUTOSTART_LAUNCH_ACTIVATE:
+ ret = autostart_app_stop_activate (aapp, error);
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ return ret;
+}
+
+static void
+app_launched (GAppLaunchContext *ctx,
+ GAppInfo *appinfo,
+ GVariant *platform_data,
+ gpointer data)
+{
+ GsmAutostartApp *app = data;
+ gint pid;
+ gchar *sn_id;
+
+ pid = 0;
+ sn_id = NULL;
+
+ g_variant_lookup (platform_data, "pid", "i", &pid);
+ g_variant_lookup (platform_data, "startup-notification-id", "s", &sn_id);
+ app->priv->pid = pid;
+ app->priv->startup_id = sn_id;
+
+ /* We are not interested in the result. */
+ gnome_start_systemd_scope (app->priv->desktop_id,
+ pid,
+ NULL,
+ NULL,
+ NULL, NULL, NULL);
+}
+
+#ifdef ENABLE_SYSTEMD_JOURNAL
+static void
+on_child_setup (GsmAutostartApp *app)
+{
+ int standard_output, standard_error;
+
+ /* The FALSE means programs aren't expected to prefix each
+ * line with <n> prefix to specify priority.
+ */
+ standard_output = sd_journal_stream_fd (app->priv->desktop_id,
+ LOG_INFO,
+ FALSE);
+ standard_error = sd_journal_stream_fd (app->priv->desktop_id,
+ LOG_WARNING,
+ FALSE);
+
+ if (standard_output >= 0) {
+ dup2 (standard_output, STDOUT_FILENO);
+ close (standard_output);
+ }
+
+ if (standard_error >= 0) {
+ dup2 (standard_error, STDERR_FILENO);
+ close (standard_error);
+ }
+}
+#endif
+
+static gboolean
+autostart_app_start_spawn (GsmAutostartApp *app,
+ GError **error)
+{
+ gboolean success;
+ GError *local_error;
+ const char *startup_id;
+ const char * const *variable_blacklist;
+ const char * const *child_environment;
+ int i;
+ GAppLaunchContext *ctx;
+ GSpawnChildSetupFunc child_setup_func = NULL;
+ gpointer child_setup_data = NULL;
+ guint handler;
+
+ startup_id = gsm_app_peek_startup_id (GSM_APP (app));
+ g_assert (startup_id != NULL);
+
+ g_debug ("GsmAutostartApp: starting %s: command=%s startup-id=%s", app->priv->desktop_id, g_app_info_get_commandline (G_APP_INFO (app->priv->app_info)), startup_id);
+
+ g_free (app->priv->startup_id);
+ local_error = NULL;
+ ctx = g_app_launch_context_new ();
+
+ variable_blacklist = gsm_util_get_variable_blacklist ();
+ for (i = 0; variable_blacklist[i] != NULL; i++)
+ g_app_launch_context_unsetenv (ctx, variable_blacklist[i]);
+
+ child_environment = gsm_util_listenv ();
+ for (i = 0; child_environment[i] != NULL; i++) {
+ char **environment_tuple;
+ const char *key;
+ const char *value;
+
+ environment_tuple = g_strsplit (child_environment[i], "=", 2);
+ key = environment_tuple[0];
+ value = environment_tuple[1];
+
+ if (value != NULL)
+ g_app_launch_context_setenv (ctx, key, value);
+
+ g_strfreev (environment_tuple);
+ }
+
+ if (startup_id != NULL) {
+ g_app_launch_context_setenv (ctx, "DESKTOP_AUTOSTART_ID", startup_id);
+ }
+
+#ifdef ENABLE_SYSTEMD_JOURNAL
+ if (sd_booted () > 0) {
+ child_setup_func = (GSpawnChildSetupFunc) on_child_setup;
+ child_setup_data = app;
+ }
+#endif
+
+ handler = g_signal_connect (ctx, "launched", G_CALLBACK (app_launched), app);
+ success = g_desktop_app_info_launch_uris_as_manager (app->priv->app_info,
+ NULL,
+ ctx,
+ G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH,
+ child_setup_func, child_setup_data,
+ NULL, NULL,
+ &local_error);
+ g_signal_handler_disconnect (ctx, handler);
+
+ if (success) {
+ if (app->priv->pid > 0) {
+ g_debug ("GsmAutostartApp: started pid:%d", app->priv->pid);
+ app->priv->child_watch_id = g_child_watch_add (app->priv->pid,
+ (GChildWatchFunc)app_exited,
+ app);
+ }
+ } else {
+ g_set_error (error,
+ GSM_APP_ERROR,
+ GSM_APP_ERROR_START,
+ "Unable to start application: %s", local_error->message);
+ g_error_free (local_error);
+ }
+
+ return success;
+}
+
+static void
+start_notify (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GError *error;
+ GsmAutostartApp *app;
+
+ app = user_data;
+ error = NULL;
+
+ g_dbus_connection_call_finish (G_DBUS_CONNECTION (source), result, &error);
+
+ if (error != NULL) {
+ g_warning ("GsmAutostartApp: Error starting application: %s", error->message);
+ g_error_free (error);
+ } else {
+ g_debug ("GsmAutostartApp: Started application %s", app->priv->desktop_id);
+ }
+}
+
+static gboolean
+autostart_app_start_activate (GsmAutostartApp *app,
+ GError **error)
+{
+ const char *name;
+ char *path;
+ char *arguments;
+ GDBusConnection *bus;
+ GError *local_error;
+
+ local_error = NULL;
+ bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &local_error);
+ if (local_error != NULL) {
+ g_warning ("error getting session bus: %s", local_error->message);
+ g_propagate_error (error, local_error);
+ return FALSE;
+ }
+
+ name = gsm_app_peek_startup_id (GSM_APP (app));
+ g_assert (name != NULL);
+
+ path = g_desktop_app_info_get_string (app->priv->app_info,
+ GSM_AUTOSTART_APP_DBUS_PATH_KEY);
+ if (path == NULL) {
+ /* just pick one? */
+ path = g_strdup ("/");
+ }
+
+ arguments = g_desktop_app_info_get_string (app->priv->app_info,
+ GSM_AUTOSTART_APP_DBUS_ARGS_KEY);
+
+ g_dbus_connection_call (bus,
+ name,
+ path,
+ GSM_SESSION_CLIENT_DBUS_INTERFACE,
+ "Start",
+ g_variant_new ("(s)", arguments),
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ -1, NULL,
+ start_notify, app);
+ g_object_unref (bus);
+
+ return TRUE;
+}
+
+static gboolean
+gsm_autostart_app_start (GsmApp *app,
+ GError **error)
+{
+ GsmAutostartApp *aapp;
+ gboolean ret;
+
+ aapp = GSM_AUTOSTART_APP (app);
+
+ g_return_val_if_fail (aapp->priv->app_info != NULL, FALSE);
+
+ switch (aapp->priv->launch_type) {
+ case AUTOSTART_LAUNCH_SPAWN:
+ ret = autostart_app_start_spawn (aapp, error);
+ break;
+ case AUTOSTART_LAUNCH_ACTIVATE:
+ ret = autostart_app_start_activate (aapp, error);
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ return ret;
+}
+
+static gboolean
+gsm_autostart_app_restart (GsmApp *app,
+ GError **error)
+{
+ GError *local_error;
+ gboolean res;
+
+ /* ignore stop errors - it is fine if it is already stopped */
+ local_error = NULL;
+ res = gsm_app_stop (app, &local_error);
+ if (! res) {
+ g_debug ("GsmAutostartApp: Couldn't stop app: %s", local_error->message);
+ g_error_free (local_error);
+ }
+
+ res = gsm_app_start (app, &local_error);
+ if (! res) {
+ g_propagate_error (error, local_error);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+gsm_autostart_app_provides (GsmApp *app,
+ const char *service)
+{
+ gchar *provides_str;
+ char **provides;
+ gsize i;
+ GSList *l;
+ GsmAutostartApp *aapp;
+
+ g_return_val_if_fail (GSM_IS_APP (app), FALSE);
+
+ aapp = GSM_AUTOSTART_APP (app);
+
+ if (aapp->priv->app_info == NULL) {
+ return FALSE;
+ }
+
+ for (l = aapp->priv->session_provides; l != NULL; l = l->next) {
+ if (!strcmp (l->data, service))
+ return TRUE;
+ }
+
+ provides_str = g_desktop_app_info_get_string (aapp->priv->app_info,
+ GSM_AUTOSTART_APP_PROVIDES_KEY);
+ if (!provides_str) {
+ return FALSE;
+ }
+ provides = g_strsplit (provides_str, ";", -1);
+ g_free (provides_str);
+
+ for (i = 0; provides[i]; i++) {
+ if (!strcmp (provides[i], service)) {
+ g_strfreev (provides);
+ return TRUE;
+ }
+ }
+
+ g_strfreev (provides);
+
+ return FALSE;
+}
+
+static char **
+gsm_autostart_app_get_provides (GsmApp *app)
+{
+ GsmAutostartApp *aapp;
+ gchar *provides_str;
+ char **provides;
+ gsize provides_len;
+ char **result;
+ gsize result_len;
+ int i;
+ GSList *l;
+
+ g_return_val_if_fail (GSM_IS_APP (app), NULL);
+
+ aapp = GSM_AUTOSTART_APP (app);
+
+ if (aapp->priv->app_info == NULL) {
+ return NULL;
+ }
+
+ provides_str = g_desktop_app_info_get_string (aapp->priv->app_info,
+ GSM_AUTOSTART_APP_PROVIDES_KEY);
+
+ if (provides_str == NULL) {
+ return NULL;
+ }
+
+ provides = g_strsplit (provides_str, ";", -1);
+ provides_len = g_strv_length (provides);
+ g_free (provides_str);
+
+ if (!aapp->priv->session_provides) {
+ return provides;
+ }
+
+ result_len = provides_len + g_slist_length (aapp->priv->session_provides);
+ result = g_new (char *, result_len + 1); /* including last NULL */
+
+ for (i = 0; provides[i] != NULL; i++)
+ result[i] = provides[i];
+ g_free (provides);
+
+ for (l = aapp->priv->session_provides; l != NULL; l = l->next, i++)
+ result[i] = g_strdup (l->data);
+
+ result[i] = NULL;
+
+ g_assert (i == result_len);
+
+ return result;
+}
+
+void
+gsm_autostart_app_add_provides (GsmAutostartApp *aapp,
+ const char *provides)
+{
+ g_return_if_fail (GSM_IS_AUTOSTART_APP (aapp));
+
+ aapp->priv->session_provides = g_slist_prepend (aapp->priv->session_provides,
+ g_strdup (provides));
+}
+
+static gboolean
+gsm_autostart_app_has_autostart_condition (GsmApp *app,
+ const char *condition)
+{
+ GsmAutostartApp *aapp;
+
+ g_return_val_if_fail (GSM_IS_APP (app), FALSE);
+ g_return_val_if_fail (condition != NULL, FALSE);
+
+ aapp = GSM_AUTOSTART_APP (app);
+
+ if (aapp->priv->condition_string == NULL) {
+ return FALSE;
+ }
+
+ if (strcmp (aapp->priv->condition_string, condition) == 0) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+gsm_autostart_app_get_autorestart (GsmApp *app)
+{
+ gboolean res;
+ gboolean autorestart;
+
+ if (GSM_AUTOSTART_APP (app)->priv->app_info == NULL) {
+ return FALSE;
+ }
+
+ autorestart = FALSE;
+
+ res = g_desktop_app_info_has_key (GSM_AUTOSTART_APP (app)->priv->app_info,
+ GSM_AUTOSTART_APP_AUTORESTART_KEY);
+ if (res) {
+ autorestart = g_desktop_app_info_get_boolean (GSM_AUTOSTART_APP (app)->priv->app_info,
+ GSM_AUTOSTART_APP_AUTORESTART_KEY);
+ }
+
+ return autorestart;
+}
+
+static const char *
+gsm_autostart_app_get_app_id (GsmApp *app)
+{
+ if (GSM_AUTOSTART_APP (app)->priv->app_info == NULL) {
+ return NULL;
+ }
+
+ return g_app_info_get_id (G_APP_INFO (GSM_AUTOSTART_APP (app)->priv->app_info));
+}
+
+static gboolean
+gsm_autostart_app_initable_init (GInitable *initable,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GsmAutostartApp *app = GSM_AUTOSTART_APP (initable);
+
+ g_assert (app->priv->desktop_filename != NULL);
+ app->priv->app_info = g_desktop_app_info_new_from_filename (app->priv->desktop_filename);
+ if (app->priv->app_info == NULL) {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "Could not parse desktop file %s or it references a not found TryExec binary", app->priv->desktop_id);
+ return FALSE;
+ }
+
+ load_desktop_file (app);
+
+ return TRUE;
+}
+
+static gboolean
+gsm_autostart_app_save_to_keyfile (GsmApp *base_app,
+ GKeyFile *keyfile,
+ GError **error)
+{
+ GsmAutostartApp *app = GSM_AUTOSTART_APP (base_app);
+ char **provides = NULL;
+ char *dbus_name;
+ char *phase;
+ gboolean res;
+
+ provides = gsm_app_get_provides (base_app);
+ if (provides != NULL) {
+ g_key_file_set_string_list (keyfile,
+ G_KEY_FILE_DESKTOP_GROUP,
+ GSM_AUTOSTART_APP_PROVIDES_KEY,
+ (const char * const *)
+ provides,
+ g_strv_length (provides));
+ g_strfreev (provides);
+ }
+
+ phase = g_desktop_app_info_get_string (app->priv->app_info,
+ GSM_AUTOSTART_APP_PHASE_KEY);
+ if (phase != NULL) {
+ g_key_file_set_string (keyfile,
+ G_KEY_FILE_DESKTOP_GROUP,
+ GSM_AUTOSTART_APP_PHASE_KEY,
+ phase);
+ g_free (phase);
+ }
+
+ dbus_name = g_desktop_app_info_get_string (app->priv->app_info,
+ GSM_AUTOSTART_APP_DBUS_NAME_KEY);
+ if (dbus_name != NULL) {
+ g_key_file_set_string (keyfile,
+ G_KEY_FILE_DESKTOP_GROUP,
+ GSM_AUTOSTART_APP_DBUS_NAME_KEY,
+ dbus_name);
+ g_free (dbus_name);
+ }
+
+ res = g_desktop_app_info_has_key (app->priv->app_info,
+ GSM_AUTOSTART_APP_AUTORESTART_KEY);
+ if (res) {
+ g_key_file_set_boolean (keyfile,
+ G_KEY_FILE_DESKTOP_GROUP,
+ GSM_AUTOSTART_APP_AUTORESTART_KEY,
+ g_desktop_app_info_get_boolean (app->priv->app_info,
+ GSM_AUTOSTART_APP_AUTORESTART_KEY));
+ }
+
+ res = g_desktop_app_info_has_key (app->priv->app_info,
+ GSM_AUTOSTART_APP_AUTORESTART_KEY);
+ if (res) {
+ char *autostart_condition;
+
+ autostart_condition = g_desktop_app_info_get_string (app->priv->app_info, "AutostartCondition");
+
+ g_key_file_set_string (keyfile,
+ G_KEY_FILE_DESKTOP_GROUP,
+ "AutostartCondition",
+ autostart_condition);
+ g_free (autostart_condition);
+ }
+
+ return TRUE;
+}
+
+static void
+gsm_autostart_app_initable_iface_init (GInitableIface *iface)
+{
+ iface->init = gsm_autostart_app_initable_init;
+}
+
+static void
+gsm_autostart_app_class_init (GsmAutostartAppClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GsmAppClass *app_class = GSM_APP_CLASS (klass);
+
+ object_class->set_property = gsm_autostart_app_set_property;
+ object_class->get_property = gsm_autostart_app_get_property;
+ object_class->dispose = gsm_autostart_app_dispose;
+
+ app_class->impl_is_disabled = is_disabled;
+ app_class->impl_is_conditionally_disabled = is_conditionally_disabled;
+ app_class->impl_is_running = is_running;
+ app_class->impl_start = gsm_autostart_app_start;
+ app_class->impl_restart = gsm_autostart_app_restart;
+ app_class->impl_stop = gsm_autostart_app_stop;
+ app_class->impl_provides = gsm_autostart_app_provides;
+ app_class->impl_get_provides = gsm_autostart_app_get_provides;
+ app_class->impl_has_autostart_condition = gsm_autostart_app_has_autostart_condition;
+ app_class->impl_get_app_id = gsm_autostart_app_get_app_id;
+ app_class->impl_get_autorestart = gsm_autostart_app_get_autorestart;
+ app_class->impl_save_to_keyfile = gsm_autostart_app_save_to_keyfile;
+
+ g_object_class_install_property (object_class,
+ PROP_DESKTOP_FILENAME,
+ g_param_spec_string ("desktop-filename",
+ "Desktop filename",
+ "Freedesktop .desktop file",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_MASK_SYSTEMD,
+ g_param_spec_boolean ("mask-systemd",
+ "Mask if systemd started",
+ "Mask if GNOME systemd flag is set in desktop file",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ signals[CONDITION_CHANGED] =
+ g_signal_new ("condition-changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsmAutostartAppClass, condition_changed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE,
+ 1,
+ G_TYPE_BOOLEAN);
+
+ g_type_class_add_private (object_class, sizeof (GsmAutostartAppPrivate));
+}
+
+GsmApp *
+gsm_autostart_app_new (const char *desktop_file,
+ gboolean mask_systemd,
+ GError **error)
+{
+ return (GsmApp*) g_initable_new (GSM_TYPE_AUTOSTART_APP, NULL, error,
+ "desktop-filename", desktop_file,
+ "mask-systemd", mask_systemd,
+ NULL);
+}
diff --git a/gnome-session/gsm-autostart-app.h b/gnome-session/gsm-autostart-app.h
new file mode 100644
index 0000000..17faf75
--- /dev/null
+++ b/gnome-session/gsm-autostart-app.h
@@ -0,0 +1,78 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Novell, Inc.
+ * Copyright (C) 2008 Red Hat, 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 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GSM_AUTOSTART_APP_H__
+#define __GSM_AUTOSTART_APP_H__
+
+#include "gsm-app.h"
+
+#include <X11/SM/SMlib.h>
+
+G_BEGIN_DECLS
+
+#define GSM_TYPE_AUTOSTART_APP (gsm_autostart_app_get_type ())
+#define GSM_AUTOSTART_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSM_TYPE_AUTOSTART_APP, GsmAutostartApp))
+#define GSM_AUTOSTART_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSM_TYPE_AUTOSTART_APP, GsmAutostartAppClass))
+#define GSM_IS_AUTOSTART_APP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSM_TYPE_AUTOSTART_APP))
+#define GSM_IS_AUTOSTART_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSM_TYPE_AUTOSTART_APP))
+#define GSM_AUTOSTART_APP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSM_TYPE_AUTOSTART_APP, GsmAutostartAppClass))
+
+typedef struct _GsmAutostartApp GsmAutostartApp;
+typedef struct _GsmAutostartAppClass GsmAutostartAppClass;
+typedef struct _GsmAutostartAppPrivate GsmAutostartAppPrivate;
+
+struct _GsmAutostartApp
+{
+ GsmApp parent;
+
+ GsmAutostartAppPrivate *priv;
+};
+
+struct _GsmAutostartAppClass
+{
+ GsmAppClass parent_class;
+
+ /* signals */
+ void (*condition_changed) (GsmApp *app,
+ gboolean condition);
+};
+
+GType gsm_autostart_app_get_type (void) G_GNUC_CONST;
+
+GsmApp *gsm_autostart_app_new (const char *desktop_file,
+ gboolean mask_systemd,
+ GError **error);
+
+void gsm_autostart_app_add_provides (GsmAutostartApp *aapp,
+ const char *provides);
+
+#define GSM_AUTOSTART_APP_SYSTEMD_KEY "X-GNOME-HiddenUnderSystemd"
+#define GSM_AUTOSTART_APP_ENABLED_KEY "X-GNOME-Autostart-enabled"
+#define GSM_AUTOSTART_APP_PHASE_KEY "X-GNOME-Autostart-Phase"
+#define GSM_AUTOSTART_APP_PROVIDES_KEY "X-GNOME-Provides"
+#define GSM_AUTOSTART_APP_STARTUP_ID_KEY "X-GNOME-Autostart-startup-id"
+#define GSM_AUTOSTART_APP_AUTORESTART_KEY "X-GNOME-AutoRestart"
+#define GSM_AUTOSTART_APP_DBUS_NAME_KEY "X-GNOME-DBus-Name"
+#define GSM_AUTOSTART_APP_DBUS_PATH_KEY "X-GNOME-DBus-Path"
+#define GSM_AUTOSTART_APP_DBUS_ARGS_KEY "X-GNOME-DBus-Start-Arguments"
+#define GSM_AUTOSTART_APP_DISCARD_KEY "X-GNOME-Autostart-discard-exec"
+
+G_END_DECLS
+
+#endif /* __GSM_AUTOSTART_APP_H__ */
diff --git a/gnome-session/gsm-client.c b/gnome-session/gsm-client.c
new file mode 100644
index 0000000..6828ad4
--- /dev/null
+++ b/gnome-session/gsm-client.c
@@ -0,0 +1,563 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Novell, Inc.
+ * Copyright (C) 2008 Red Hat, 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 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include "gsm-client.h"
+#include "org.gnome.SessionManager.Client.h"
+
+static guint32 client_serial = 1;
+
+#define GSM_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSM_TYPE_CLIENT, GsmClientPrivate))
+
+struct GsmClientPrivate
+{
+ char *id;
+ char *startup_id;
+ char *app_id;
+ guint status;
+ GsmExportedClient *skeleton;
+ GDBusConnection *connection;
+};
+
+enum {
+ PROP_0,
+ PROP_ID,
+ PROP_STARTUP_ID,
+ PROP_APP_ID,
+ PROP_STATUS
+};
+
+enum {
+ DISCONNECTED,
+ END_SESSION_RESPONSE,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_ABSTRACT_TYPE (GsmClient, gsm_client, G_TYPE_OBJECT)
+
+#define GSM_CLIENT_DBUS_IFACE "org.gnome.SessionManager.Client"
+
+static const GDBusErrorEntry gsm_client_error_entries[] = {
+ { GSM_CLIENT_ERROR_GENERAL, GSM_CLIENT_DBUS_IFACE ".GeneralError" },
+ { GSM_CLIENT_ERROR_NOT_REGISTERED, GSM_CLIENT_DBUS_IFACE ".NotRegistered" }
+};
+
+GQuark
+gsm_client_error_quark (void)
+{
+ static volatile gsize quark_volatile = 0;
+
+ g_dbus_error_register_error_domain ("gsm_client_error",
+ &quark_volatile,
+ gsm_client_error_entries,
+ G_N_ELEMENTS (gsm_client_error_entries));
+ return quark_volatile;
+}
+
+static guint32
+get_next_client_serial (void)
+{
+ guint32 serial;
+
+ serial = client_serial++;
+
+ if ((gint32)client_serial < 0) {
+ client_serial = 1;
+ }
+
+ return serial;
+}
+
+static gboolean
+gsm_client_get_startup_id (GsmExportedClient *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmClient *client)
+{
+ gsm_exported_client_complete_get_startup_id (skeleton, invocation, client->priv->startup_id);
+ return TRUE;
+}
+
+static gboolean
+gsm_client_get_app_id (GsmExportedClient *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmClient *client)
+{
+ gsm_exported_client_complete_get_app_id (skeleton, invocation, client->priv->app_id);
+ return TRUE;
+}
+
+static gboolean
+gsm_client_get_restart_style_hint (GsmExportedClient *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmClient *client)
+{
+ guint hint;
+
+ hint = GSM_CLIENT_GET_CLASS (client)->impl_get_restart_style_hint (client);
+ gsm_exported_client_complete_get_restart_style_hint (skeleton, invocation, hint);
+ return TRUE;
+}
+
+static gboolean
+gsm_client_get_status (GsmExportedClient *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmClient *client)
+{
+ gsm_exported_client_complete_get_status (skeleton, invocation, client->priv->status);
+ return TRUE;
+}
+
+static gboolean
+gsm_client_get_unix_process_id (GsmExportedClient *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmClient *client)
+{
+ guint pid;
+
+ pid = GSM_CLIENT_GET_CLASS (client)->impl_get_unix_process_id (client);
+ gsm_exported_client_complete_get_unix_process_id (skeleton, invocation, pid);
+ return TRUE;
+}
+
+static gboolean
+gsm_client_stop_dbus (GsmExportedClient *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmClient *client)
+{
+ GError *error = NULL;
+ gsm_client_stop (client, &error);
+
+ if (error != NULL) {
+ g_dbus_method_invocation_take_error (invocation, error);
+ } else {
+ gsm_exported_client_complete_stop (skeleton, invocation);
+ }
+
+ return TRUE;
+}
+
+static gboolean
+register_client (GsmClient *client)
+{
+ GError *error = NULL;
+ GsmExportedClient *skeleton;
+
+ client->priv->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+ if (client->priv->connection == NULL) {
+ g_critical ("error getting session bus: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ skeleton = gsm_exported_client_skeleton_new ();
+ client->priv->skeleton = skeleton;
+ g_debug ("exporting client to object path: %s", client->priv->id);
+ g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (skeleton),
+ client->priv->connection,
+ client->priv->id, &error);
+
+ if (error != NULL) {
+ g_critical ("error exporting client on session bus: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ g_signal_connect (skeleton, "handle-get-app-id",
+ G_CALLBACK (gsm_client_get_app_id), client);
+ g_signal_connect (skeleton, "handle-get-restart-style-hint",
+ G_CALLBACK (gsm_client_get_restart_style_hint), client);
+ g_signal_connect (skeleton, "handle-get-startup-id",
+ G_CALLBACK (gsm_client_get_startup_id), client);
+ g_signal_connect (skeleton, "handle-get-status",
+ G_CALLBACK (gsm_client_get_status), client);
+ g_signal_connect (skeleton, "handle-get-unix-process-id",
+ G_CALLBACK (gsm_client_get_unix_process_id), client);
+ g_signal_connect (skeleton, "handle-stop",
+ G_CALLBACK (gsm_client_stop_dbus), client);
+
+ return TRUE;
+}
+
+static GObject *
+gsm_client_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_properties)
+{
+ GsmClient *client;
+ gboolean res;
+
+ client = GSM_CLIENT (G_OBJECT_CLASS (gsm_client_parent_class)->constructor (type,
+ n_construct_properties,
+ construct_properties));
+
+ g_free (client->priv->id);
+ client->priv->id = g_strdup_printf ("/org/gnome/SessionManager/Client%u", get_next_client_serial ());
+
+ res = register_client (client);
+ if (! res) {
+ g_warning ("Unable to register client with session bus");
+ }
+
+ return G_OBJECT (client);
+}
+
+static void
+gsm_client_init (GsmClient *client)
+{
+ client->priv = GSM_CLIENT_GET_PRIVATE (client);
+}
+
+static void
+gsm_client_finalize (GObject *object)
+{
+ GsmClient *client;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GSM_IS_CLIENT (object));
+
+ client = GSM_CLIENT (object);
+
+ g_return_if_fail (client->priv != NULL);
+
+ g_free (client->priv->id);
+ g_free (client->priv->startup_id);
+ g_free (client->priv->app_id);
+
+ if (client->priv->skeleton != NULL) {
+ g_dbus_interface_skeleton_unexport_from_connection (G_DBUS_INTERFACE_SKELETON (client->priv->skeleton),
+ client->priv->connection);
+ g_clear_object (&client->priv->skeleton);
+ }
+
+ g_clear_object (&client->priv->connection);
+
+ G_OBJECT_CLASS (gsm_client_parent_class)->finalize (object);
+}
+
+void
+gsm_client_set_status (GsmClient *client,
+ guint status)
+{
+ g_return_if_fail (GSM_IS_CLIENT (client));
+ if (client->priv->status != status) {
+ client->priv->status = status;
+ g_object_notify (G_OBJECT (client), "status");
+ }
+}
+
+static void
+gsm_client_set_startup_id (GsmClient *client,
+ const char *startup_id)
+{
+ g_return_if_fail (GSM_IS_CLIENT (client));
+
+ g_free (client->priv->startup_id);
+
+ if (startup_id != NULL) {
+ client->priv->startup_id = g_strdup (startup_id);
+ } else {
+ client->priv->startup_id = g_strdup ("");
+ }
+ g_object_notify (G_OBJECT (client), "startup-id");
+}
+
+void
+gsm_client_set_app_id (GsmClient *client,
+ const char *app_id)
+{
+ g_return_if_fail (GSM_IS_CLIENT (client));
+
+ g_free (client->priv->app_id);
+
+ if (app_id != NULL) {
+ client->priv->app_id = g_strdup (app_id);
+ } else {
+ client->priv->app_id = g_strdup ("");
+ }
+ g_object_notify (G_OBJECT (client), "app-id");
+}
+
+static void
+gsm_client_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GsmClient *self;
+
+ self = GSM_CLIENT (object);
+
+ switch (prop_id) {
+ case PROP_STARTUP_ID:
+ gsm_client_set_startup_id (self, g_value_get_string (value));
+ break;
+ case PROP_APP_ID:
+ gsm_client_set_app_id (self, g_value_get_string (value));
+ break;
+ case PROP_STATUS:
+ gsm_client_set_status (self, g_value_get_uint (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gsm_client_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GsmClient *self;
+
+ self = GSM_CLIENT (object);
+
+ switch (prop_id) {
+ case PROP_STARTUP_ID:
+ g_value_set_string (value, self->priv->startup_id);
+ break;
+ case PROP_APP_ID:
+ g_value_set_string (value, self->priv->app_id);
+ break;
+ case PROP_STATUS:
+ g_value_set_uint (value, self->priv->status);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static gboolean
+default_stop (GsmClient *client,
+ GError **error)
+{
+ g_return_val_if_fail (GSM_IS_CLIENT (client), FALSE);
+
+ g_warning ("Stop not implemented");
+
+ return TRUE;
+}
+
+static void
+gsm_client_dispose (GObject *object)
+{
+ GsmClient *client;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GSM_IS_CLIENT (object));
+
+ client = GSM_CLIENT (object);
+
+ g_debug ("GsmClient: disposing %s", client->priv->id);
+
+ G_OBJECT_CLASS (gsm_client_parent_class)->dispose (object);
+}
+
+static void
+gsm_client_class_init (GsmClientClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->get_property = gsm_client_get_property;
+ object_class->set_property = gsm_client_set_property;
+ object_class->constructor = gsm_client_constructor;
+ object_class->finalize = gsm_client_finalize;
+ object_class->dispose = gsm_client_dispose;
+
+ klass->impl_stop = default_stop;
+
+ signals[DISCONNECTED] =
+ g_signal_new ("disconnected",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsmClientClass, disconnected),
+ NULL, NULL, NULL,
+ G_TYPE_NONE,
+ 0);
+ signals[END_SESSION_RESPONSE] =
+ g_signal_new ("end-session-response",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsmClientClass, end_session_response),
+ NULL, NULL, NULL,
+ G_TYPE_NONE,
+ 4, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING);
+
+ g_object_class_install_property (object_class,
+ PROP_STARTUP_ID,
+ g_param_spec_string ("startup-id",
+ "startup-id",
+ "startup-id",
+ "",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_APP_ID,
+ g_param_spec_string ("app-id",
+ "app-id",
+ "app-id",
+ "",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_STATUS,
+ g_param_spec_uint ("status",
+ "status",
+ "status",
+ 0,
+ G_MAXINT,
+ GSM_CLIENT_UNREGISTERED,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ g_type_class_add_private (klass, sizeof (GsmClientPrivate));
+}
+
+const char *
+gsm_client_peek_id (GsmClient *client)
+{
+ g_return_val_if_fail (GSM_IS_CLIENT (client), NULL);
+
+ return client->priv->id;
+}
+
+/**
+ * gsm_client_peek_app_id:
+ * @client: a #GsmClient.
+ *
+ * Note that the application ID might not be known; this happens when for XSMP
+ * clients that we did not start ourselves, for instance.
+ *
+ * Returns: the application ID of the client, or %NULL if no such ID is
+ * known. The string is owned by @client.
+ **/
+const char *
+gsm_client_peek_app_id (GsmClient *client)
+{
+ g_return_val_if_fail (GSM_IS_CLIENT (client), NULL);
+
+ return client->priv->app_id;
+}
+
+const char *
+gsm_client_peek_startup_id (GsmClient *client)
+{
+ g_return_val_if_fail (GSM_IS_CLIENT (client), NULL);
+
+ return client->priv->startup_id;
+}
+
+guint
+gsm_client_peek_status (GsmClient *client)
+{
+ g_return_val_if_fail (GSM_IS_CLIENT (client), GSM_CLIENT_UNREGISTERED);
+
+ return client->priv->status;
+}
+
+guint
+gsm_client_peek_restart_style_hint (GsmClient *client)
+{
+ g_return_val_if_fail (GSM_IS_CLIENT (client), GSM_CLIENT_RESTART_NEVER);
+
+ return GSM_CLIENT_GET_CLASS (client)->impl_get_restart_style_hint (client);
+}
+
+/**
+ * gsm_client_get_app_name:
+ * @client: a #GsmClient.
+ *
+ * Returns: a copy of the application name of the client, or %NULL if no such
+ * name is known.
+ **/
+char *
+gsm_client_get_app_name (GsmClient *client)
+{
+ g_return_val_if_fail (GSM_IS_CLIENT (client), NULL);
+
+ return GSM_CLIENT_GET_CLASS (client)->impl_get_app_name (client);
+}
+
+gboolean
+gsm_client_cancel_end_session (GsmClient *client,
+ GError **error)
+{
+ g_return_val_if_fail (GSM_IS_CLIENT (client), FALSE);
+
+ return GSM_CLIENT_GET_CLASS (client)->impl_cancel_end_session (client, error);
+}
+
+
+gboolean
+gsm_client_query_end_session (GsmClient *client,
+ GsmClientEndSessionFlag flags,
+ GError **error)
+{
+ g_return_val_if_fail (GSM_IS_CLIENT (client), FALSE);
+
+ return GSM_CLIENT_GET_CLASS (client)->impl_query_end_session (client, flags, error);
+}
+
+gboolean
+gsm_client_end_session (GsmClient *client,
+ GsmClientEndSessionFlag flags,
+ GError **error)
+{
+ g_return_val_if_fail (GSM_IS_CLIENT (client), FALSE);
+
+ return GSM_CLIENT_GET_CLASS (client)->impl_end_session (client, flags, error);
+}
+
+gboolean
+gsm_client_stop (GsmClient *client,
+ GError **error)
+{
+ g_return_val_if_fail (GSM_IS_CLIENT (client), FALSE);
+
+ return GSM_CLIENT_GET_CLASS (client)->impl_stop (client, error);
+}
+
+void
+gsm_client_disconnected (GsmClient *client)
+{
+ g_signal_emit (client, signals[DISCONNECTED], 0);
+}
+
+GKeyFile *
+gsm_client_save (GsmClient *client,
+ GsmApp *app,
+ GError **error)
+{
+ g_return_val_if_fail (GSM_IS_CLIENT (client), FALSE);
+
+ return GSM_CLIENT_GET_CLASS (client)->impl_save (client, app, error);
+}
+
+void
+gsm_client_end_session_response (GsmClient *client,
+ gboolean is_ok,
+ gboolean do_last,
+ gboolean cancel,
+ const char *reason)
+{
+ g_signal_emit (client, signals[END_SESSION_RESPONSE], 0,
+ is_ok, do_last, cancel, reason);
+}
diff --git a/gnome-session/gsm-client.h b/gnome-session/gsm-client.h
new file mode 100644
index 0000000..78cb15d
--- /dev/null
+++ b/gnome-session/gsm-client.h
@@ -0,0 +1,154 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 Novell, Inc.
+ * Copyright (C) 2008 Red Hat, 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 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GSM_CLIENT_H__
+#define __GSM_CLIENT_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <sys/types.h>
+
+G_BEGIN_DECLS
+
+#define GSM_TYPE_CLIENT (gsm_client_get_type ())
+#define GSM_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSM_TYPE_CLIENT, GsmClient))
+#define GSM_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSM_TYPE_CLIENT, GsmClientClass))
+#define GSM_IS_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSM_TYPE_CLIENT))
+#define GSM_IS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSM_TYPE_CLIENT))
+#define GSM_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSM_TYPE_CLIENT, GsmClientClass))
+
+typedef struct _GsmApp GsmApp;
+typedef struct _GsmClient GsmClient;
+typedef struct _GsmClientClass GsmClientClass;
+
+typedef struct GsmClientPrivate GsmClientPrivate;
+
+typedef enum {
+ GSM_CLIENT_UNREGISTERED = 0,
+ GSM_CLIENT_REGISTERED,
+ GSM_CLIENT_FINISHED,
+ GSM_CLIENT_FAILED
+} GsmClientStatus;
+
+typedef enum {
+ GSM_CLIENT_RESTART_NEVER = 0,
+ GSM_CLIENT_RESTART_IF_RUNNING,
+ GSM_CLIENT_RESTART_ANYWAY,
+ GSM_CLIENT_RESTART_IMMEDIATELY
+} GsmClientRestartStyle;
+
+typedef enum {
+ GSM_CLIENT_END_SESSION_FLAG_FORCEFUL = 1 << 0,
+ GSM_CLIENT_END_SESSION_FLAG_SAVE = 1 << 1,
+ GSM_CLIENT_END_SESSION_FLAG_LAST = 1 << 2
+} GsmClientEndSessionFlag;
+
+struct _GsmClient
+{
+ GObject parent;
+ GsmClientPrivate *priv;
+};
+
+struct _GsmClientClass
+{
+ GObjectClass parent_class;
+
+ /* signals */
+ void (*disconnected) (GsmClient *client);
+ void (*end_session_response) (GsmClient *client,
+ gboolean ok,
+ gboolean do_last,
+ gboolean cancel,
+ const char *reason);
+
+ /* virtual methods */
+ char * (*impl_get_app_name) (GsmClient *client);
+ GsmClientRestartStyle (*impl_get_restart_style_hint) (GsmClient *client);
+ guint (*impl_get_unix_process_id) (GsmClient *client);
+ gboolean (*impl_query_end_session) (GsmClient *client,
+ GsmClientEndSessionFlag flags,
+ GError **error);
+ gboolean (*impl_end_session) (GsmClient *client,
+ GsmClientEndSessionFlag flags,
+ GError **error);
+ gboolean (*impl_cancel_end_session) (GsmClient *client,
+ GError **error);
+ gboolean (*impl_stop) (GsmClient *client,
+ GError **error);
+ GKeyFile * (*impl_save) (GsmClient *client,
+ GsmApp *app,
+ GError **error);
+};
+
+typedef enum
+{
+ GSM_CLIENT_ERROR_GENERAL = 0,
+ GSM_CLIENT_ERROR_NOT_REGISTERED,
+ GSM_CLIENT_NUM_ERRORS
+} GsmClientError;
+
+#define GSM_CLIENT_ERROR gsm_client_error_quark ()
+GQuark gsm_client_error_quark (void);
+
+GType gsm_client_get_type (void) G_GNUC_CONST;
+
+const char *gsm_client_peek_id (GsmClient *client);
+
+
+const char * gsm_client_peek_startup_id (GsmClient *client);
+const char * gsm_client_peek_app_id (GsmClient *client);
+guint gsm_client_peek_restart_style_hint (GsmClient *client);
+guint gsm_client_peek_status (GsmClient *client);
+
+
+char *gsm_client_get_app_name (GsmClient *client);
+void gsm_client_set_app_id (GsmClient *client,
+ const char *app_id);
+void gsm_client_set_status (GsmClient *client,
+ guint status);
+
+gboolean gsm_client_end_session (GsmClient *client,
+ guint flags,
+ GError **error);
+gboolean gsm_client_query_end_session (GsmClient *client,
+ guint flags,
+ GError **error);
+gboolean gsm_client_cancel_end_session (GsmClient *client,
+ GError **error);
+
+void gsm_client_disconnected (GsmClient *client);
+
+GKeyFile *gsm_client_save (GsmClient *client,
+ GsmApp *app,
+ GError **error);
+
+gboolean gsm_client_stop (GsmClient *client,
+ GError **error);
+
+/* private */
+
+void gsm_client_end_session_response (GsmClient *client,
+ gboolean is_ok,
+ gboolean do_last,
+ gboolean cancel,
+ const char *reason);
+
+G_END_DECLS
+
+#endif /* __GSM_CLIENT_H__ */
diff --git a/gnome-session/gsm-consolekit.c b/gnome-session/gsm-consolekit.c
new file mode 100644
index 0000000..44ee25f
--- /dev/null
+++ b/gnome-session/gsm-consolekit.c
@@ -0,0 +1,978 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Jon McCann <jmccann@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <pwd.h>
+
+#include <glib.h>
+#include <glib-object.h>
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+#include <gio/gunixfdlist.h>
+
+#include "gsm-system.h"
+#include "gsm-consolekit.h"
+
+#define CK_NAME "org.freedesktop.ConsoleKit"
+
+#define CK_MANAGER_PATH "/org/freedesktop/ConsoleKit/Manager"
+#define CK_MANAGER_INTERFACE CK_NAME ".Manager"
+#define CK_SEAT_INTERFACE CK_NAME ".Seat"
+#define CK_SESSION_INTERFACE CK_NAME ".Session"
+
+
+struct _GsmConsolekitPrivate
+{
+ GDBusProxy *ck_proxy;
+ GDBusProxy *ck_session_proxy;
+
+ char *session_id;
+ gchar *session_path;
+
+ GSList *inhibitors;
+ gint inhibit_fd;
+
+ gboolean is_active;
+
+ gint delay_inhibit_fd;
+ gboolean prepare_for_shutdown_expected;
+};
+
+enum {
+ PROP_0,
+ PROP_ACTIVE
+};
+
+static void gsm_consolekit_system_init (GsmSystemInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (GsmConsolekit, gsm_consolekit, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (GSM_TYPE_SYSTEM,
+ gsm_consolekit_system_init))
+
+static void
+drop_system_inhibitor (GsmConsolekit *manager)
+{
+ if (manager->priv->inhibit_fd != -1) {
+ g_debug ("GsmConsolekit: Dropping system inhibitor");
+ close (manager->priv->inhibit_fd);
+ manager->priv->inhibit_fd = -1;
+ }
+}
+
+static void
+drop_delay_inhibitor (GsmConsolekit *manager)
+{
+ if (manager->priv->delay_inhibit_fd != -1) {
+ g_debug ("GsmConsolekit: Dropping delay inhibitor");
+ close (manager->priv->delay_inhibit_fd);
+ manager->priv->delay_inhibit_fd = -1;
+ }
+}
+
+static void
+gsm_consolekit_finalize (GObject *object)
+{
+ GsmConsolekit *consolekit = GSM_CONSOLEKIT (object);
+
+ g_clear_object (&consolekit->priv->ck_proxy);
+ g_clear_object (&consolekit->priv->ck_session_proxy);
+ free (consolekit->priv->session_id);
+ g_free (consolekit->priv->session_path);
+
+ if (consolekit->priv->inhibitors != NULL) {
+ g_slist_free_full (consolekit->priv->inhibitors, g_free);
+ }
+ drop_system_inhibitor (consolekit);
+ drop_delay_inhibitor (consolekit);
+
+ G_OBJECT_CLASS (gsm_consolekit_parent_class)->finalize (object);
+}
+
+static void
+gsm_consolekit_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GsmConsolekit *self = GSM_CONSOLEKIT (object);
+
+ switch (prop_id) {
+ case PROP_ACTIVE:
+ self->priv->is_active = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+gsm_consolekit_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GsmConsolekit *self = GSM_CONSOLEKIT (object);
+
+ switch (prop_id) {
+ case PROP_ACTIVE:
+ g_value_set_boolean (value, self->priv->is_active);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gsm_consolekit_class_init (GsmConsolekitClass *manager_class)
+{
+ GObjectClass *object_class;
+
+ object_class = G_OBJECT_CLASS (manager_class);
+
+ object_class->get_property = gsm_consolekit_get_property;
+ object_class->set_property = gsm_consolekit_set_property;
+ object_class->finalize = gsm_consolekit_finalize;
+
+ g_object_class_override_property (object_class, PROP_ACTIVE, "active");
+
+ g_type_class_add_private (manager_class, sizeof (GsmConsolekitPrivate));
+}
+
+static void ck_session_proxy_signal_cb (GDBusProxy *proxy,
+ const gchar *sender_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data);
+
+static void ck_proxy_signal_cb (GDBusProxy *proxy,
+ const gchar *sender_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data);
+
+static void
+ck_pid_get_session (GsmConsolekit *manager,
+ pid_t pid,
+ gchar **session_id)
+{
+ GVariant *res;
+
+ *session_id = NULL;
+
+ if (pid < 0) {
+ g_warning ("Calling GetSessionForUnixProcess failed."
+ "Invalid pid.");
+ return;
+ }
+
+ res = g_dbus_proxy_call_sync (manager->priv->ck_proxy,
+ "GetSessionForUnixProcess",
+ g_variant_new ("(u)", pid),
+ 0,
+ -1,
+ NULL,
+ NULL);
+ if (!res) {
+ g_warning ("Calling GetSessionForUnixProcess failed."
+ "Check that ConsoleKit is properly installed.");
+ return;
+ }
+
+ g_variant_get (res, "(o)", session_id);
+ g_variant_unref (res);
+}
+
+static void
+gsm_consolekit_init (GsmConsolekit *manager)
+{
+ GError *error = NULL;
+ GDBusConnection *bus;
+ GVariant *res;
+
+ manager->priv = G_TYPE_INSTANCE_GET_PRIVATE (manager,
+ GSM_TYPE_CONSOLEKIT,
+ GsmConsolekitPrivate);
+
+ manager->priv->inhibit_fd = -1;
+ manager->priv->delay_inhibit_fd = -1;
+
+ bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
+ if (bus == NULL)
+ g_error ("Failed to connect to system bus: %s",
+ error->message);
+ manager->priv->ck_proxy =
+ g_dbus_proxy_new_sync (bus,
+ 0,
+ NULL,
+ CK_NAME,
+ CK_MANAGER_PATH,
+ CK_MANAGER_INTERFACE,
+ NULL,
+ &error);
+ if (manager->priv->ck_proxy == NULL) {
+ g_warning ("Failed to connect to consolekit: %s",
+ error->message);
+ g_clear_error (&error);
+ }
+
+ g_signal_connect (manager->priv->ck_proxy, "g-signal",
+ G_CALLBACK (ck_proxy_signal_cb), manager);
+
+ ck_pid_get_session (manager, getpid (), &manager->priv->session_id);
+
+ if (manager->priv->session_id == NULL) {
+ g_warning ("Could not get session id for session. Check that ConsoleKit is "
+ "properly installed.");
+ return;
+ }
+
+ /* in ConsoleKit, the session id is the session path */
+ manager->priv->session_path = g_strdup (manager->priv->session_id);
+
+ manager->priv->ck_session_proxy =
+ g_dbus_proxy_new_sync (bus,
+ 0,
+ NULL,
+ CK_NAME,
+ manager->priv->session_path,
+ CK_SESSION_INTERFACE,
+ NULL,
+ &error);
+ if (manager->priv->ck_proxy == NULL) {
+ g_warning ("Failed to connect to consolekit session: %s",
+ error->message);
+ g_clear_error (&error);
+ }
+
+ g_signal_connect (manager->priv->ck_session_proxy, "g-signal",
+ G_CALLBACK (ck_session_proxy_signal_cb), manager);
+
+ g_object_unref (bus);
+}
+
+static void
+emit_restart_complete (GsmConsolekit *manager,
+ GError *error)
+{
+ GError *call_error;
+
+ call_error = NULL;
+
+ if (error != NULL) {
+ call_error = g_error_new_literal (GSM_SYSTEM_ERROR,
+ GSM_SYSTEM_ERROR_RESTARTING,
+ error->message);
+ }
+
+ g_signal_emit_by_name (G_OBJECT (manager),
+ "request_completed", call_error);
+
+ if (call_error != NULL) {
+ g_error_free (call_error);
+ }
+}
+
+static void
+emit_stop_complete (GsmConsolekit *manager,
+ GError *error)
+{
+ GError *call_error;
+
+ call_error = NULL;
+
+ if (error != NULL) {
+ call_error = g_error_new_literal (GSM_SYSTEM_ERROR,
+ GSM_SYSTEM_ERROR_STOPPING,
+ error->message);
+ }
+
+ g_signal_emit_by_name (G_OBJECT (manager),
+ "request_completed", call_error);
+
+ if (call_error != NULL) {
+ g_error_free (call_error);
+ }
+}
+
+static void
+restart_done (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GDBusProxy *proxy = G_DBUS_PROXY (source);
+ GsmConsolekit *manager = user_data;
+ GError *error = NULL;
+ GVariant *res;
+
+ res = g_dbus_proxy_call_finish (proxy, result, &error);
+
+ if (!res) {
+ g_warning ("Unable to restart system: %s", error->message);
+ emit_restart_complete (manager, error);
+ g_error_free (error);
+ } else {
+ emit_restart_complete (manager, NULL);
+ g_variant_unref (res);
+ }
+}
+
+static void
+gsm_consolekit_attempt_restart (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+
+ /* Use Restart instead of Reboot because it will work on
+ * both CK and CK2 */
+ g_dbus_proxy_call (manager->priv->ck_proxy,
+ "Restart",
+ g_variant_new ("()"),
+ 0,
+ G_MAXINT,
+ NULL,
+ restart_done,
+ manager);
+}
+
+static void
+stop_done (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GDBusProxy *proxy = G_DBUS_PROXY (source);
+ GsmConsolekit *manager = user_data;
+ GError *error = NULL;
+ GVariant *res;
+
+ res = g_dbus_proxy_call_finish (proxy, result, &error);
+
+ if (!res) {
+ g_warning ("Unable to stop system: %s", error->message);
+ emit_stop_complete (manager, error);
+ g_error_free (error);
+ } else {
+ emit_stop_complete (manager, NULL);
+ g_variant_unref (res);
+ }
+}
+
+static void
+gsm_consolekit_attempt_stop (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+
+ /* Use Stop insetad of PowerOff because it will work with
+ * Ck and CK2. */
+ g_dbus_proxy_call (manager->priv->ck_proxy,
+ "Stop",
+ g_variant_new ("()"),
+ 0,
+ G_MAXINT,
+ NULL,
+ stop_done,
+ manager);
+}
+
+static void
+gsm_consolekit_set_session_idle (GsmSystem *system,
+ gboolean is_idle)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+
+ g_debug ("Updating consolekit idle status: %d", is_idle);
+ g_dbus_proxy_call_sync (manager->priv->ck_session_proxy,
+ "SetIdleHint",
+ g_variant_new ("(b)", is_idle),
+ 0,
+ G_MAXINT,
+ NULL, NULL);
+}
+
+static void
+ck_session_get_seat (GsmConsolekit *manager,
+ gchar **seat)
+{
+ GVariant *res;
+
+ *seat = NULL;
+
+ res = g_dbus_proxy_call_sync (manager->priv->ck_session_proxy,
+ "GetSeatId",
+ g_variant_new ("()"),
+ 0,
+ -1,
+ NULL, NULL);
+ if (!res) {
+ g_warning ("GsmConsoleKit: Calling GetSeatId failed.");
+ return;
+ }
+
+ g_variant_get (res, "(o)", seat);
+ g_variant_unref (res);
+}
+
+/* returns -1 on failure
+ * 0 seat is multi-session
+ * 1 seat is not multi-session
+ */
+static gint
+ck_seat_can_multi_session (GsmConsolekit *manager,
+ const gchar *seat)
+{
+ GDBusConnection *bus;
+ GVariant *res;
+ gboolean can_activate;
+
+
+ bus = g_dbus_proxy_get_connection (manager->priv->ck_proxy);
+ res = g_dbus_connection_call_sync (bus,
+ CK_NAME,
+ seat,
+ CK_SEAT_INTERFACE,
+ "CanActivateSessions",
+ g_variant_new ("()"),
+ G_VARIANT_TYPE_BOOLEAN,
+ 0,
+ -1,
+ NULL, NULL);
+ if (!res) {
+ g_warning ("GsmConsoleKit: Calling GetSeatId failed.");
+ return -1;
+ }
+
+ g_variant_get (res, "(b)", &can_activate);
+ g_variant_unref (res);
+
+ return can_activate == TRUE ? 1 : 0;
+}
+
+static gboolean
+gsm_consolekit_can_switch_user (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+ gchar *seat;
+ gint ret;
+
+ ck_session_get_seat (manager, &seat);
+ ret = ck_seat_can_multi_session (manager, seat);
+ free (seat);
+
+ return ret > 0;
+}
+
+static gboolean
+gsm_consolekit_can_restart (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+ GVariant *res;
+ gboolean can_restart;
+
+ res = g_dbus_proxy_call_sync (manager->priv->ck_proxy,
+ "CanRestart",
+ g_variant_new ("()"),
+ 0,
+ G_MAXINT,
+ NULL,
+ NULL);
+ if (!res) {
+ g_warning ("Calling CanRestart failed. Check that ConsoleKit is "
+ "properly installed.");
+ return FALSE;
+ }
+
+ g_variant_get (res, "(b)", &can_restart);
+ g_variant_unref (res);
+
+ return can_restart;
+}
+
+static gboolean
+gsm_consolekit_can_stop (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+ GVariant *res;
+ gboolean can_stop;
+
+ res = g_dbus_proxy_call_sync (manager->priv->ck_proxy,
+ "CanStop",
+ g_variant_new ("()"),
+ 0,
+ G_MAXINT,
+ NULL,
+ NULL);
+ if (!res) {
+ g_warning ("Calling CanStop failed. Check that ConsoleKit is "
+ "properly installed.");
+ return FALSE;
+ }
+
+ g_variant_get (res, "(b)", &can_stop);
+ g_variant_unref (res);
+
+ return can_stop;
+}
+
+/* returns -1 on failure, 0 on success */
+static gint
+ck_session_get_class (GsmConsolekit *manager,
+ gchar **session_class)
+{
+ GVariant *res;
+
+ *session_class = NULL;
+
+ res = g_dbus_proxy_call_sync (manager->priv->ck_session_proxy,
+ "GetSessionClass",
+ g_variant_new ("()"),
+ 0,
+ -1,
+ NULL, NULL);
+ if (!res) {
+ g_warning ("GsmConsoleKit: Calling GetSessionClass failed.");
+ return -1;
+ }
+
+ g_variant_get (res, "(s)", session_class);
+ g_variant_unref (res);
+
+ return 0;
+}
+
+static gboolean
+gsm_consolekit_is_login_session (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+ int res;
+ gboolean ret;
+ gchar *session_class = NULL;
+
+ ret = FALSE;
+
+ if (manager->priv->session_id == NULL) {
+ return ret;
+ }
+
+ res = ck_session_get_class (manager, &session_class);
+ if (res < 0) {
+ g_warning ("Could not get session class: %s", strerror (-res));
+ return FALSE;
+ }
+ ret = (g_strcmp0 (session_class, "greeter") == 0);
+ g_free (session_class);
+
+ return ret;
+}
+
+static gboolean
+gsm_consolekit_can_suspend (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+ gchar *rv;
+ GVariant *res;
+ gboolean can_suspend;
+
+ res = g_dbus_proxy_call_sync (manager->priv->ck_proxy,
+ "CanSuspend",
+ NULL,
+ 0,
+ G_MAXINT,
+ NULL,
+ NULL);
+ if (!res) {
+ g_warning ("Calling CanSuspend failed. Check that ConsoleKit is "
+ "properly installed.");
+ return FALSE;
+ }
+
+ g_variant_get (res, "(s)", &rv);
+ g_variant_unref (res);
+
+ can_suspend = g_strcmp0 (rv, "yes") == 0 ||
+ g_strcmp0 (rv, "challenge") == 0;
+
+ g_free (rv);
+
+ return can_suspend;
+}
+
+static gboolean
+gsm_consolekit_can_hibernate (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+ gchar *rv;
+ GVariant *res;
+ gboolean can_hibernate;
+
+ res = g_dbus_proxy_call_sync (manager->priv->ck_proxy,
+ "CanHibernate",
+ NULL,
+ 0,
+ G_MAXINT,
+ NULL,
+ NULL);
+ if (!res) {
+ g_warning ("Calling CanHibernate failed. Check that ConsoleKit is "
+ "properly installed.");
+ return FALSE;
+ }
+
+ g_variant_get (res, "(s)", &rv);
+ g_variant_unref (res);
+
+ can_hibernate = g_strcmp0 (rv, "yes") == 0 ||
+ g_strcmp0 (rv, "challenge") == 0;
+
+ g_free (rv);
+
+ return can_hibernate;
+}
+
+static void
+suspend_done (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GDBusProxy *proxy = G_DBUS_PROXY (source);
+ GError *error = NULL;
+ GVariant *res;
+
+ res = g_dbus_proxy_call_finish (proxy, result, &error);
+
+ if (!res) {
+ g_warning ("Unable to suspend system: %s", error->message);
+ g_error_free (error);
+ } else {
+ g_variant_unref (res);
+ }
+}
+
+static void
+hibernate_done (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GDBusProxy *proxy = G_DBUS_PROXY (source);
+ GError *error = NULL;
+ GVariant *res;
+
+ res = g_dbus_proxy_call_finish (proxy, result, &error);
+
+ if (!res) {
+ g_warning ("Unable to hibernate system: %s", error->message);
+ g_error_free (error);
+ } else {
+ g_variant_unref (res);
+ }
+}
+
+static void
+gsm_consolekit_suspend (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+
+ g_dbus_proxy_call (manager->priv->ck_proxy,
+ "Suspend",
+ g_variant_new ("(b)", TRUE),
+ 0,
+ G_MAXINT,
+ NULL,
+ suspend_done,
+ manager);
+}
+
+static void
+gsm_consolekit_hibernate (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+
+ g_dbus_proxy_call (manager->priv->ck_proxy,
+ "Hibernate",
+ g_variant_new ("(b)", TRUE),
+ 0,
+ G_MAXINT,
+ NULL,
+ hibernate_done,
+ manager);
+}
+
+static void
+inhibit_done (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GDBusProxy *proxy = G_DBUS_PROXY (source);
+ GsmConsolekit *manager = GSM_CONSOLEKIT (user_data);
+ GError *error = NULL;
+ GVariant *res;
+ GUnixFDList *fd_list = NULL;
+ gint idx;
+
+ res = g_dbus_proxy_call_with_unix_fd_list_finish (proxy, &fd_list, result, &error);
+
+ if (!res) {
+ g_warning ("Unable to inhibit system: %s", error->message);
+ g_error_free (error);
+ } else {
+ g_variant_get (res, "(h)", &idx);
+ manager->priv->inhibit_fd = g_unix_fd_list_get (fd_list, idx, &error);
+ if (manager->priv->inhibit_fd == -1) {
+ g_warning ("Failed to receive system inhibitor fd: %s", error->message);
+ g_error_free (error);
+ }
+ g_debug ("System inhibitor fd is %d", manager->priv->inhibit_fd);
+ g_object_unref (fd_list);
+ g_variant_unref (res);
+ }
+
+ if (manager->priv->inhibitors == NULL) {
+ drop_system_inhibitor (manager);
+ }
+}
+
+static void
+gsm_consolekit_add_inhibitor (GsmSystem *system,
+ const gchar *id,
+ GsmInhibitorFlag flag)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+
+ if ((flag & GSM_INHIBITOR_FLAG_SUSPEND) == 0)
+ return;
+
+ if (manager->priv->inhibitors == NULL) {
+ g_debug ("Adding system inhibitor");
+ g_dbus_proxy_call_with_unix_fd_list (manager->priv->ck_proxy,
+ "Inhibit",
+ g_variant_new ("(ssss)",
+ "sleep:shutdown",
+ g_get_user_name (),
+ "user session inhibited",
+ "block"),
+ 0,
+ G_MAXINT,
+ NULL,
+ NULL,
+ inhibit_done,
+ manager);
+ }
+ manager->priv->inhibitors = g_slist_prepend (manager->priv->inhibitors, g_strdup (id));
+}
+
+static void
+gsm_consolekit_remove_inhibitor (GsmSystem *system,
+ const gchar *id)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+ GSList *l;
+
+ l = g_slist_find_custom (manager->priv->inhibitors, id, (GCompareFunc)g_strcmp0);
+ if (l == NULL)
+ return;
+
+ g_free (l->data);
+ manager->priv->inhibitors = g_slist_delete_link (manager->priv->inhibitors, l);
+ if (manager->priv->inhibitors == NULL) {
+ drop_system_inhibitor (manager);
+ }
+}
+
+static void
+reboot_or_poweroff_done (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsmConsolekit *consolekit = user_data;
+ GVariant *result;
+ GError *error = NULL;
+
+ result = g_dbus_proxy_call_finish (G_DBUS_PROXY (source),
+ res,
+ &error);
+
+ if (result == NULL) {
+ if (!g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_ACCESS_DENIED)) {
+ g_warning ("Shutdown failed: %s", error->message);
+ }
+ g_error_free (error);
+ drop_delay_inhibitor (consolekit);
+ g_debug ("GsmConsolekit: shutdown preparation failed");
+ consolekit->priv->prepare_for_shutdown_expected = FALSE;
+ g_signal_emit_by_name (consolekit, "shutdown-prepared", FALSE);
+ } else {
+ g_variant_unref (result);
+ }
+}
+
+static void
+gsm_consolekit_prepare_shutdown (GsmSystem *system,
+ gboolean restart)
+{
+ GsmConsolekit *consolekit = GSM_CONSOLEKIT (system);
+ GUnixFDList *fd_list;
+ GVariant *res;
+ GError *error = NULL;
+ gint idx;
+
+ g_debug ("GsmConsolekit: prepare shutdown");
+
+ res = g_dbus_proxy_call_with_unix_fd_list_sync (consolekit->priv->ck_proxy,
+ "Inhibit",
+ g_variant_new ("(ssss)",
+ "shutdown",
+ g_get_user_name (),
+ "Preparing to end the session",
+ "delay"),
+ 0,
+ G_MAXINT,
+ NULL,
+ &fd_list,
+ NULL,
+ &error);
+ if (res == NULL) {
+ g_warning ("Failed to get delay inhibitor: %s", error->message);
+ g_error_free (error);
+ /* We may fail here with CK and that's ok */
+ } else {
+ g_variant_get (res, "(h)", &idx);
+
+ consolekit->priv->delay_inhibit_fd = g_unix_fd_list_get (fd_list, idx, NULL);
+
+ g_debug ("GsmConsolekit: got delay inhibitor, fd = %d", consolekit->priv->delay_inhibit_fd);
+
+ g_variant_unref (res);
+ g_object_unref (fd_list);
+ }
+
+ consolekit->priv->prepare_for_shutdown_expected = TRUE;
+
+ g_dbus_proxy_call (consolekit->priv->ck_proxy,
+ restart ? "Reboot" : "PowerOff",
+ g_variant_new ("(b)", TRUE),
+ 0,
+ G_MAXINT,
+ NULL,
+ reboot_or_poweroff_done,
+ consolekit);
+}
+
+static void
+gsm_consolekit_complete_shutdown (GsmSystem *system)
+{
+ GsmConsolekit *consolekit = GSM_CONSOLEKIT (system);
+
+ /* remove delay inhibitor, if any */
+ drop_delay_inhibitor (consolekit);
+}
+
+static gboolean
+gsm_consolekit_is_last_session_for_user (GsmSystem *system)
+{
+ return FALSE;
+}
+
+static void
+gsm_consolekit_system_init (GsmSystemInterface *iface)
+{
+ iface->can_switch_user = gsm_consolekit_can_switch_user;
+ iface->can_stop = gsm_consolekit_can_stop;
+ iface->can_restart = gsm_consolekit_can_restart;
+ iface->can_suspend = gsm_consolekit_can_suspend;
+ iface->can_hibernate = gsm_consolekit_can_hibernate;
+ iface->attempt_stop = gsm_consolekit_attempt_stop;
+ iface->attempt_restart = gsm_consolekit_attempt_restart;
+ iface->suspend = gsm_consolekit_suspend;
+ iface->hibernate = gsm_consolekit_hibernate;
+ iface->set_session_idle = gsm_consolekit_set_session_idle;
+ iface->is_login_session = gsm_consolekit_is_login_session;
+ iface->add_inhibitor = gsm_consolekit_add_inhibitor;
+ iface->remove_inhibitor = gsm_consolekit_remove_inhibitor;
+ iface->prepare_shutdown = gsm_consolekit_prepare_shutdown;
+ iface->complete_shutdown = gsm_consolekit_complete_shutdown;
+ iface->is_last_session_for_user = gsm_consolekit_is_last_session_for_user;
+}
+
+GsmConsolekit *
+gsm_consolekit_new (void)
+{
+ GsmConsolekit *manager;
+
+ manager = g_object_new (GSM_TYPE_CONSOLEKIT, NULL);
+
+ return manager;
+}
+
+static void
+ck_proxy_signal_cb (GDBusProxy *proxy,
+ const gchar *sender_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ GsmConsolekit *consolekit = user_data;
+ gboolean is_about_to_shutdown;
+
+ g_debug ("GsmConsolekit: received ConsoleKit signal: %s", signal_name);
+
+ if (g_strcmp0 (signal_name, "PrepareForShutdown") != 0) {
+ g_debug ("GsmConsolekit: ignoring %s signal", signal_name);
+ return;
+ }
+
+ g_variant_get (parameters, "(b)", &is_about_to_shutdown);
+ if (!is_about_to_shutdown) {
+ g_debug ("GsmConsolekit: ignoring %s signal since about-to-shutdown is FALSE", signal_name);
+ return;
+ }
+
+ if (consolekit->priv->prepare_for_shutdown_expected) {
+ g_debug ("GsmConsolekit: shutdown successfully prepared");
+ g_signal_emit_by_name (consolekit, "shutdown-prepared", TRUE);
+ consolekit->priv->prepare_for_shutdown_expected = FALSE;
+ }
+}
+
+static void
+ck_session_proxy_signal_cb (GDBusProxy *proxy,
+ const gchar *sender_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ GsmConsolekit *consolekit = user_data;
+ gboolean is_active;
+
+ g_debug ("GsmConsolekit: received ConsoleKit signal: %s", signal_name);
+
+ if (g_strcmp0 (signal_name, "ActiveChanged") != 0) {
+ g_debug ("GsmConsolekit: ignoring %s signal", signal_name);
+ return;
+ }
+
+ g_variant_get (parameters, "(b)", &is_active);
+ if (consolekit->priv->is_active != is_active) {
+ g_debug ("GsmConsolekit: session state changed");
+ consolekit->priv->is_active = is_active;
+ g_object_notify (G_OBJECT (consolekit), "active");
+ }
+}
diff --git a/gnome-session/gsm-consolekit.h b/gnome-session/gsm-consolekit.h
new file mode 100644
index 0000000..963a9fd
--- /dev/null
+++ b/gnome-session/gsm-consolekit.h
@@ -0,0 +1,59 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Jon McCann <jmccann@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 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, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ * Jon McCann <jmccann@redhat.com>
+ */
+
+#ifndef __GSM_CONSOLEKIT_H__
+#define __GSM_CONSOLEKIT_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GSM_TYPE_CONSOLEKIT (gsm_consolekit_get_type ())
+#define GSM_CONSOLEKIT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSM_TYPE_CONSOLEKIT, GsmConsolekit))
+#define GSM_CONSOLEKIT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSM_TYPE_CONSOLEKIT, GsmConsolekitClass))
+#define GSM_IS_CONSOLEKIT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSM_TYPE_CONSOLEKIT))
+#define GSM_IS_CONSOLEKIT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSM_TYPE_CONSOLEKIT))
+#define GSM_CONSOLEKIT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GSM_TYPE_CONSOLEKIT, GsmConsolekitClass))
+
+typedef struct _GsmConsolekit GsmConsolekit;
+typedef struct _GsmConsolekitClass GsmConsolekitClass;
+typedef struct _GsmConsolekitPrivate GsmConsolekitPrivate;
+
+struct _GsmConsolekit
+{
+ GObject parent;
+
+ GsmConsolekitPrivate *priv;
+};
+
+struct _GsmConsolekitClass
+{
+ GObjectClass parent_class;
+};
+
+GType gsm_consolekit_get_type (void);
+
+GsmConsolekit *gsm_consolekit_new (void) G_GNUC_MALLOC;
+
+G_END_DECLS
+
+#endif /* __GSM_CONSOLEKIT_H__ */
diff --git a/gnome-session/gsm-dbus-client.c b/gnome-session/gsm-dbus-client.c
new file mode 100644
index 0000000..6e9b002
--- /dev/null
+++ b/gnome-session/gsm-dbus-client.c
@@ -0,0 +1,456 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, 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 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <gio/gio.h>
+
+#include "org.gnome.SessionManager.ClientPrivate.h"
+#include "gsm-dbus-client.h"
+
+#include "gsm-manager.h"
+#include "gsm-util.h"
+
+#define GSM_DBUS_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSM_TYPE_DBUS_CLIENT, GsmDBusClientPrivate))
+
+
+#define SM_DBUS_NAME "org.gnome.SessionManager"
+#define SM_DBUS_CLIENT_PRIVATE_INTERFACE "org.gnome.SessionManager.ClientPrivate"
+
+struct GsmDBusClientPrivate
+{
+ char *bus_name;
+ GPid caller_pid;
+ GsmClientRestartStyle restart_style_hint;
+
+ GDBusConnection *connection;
+ GsmExportedClientPrivate *skeleton;
+ guint watch_id;
+};
+
+enum {
+ PROP_0,
+ PROP_BUS_NAME
+};
+
+G_DEFINE_TYPE (GsmDBusClient, gsm_dbus_client, GSM_TYPE_CLIENT)
+
+static gboolean
+setup_connection (GsmDBusClient *client)
+{
+ GError *error = NULL;
+
+ if (client->priv->connection == NULL) {
+ client->priv->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+ if (error != NULL) {
+ g_debug ("GsmDbusClient: Couldn't connect to session bus: %s",
+ error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+static gboolean
+handle_end_session_response (GsmExportedClientPrivate *skeleton,
+ GDBusMethodInvocation *invocation,
+ gboolean is_ok,
+ const char *reason,
+ GsmDBusClient *client)
+{
+ g_debug ("GsmDBusClient: got EndSessionResponse is-ok:%d reason=%s", is_ok, reason);
+ gsm_client_end_session_response (GSM_CLIENT (client),
+ is_ok, FALSE, FALSE, reason);
+
+ gsm_exported_client_private_complete_end_session_response (skeleton, invocation);
+ return TRUE;
+}
+
+static GObject *
+gsm_dbus_client_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_properties)
+{
+ GsmDBusClient *client;
+ GError *error = NULL;
+ GsmExportedClientPrivate *skeleton;
+
+ client = GSM_DBUS_CLIENT (G_OBJECT_CLASS (gsm_dbus_client_parent_class)->constructor (type,
+ n_construct_properties,
+ construct_properties));
+
+ if (! setup_connection (client)) {
+ g_object_unref (client);
+ return NULL;
+ }
+
+ skeleton = gsm_exported_client_private_skeleton_new ();
+ client->priv->skeleton = skeleton;
+ g_debug ("exporting dbus client to object path: %s", gsm_client_peek_id (GSM_CLIENT (client)));
+ g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (skeleton),
+ client->priv->connection,
+ gsm_client_peek_id (GSM_CLIENT (client)),
+ &error);
+
+ if (error != NULL) {
+ g_critical ("error exporting client private on session bus: %s", error->message);
+ g_error_free (error);
+ g_object_unref (client);
+ return NULL;
+ }
+
+ g_signal_connect (skeleton, "handle-end-session-response",
+ G_CALLBACK (handle_end_session_response), client);
+
+ return G_OBJECT (client);
+}
+
+static void
+gsm_dbus_client_init (GsmDBusClient *client)
+{
+ client->priv = GSM_DBUS_CLIENT_GET_PRIVATE (client);
+}
+
+/* adapted from PolicyKit */
+static gboolean
+get_caller_info (GsmDBusClient *client,
+ const char *sender,
+ uid_t *calling_uid_out,
+ pid_t *calling_pid_out)
+{
+ GDBusConnection *connection;
+ gboolean retval;
+ GError *error;
+ GVariant *uid_variant, *pid_variant;
+ uid_t uid;
+ pid_t pid;
+
+ retval = FALSE;
+ connection = NULL;
+ uid_variant = pid_variant = NULL;
+
+ if (sender == NULL) {
+ goto out;
+ }
+
+ error = NULL;
+ connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+
+ if (error != NULL) {
+ g_warning ("error getting session bus: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ uid_variant = g_dbus_connection_call_sync (connection,
+ "org.freedesktop.DBus",
+ "/org/freedesktop/DBus",
+ "org.freedesktop.DBus",
+ "GetConnectionUnixUser",
+ g_variant_new ("(s)", sender),
+ G_VARIANT_TYPE ("(u)"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1, NULL, &error);
+
+ if (error != NULL) {
+ g_debug ("GetConnectionUnixUser() failed: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ pid_variant = g_dbus_connection_call_sync (connection,
+ "org.freedesktop.DBus",
+ "/org/freedesktop/DBus",
+ "org.freedesktop.DBus",
+ "GetConnectionUnixProcessID",
+ g_variant_new ("(s)", sender),
+ G_VARIANT_TYPE ("(u)"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1, NULL, &error);
+
+ if (error != NULL) {
+ g_debug ("GetConnectionUnixProcessID() failed: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ g_variant_get (uid_variant, "(u)", &uid);
+ g_variant_get (pid_variant, "(u)", &pid);
+
+ if (calling_uid_out != NULL) {
+ *calling_uid_out = uid;
+ }
+ if (calling_pid_out != NULL) {
+ *calling_pid_out = pid;
+ }
+
+ retval = TRUE;
+
+ g_debug ("uid = %d", uid);
+ g_debug ("pid = %d", pid);
+
+out:
+ g_clear_pointer (&uid_variant, (GDestroyNotify) g_variant_unref);
+ g_clear_pointer (&pid_variant, (GDestroyNotify) g_variant_unref);
+ g_clear_object (&connection);
+
+ return retval;
+}
+
+static void
+on_client_vanished (GDBusConnection *connection,
+ const char *name,
+ gpointer user_data)
+{
+ GsmDBusClient *client = user_data;
+
+ g_bus_unwatch_name (client->priv->watch_id);
+ client->priv->watch_id = 0;
+
+ gsm_client_disconnected (GSM_CLIENT (client));
+}
+
+static void
+gsm_dbus_client_set_bus_name (GsmDBusClient *client,
+ const char *bus_name)
+{
+ g_return_if_fail (GSM_IS_DBUS_CLIENT (client));
+
+ g_free (client->priv->bus_name);
+
+ client->priv->bus_name = g_strdup (bus_name);
+ g_object_notify (G_OBJECT (client), "bus-name");
+
+ if (!get_caller_info (client, bus_name, NULL, &client->priv->caller_pid)) {
+ client->priv->caller_pid = 0;
+ }
+
+ client->priv->watch_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
+ bus_name,
+ G_BUS_NAME_WATCHER_FLAGS_NONE,
+ NULL,
+ on_client_vanished,
+ client,
+ NULL);
+}
+
+const char *
+gsm_dbus_client_get_bus_name (GsmDBusClient *client)
+{
+ g_return_val_if_fail (GSM_IS_DBUS_CLIENT (client), NULL);
+
+ return client->priv->bus_name;
+}
+
+static void
+gsm_dbus_client_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GsmDBusClient *self;
+
+ self = GSM_DBUS_CLIENT (object);
+
+ switch (prop_id) {
+ case PROP_BUS_NAME:
+ gsm_dbus_client_set_bus_name (self, g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gsm_dbus_client_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GsmDBusClient *self;
+
+ self = GSM_DBUS_CLIENT (object);
+
+ switch (prop_id) {
+ case PROP_BUS_NAME:
+ g_value_set_string (value, self->priv->bus_name);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gsm_dbus_client_finalize (GObject *object)
+{
+ GsmDBusClient *client = (GsmDBusClient *) object;
+
+ g_free (client->priv->bus_name);
+
+ if (client->priv->skeleton != NULL) {
+ g_dbus_interface_skeleton_unexport_from_connection (G_DBUS_INTERFACE_SKELETON (client->priv->skeleton),
+ client->priv->connection);
+ g_clear_object (&client->priv->skeleton);
+ }
+
+ g_clear_object (&client->priv->connection);
+
+ if (client->priv->watch_id != 0)
+ g_bus_unwatch_name (client->priv->watch_id);
+
+ G_OBJECT_CLASS (gsm_dbus_client_parent_class)->finalize (object);
+}
+
+static GKeyFile *
+dbus_client_save (GsmClient *client,
+ GsmApp *app,
+ GError **error)
+{
+ g_debug ("GsmDBusClient: saving client with id %s",
+ gsm_client_peek_id (client));
+
+ /* FIXME: We still don't support client saving for D-Bus
+ * session clients */
+
+ return NULL;
+}
+
+static gboolean
+dbus_client_stop (GsmClient *client,
+ GError **error)
+{
+ GsmDBusClient *dbus_client = (GsmDBusClient *) client;
+ gsm_exported_client_private_emit_stop (dbus_client->priv->skeleton);
+ return TRUE;
+}
+
+static char *
+dbus_client_get_app_name (GsmClient *client)
+{
+ /* Always use app-id instead */
+ return NULL;
+}
+
+static GsmClientRestartStyle
+dbus_client_get_restart_style_hint (GsmClient *client)
+{
+ return (GSM_DBUS_CLIENT (client)->priv->restart_style_hint);
+}
+
+static guint
+dbus_client_get_unix_process_id (GsmClient *client)
+{
+ return (GSM_DBUS_CLIENT (client)->priv->caller_pid);
+}
+
+static gboolean
+dbus_client_query_end_session (GsmClient *client,
+ GsmClientEndSessionFlag flags,
+ GError **error)
+{
+ GsmDBusClient *dbus_client = (GsmDBusClient *) client;
+
+ if (dbus_client->priv->bus_name == NULL) {
+ g_set_error (error,
+ GSM_CLIENT_ERROR,
+ GSM_CLIENT_ERROR_NOT_REGISTERED,
+ "Client is not registered");
+ return FALSE;
+ }
+
+ g_debug ("GsmDBusClient: sending QueryEndSession signal to %s", dbus_client->priv->bus_name);
+
+ gsm_exported_client_private_emit_query_end_session (dbus_client->priv->skeleton, flags);
+ return TRUE;
+}
+
+static gboolean
+dbus_client_end_session (GsmClient *client,
+ GsmClientEndSessionFlag flags,
+ GError **error)
+{
+ GsmDBusClient *dbus_client = (GsmDBusClient *) client;
+
+ gsm_exported_client_private_emit_end_session (dbus_client->priv->skeleton, flags);
+ return TRUE;
+}
+
+static gboolean
+dbus_client_cancel_end_session (GsmClient *client,
+ GError **error)
+{
+ GsmDBusClient *dbus_client = (GsmDBusClient *) client;
+ gsm_exported_client_private_emit_cancel_end_session (dbus_client->priv->skeleton);
+ return TRUE;
+}
+
+static void
+gsm_dbus_client_class_init (GsmDBusClientClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GsmClientClass *client_class = GSM_CLIENT_CLASS (klass);
+
+ object_class->finalize = gsm_dbus_client_finalize;
+ object_class->constructor = gsm_dbus_client_constructor;
+ object_class->get_property = gsm_dbus_client_get_property;
+ object_class->set_property = gsm_dbus_client_set_property;
+
+ client_class->impl_save = dbus_client_save;
+ client_class->impl_stop = dbus_client_stop;
+ client_class->impl_query_end_session = dbus_client_query_end_session;
+ client_class->impl_end_session = dbus_client_end_session;
+ client_class->impl_cancel_end_session = dbus_client_cancel_end_session;
+ client_class->impl_get_app_name = dbus_client_get_app_name;
+ client_class->impl_get_restart_style_hint = dbus_client_get_restart_style_hint;
+ client_class->impl_get_unix_process_id = dbus_client_get_unix_process_id;
+
+ g_object_class_install_property (object_class,
+ PROP_BUS_NAME,
+ g_param_spec_string ("bus-name",
+ "bus-name",
+ "bus-name",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ g_type_class_add_private (klass, sizeof (GsmDBusClientPrivate));
+}
+
+GsmClient *
+gsm_dbus_client_new (const char *startup_id,
+ const char *bus_name)
+{
+ GsmDBusClient *client;
+
+ client = g_object_new (GSM_TYPE_DBUS_CLIENT,
+ "startup-id", startup_id,
+ "bus-name", bus_name,
+ NULL);
+
+ return GSM_CLIENT (client);
+}
diff --git a/gnome-session/gsm-dbus-client.h b/gnome-session/gsm-dbus-client.h
new file mode 100644
index 0000000..10c5057
--- /dev/null
+++ b/gnome-session/gsm-dbus-client.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, 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 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GSM_DBUS_CLIENT_H__
+#define __GSM_DBUS_CLIENT_H__
+
+#include "gsm-client.h"
+
+G_BEGIN_DECLS
+
+#define GSM_TYPE_DBUS_CLIENT (gsm_dbus_client_get_type ())
+#define GSM_DBUS_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSM_TYPE_DBUS_CLIENT, GsmDBusClient))
+#define GSM_DBUS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSM_TYPE_DBUS_CLIENT, GsmDBusClientClass))
+#define GSM_IS_DBUS_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSM_TYPE_DBUS_CLIENT))
+#define GSM_IS_DBUS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSM_TYPE_DBUS_CLIENT))
+#define GSM_DBUS_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSM_TYPE_DBUS_CLIENT, GsmDBusClientClass))
+
+typedef struct _GsmDBusClient GsmDBusClient;
+typedef struct _GsmDBusClientClass GsmDBusClientClass;
+
+typedef struct GsmDBusClientPrivate GsmDBusClientPrivate;
+
+struct _GsmDBusClient
+{
+ GsmClient parent;
+ GsmDBusClientPrivate *priv;
+};
+
+struct _GsmDBusClientClass
+{
+ GsmClientClass parent_class;
+};
+
+GType gsm_dbus_client_get_type (void) G_GNUC_CONST;
+
+GsmClient * gsm_dbus_client_new (const char *startup_id,
+ const char *bus_name);
+const char * gsm_dbus_client_get_bus_name (GsmDBusClient *client);
+
+G_END_DECLS
+
+#endif /* __GSM_DBUS_CLIENT_H__ */
diff --git a/gnome-session/gsm-fail-whale-dialog.c b/gnome-session/gsm-fail-whale-dialog.c
new file mode 100644
index 0000000..d6e8407
--- /dev/null
+++ b/gnome-session/gsm-fail-whale-dialog.c
@@ -0,0 +1,461 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2011 Red Hat, Inc.
+ * Copyright (C) 2019 Canonical Ltd.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ * Colin Walters <walters@verbum.org>
+ * Marco Trevisan <marco@ubuntu.com>
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include <glib/gi18n.h>
+
+#include <gtk/gtk.h>
+#ifdef GDK_WINDOWING_X11
+#include <gtk/gtkx.h>
+#endif
+
+#include "gsm-fail-whale-dialog.h"
+
+#include "gsm-icon-names.h"
+
+struct _GsmFailWhaleDialog
+{
+ GtkWindow parent;
+
+ gboolean debug_mode;
+ gboolean allow_logout;
+ gboolean extensions;
+ GdkMonitor *monitor;
+ GdkRectangle geometry;
+};
+
+G_DEFINE_TYPE (GsmFailWhaleDialog, gsm_fail_whale_dialog, GTK_TYPE_WINDOW);
+
+/* derived from tomboy */
+static void
+_window_override_user_time (GsmFailWhaleDialog *window)
+{
+ guint32 ev_time = gtk_get_current_event_time ();
+ GdkWindow *gdk_window = gtk_widget_get_window (GTK_WIDGET (window));
+
+#ifdef GDK_WINDOWING_X11
+ if (!GDK_IS_X11_WINDOW (gdk_window))
+ return;
+
+ if (ev_time == 0) {
+ gint ev_mask = gtk_widget_get_events (GTK_WIDGET (window));
+ if (!(ev_mask & GDK_PROPERTY_CHANGE_MASK)) {
+ gtk_widget_add_events (GTK_WIDGET (window),
+ GDK_PROPERTY_CHANGE_MASK);
+ }
+
+ /*
+ * NOTE: Last resort for D-BUS or other non-interactive
+ * openings. Causes roundtrip to server. Lame.
+ */
+ ev_time = gdk_x11_get_server_time (gdk_window);
+ }
+
+ gdk_x11_window_set_user_time (gdk_window, ev_time);
+#endif
+}
+
+static void
+_window_move_resize_window (GsmFailWhaleDialog *window,
+ gboolean move,
+ gboolean resize)
+{
+ if (window->debug_mode)
+ return;
+
+ g_debug ("Move and/or resize window x=%d y=%d w=%d h=%d",
+ window->geometry.x,
+ window->geometry.y,
+ window->geometry.width,
+ window->geometry.height);
+
+ if (resize) {
+ gtk_window_resize (GTK_WINDOW (window),
+ window->geometry.width,
+ window->geometry.height);
+ }
+
+ if (move) {
+ gtk_window_move (GTK_WINDOW (window),
+ window->geometry.x,
+ window->geometry.y);
+ }
+}
+
+static void
+update_geometry (GsmFailWhaleDialog *fail_dialog)
+{
+ gdk_monitor_get_geometry (fail_dialog->monitor, &fail_dialog->geometry);
+}
+
+static void
+on_screen_size_changed (GdkScreen *screen,
+ GsmFailWhaleDialog *fail_dialog)
+{
+ gtk_widget_queue_resize (GTK_WIDGET (fail_dialog));
+}
+
+static void
+gsm_fail_whale_dialog_realize (GtkWidget *widget)
+{
+ if (GTK_WIDGET_CLASS (gsm_fail_whale_dialog_parent_class)->realize) {
+ GTK_WIDGET_CLASS (gsm_fail_whale_dialog_parent_class)->realize (widget);
+ }
+
+ _window_override_user_time (GSM_FAIL_WHALE_DIALOG (widget));
+ update_geometry (GSM_FAIL_WHALE_DIALOG (widget));
+ _window_move_resize_window (GSM_FAIL_WHALE_DIALOG (widget), TRUE, TRUE);
+
+ g_signal_connect (gtk_window_get_screen (GTK_WINDOW (widget)),
+ "size_changed",
+ G_CALLBACK (on_screen_size_changed),
+ widget);
+}
+
+static void
+gsm_fail_whale_dialog_unrealize (GtkWidget *widget)
+{
+ g_signal_handlers_disconnect_by_func (gtk_window_get_screen (GTK_WINDOW (widget)),
+ on_screen_size_changed,
+ widget);
+
+ if (GTK_WIDGET_CLASS (gsm_fail_whale_dialog_parent_class)->unrealize) {
+ GTK_WIDGET_CLASS (gsm_fail_whale_dialog_parent_class)->unrealize (widget);
+ }
+}
+
+static void
+gsm_fail_whale_dialog_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ GsmFailWhaleDialog *fail_dialog;
+ GdkRectangle old_geometry;
+ int position_changed = FALSE;
+ int size_changed = FALSE;
+
+ fail_dialog = GSM_FAIL_WHALE_DIALOG (widget);
+
+ old_geometry = fail_dialog->geometry;
+
+ update_geometry (fail_dialog);
+
+ requisition->width = fail_dialog->geometry.width;
+ requisition->height = fail_dialog->geometry.height;