diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2021-04-01 19:25:51 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2021-04-01 19:25:51 +0000 |
commit | 4f6aa8429e3910973cfdcbd5a245fc23cc6ccfd3 (patch) | |
tree | 2a83d7350ec7b2877249a1588891d718caf56c06 | |
parent | Initial commit. (diff) | |
download | gnome-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>
244 files changed, 107568 insertions, 0 deletions
@@ -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> @@ -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 Hydén 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 K³oczko <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 Viööe Pätsi <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. :) @@ -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 @@ -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 @@ -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 (¤t_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; |