From 56bd759df1d0c750a065b8c845e93d5dfa6b549d Mon Sep 17 00:00:00 2001 From: "Robin H. Johnson" Date: Sat, 8 Aug 2015 13:49:04 -0700 Subject: proj/gentoo: Initial commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit represents a new era for Gentoo: Storing the gentoo-x86 tree in Git, as converted from CVS. This commit is the start of the NEW history. Any historical data is intended to be grafted onto this point. Creation process: 1. Take final CVS checkout snapshot 2. Remove ALL ChangeLog* files 3. Transform all Manifests to thin 4. Remove empty Manifests 5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$ 5.1. Do not touch files with -kb/-ko keyword flags. Signed-off-by: Robin H. Johnson X-Thanks: Alec Warner - did the GSoC 2006 migration tests X-Thanks: Robin H. Johnson - infra guy, herding this project X-Thanks: Nguyen Thai Ngoc Duy - Former Gentoo developer, wrote Git features for the migration X-Thanks: Brian Harring - wrote much python to improve cvs2svn X-Thanks: Rich Freeman - validation scripts X-Thanks: Patrick Lauer - Gentoo dev, running new 2014 work in migration X-Thanks: Michał Górny - scripts, QA, nagging X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed --- .../files/10-user-dirs-update-mate | 10 + .../mate-session-manager/files/15-xdg-data-mate | 9 + mate-base/mate-session-manager/files/MATE | 109 +++++ mate-base/mate-session-manager/files/defaults.list | 336 +++++++++++++ ...ate-session-manager-1.2.0-idle-transition.patch | 10 + ...ate-session-manager-1.5.2-save-session-ui.patch | 535 +++++++++++++++++++++ .../mate-session-manager-1.6-gnome-keyring.patch | 328 +++++++++++++ .../files/mate-session-manager-1.6.1-login1.patch | 267 ++++++++++ 8 files changed, 1604 insertions(+) create mode 100755 mate-base/mate-session-manager/files/10-user-dirs-update-mate create mode 100644 mate-base/mate-session-manager/files/15-xdg-data-mate create mode 100644 mate-base/mate-session-manager/files/MATE create mode 100644 mate-base/mate-session-manager/files/defaults.list create mode 100644 mate-base/mate-session-manager/files/mate-session-manager-1.2.0-idle-transition.patch create mode 100644 mate-base/mate-session-manager/files/mate-session-manager-1.5.2-save-session-ui.patch create mode 100644 mate-base/mate-session-manager/files/mate-session-manager-1.6-gnome-keyring.patch create mode 100644 mate-base/mate-session-manager/files/mate-session-manager-1.6.1-login1.patch (limited to 'mate-base/mate-session-manager/files') diff --git a/mate-base/mate-session-manager/files/10-user-dirs-update-mate b/mate-base/mate-session-manager/files/10-user-dirs-update-mate new file mode 100755 index 000000000000..35973aae2447 --- /dev/null +++ b/mate-base/mate-session-manager/files/10-user-dirs-update-mate @@ -0,0 +1,10 @@ +#!/bin/sh + +# Create various XDG directories, and write ~/.config/user-dirs.dirs, etc. +# That file is read by glib to get XDG_PICTURES_DIR, etc + +if [ "$DESKTOP_SESSION" = "mate" ]; then + if type xdg-user-dirs-update >/dev/null 2>&1; then + xdg-user-dirs-update + fi +fi diff --git a/mate-base/mate-session-manager/files/15-xdg-data-mate b/mate-base/mate-session-manager/files/15-xdg-data-mate new file mode 100644 index 000000000000..df360cf85fdd --- /dev/null +++ b/mate-base/mate-session-manager/files/15-xdg-data-mate @@ -0,0 +1,9 @@ +#!/bin/sh + +if [ "$DESKTOP_SESSION" = "mate" ]; then + if [ -z "$XDG_DATA_DIRS" ]; then + export XDG_DATA_DIRS=/usr/share/mate:/usr/local/share/:/usr/share/ + else + export XDG_DATA_DIRS=/usr/share/mate:"$XDG_DATA_DIRS" + fi +fi diff --git a/mate-base/mate-session-manager/files/MATE b/mate-base/mate-session-manager/files/MATE new file mode 100644 index 000000000000..baa154bdbfd7 --- /dev/null +++ b/mate-base/mate-session-manager/files/MATE @@ -0,0 +1,109 @@ +#!/bin/sh +# +# This file has bitrotted badly. Someone needs to clean this up. +# + +if [ -f /etc/xdg/menus/mate-applications.menu ] ; then + export XDG_MENU_PREFIX=mate- +fi + +for errfile in "$HOME/.materc-errors" "${TMPDIR-/tmp}/materc-$USER/tmp/materc-$USER" +do + if ( cp /dev/null "$errfile" 2> /dev/null ) + then + chmod 600 "$errfile" + exec > "$errfile" 2>&1 + break + fi +done +# +# Distributors: +# You should modify the paths here to fit your distro +# If you need to do so, send me (jirka@5z.com) a patch +# and I'll try to make the script detect the distro stuff +# + +userresources=$HOME/.Xresources +usermodmap=$HOME/.Xmodmap +userxkbmap=$HOME/.Xkbmap + +sysresources=/etc/X11/Xresources +sysmodmap=/etc/X11/Xmodmap +sysxkbmap=/etc/X11/Xkbmap + +rh6sysresources=/etc/X11/xinit/Xresources +rh6sysmodmap=/etc/X11/xinit/Xmodmap + +if [ -x "$HOME/.materc" ]; then + command="$HOME/.materc" +elif [ -x /etc/X11/gdm/materc ]; then + command="/etc/X11/gdm/materc" +else + # as fallback in case the config is screwed + command=`which mate-session` +fi + +# merge in defaults +if [ -f "$rh6sysresources" ]; then + xrdb -merge "$rh6sysresources" +fi + +if [ -f "$sysresources" ]; then + xrdb -merge "$sysresources" +fi + +if [ -f "$userresources" ]; then + xrdb -merge "$userresources" +fi + +# merge in keymaps +if [ -f "$sysxkbmap" ]; then + setxkbmap `cat "$sysxkbmap"` + XKB_IN_USE=yes +fi + +if [ -f "$userxkbmap" ]; then + setxkbmap `cat "$userxkbmap"` + XKB_IN_USE=yes +fi + +# +# Eeek, this seems like too much magic here +# +if [ -z "$XKB_IN_USE" ] && [ ! -L /etc/X11/X ]; then + if grep '^exec.*/Xsun' /etc/X11/X > /dev/null 2>&1 && [ -f /etc/X11/XF86Config ]; then + xkbsymbols=`sed -n -e 's/^[ ]*XkbSymbols[ ]*"\(.*\)".*$/\1/p' /etc/X11/XF86Config` + if [ -n "$xkbsymbols" ]; then + setxkbmap -symbols "$xkbsymbols" + XKB_IN_USE=yes + fi + fi +fi + +# xkb and xmodmap don't play nice together +if [ -z "$XKB_IN_USE" ]; then + if [ -f "$rh6sysmodmap" ]; then + xmodmap "$rh6sysmodmap" + fi + + if [ -f "$sysmodmap" ]; then + xmodmap "$sysmodmap" + fi + + if [ -f "$usermodmap" ]; then + xmodmap "$usermodmap" + fi +fi + +unset XKB_IN_USE + +# run all system xinitrc shell scripts. +if [ -d /etc/X11/xinit/xinitrc.d ]; then + for i in /etc/X11/xinit/xinitrc.d/* ; do + if [ -x "$i" ]; then + . "$i" + fi + done +fi + +exec $command diff --git a/mate-base/mate-session-manager/files/defaults.list b/mate-base/mate-session-manager/files/defaults.list new file mode 100644 index 000000000000..0d6d6bf9509a --- /dev/null +++ b/mate-base/mate-session-manager/files/defaults.list @@ -0,0 +1,336 @@ +[Default Applications] +application/rtf=abiword.desktop +application/x-abiword=abiword.desktop +text/abiword=abiword.desktop +text/richtext=abiword.desktop +text/rtf=abiword.desktop +text/x-abiword=abiword.desktop +text/x-xml-abiword=abiword.desktop +x-content/blank-bd=brasero-caja.desktop +x-content/blank-dvd=brasero-caja.desktop +x-content/blank-cd=brasero-caja.desktop +x-content/blank-hddvd=brasero-caja.desktop +application/x-dia-diagram=dia.desktop +image/bmp=eom.desktop +image/gif=eom.desktop +image/jpeg=eom.desktop +image/jpg=eom.desktop +image/pjpeg=eom.desktop +image/png=eom.desktop +image/svg+xml=eom.desktop +image/svg+xml-compressed=eom.desktop +image/x-bmp=eom.desktop +image/x-gray=eom.desktop +image/x-icb=eom.desktop +image/x-ico=eom.desktop +image/x-pcx=eom.desktop +image/x-png=eom.desktop +image/x-portable-anymap=eom.desktop +image/x-portable-bitmap=eom.desktop +image/x-portable-graymap=eom.desktop +image/x-portable-pixmap=eom.desktop +image/x-xbitmap=eom.desktop +image/x-xpixmap=eom.desktop +image/vnd.wap.wbmp=eom.desktop +image/g3fax=gimp.desktop +image/x-compressed-xcf=gimp.desktop +image/x-fits=gimp.desktop +image/x-icon=gimp.desktop +image/x-psd=gimp.desktop +image/x-sgi=gimp.desktop +image/x-sun-raster=gimp.desktop +image/x-tga=gimp.desktop +image/x-xcf=gimp.desktop +image/x-xwindowdump=gimp.desktop +application/xhtml+xml=firefox.desktop;firefox-3.6.desktop;epiphany.desktop +text/html=firefox.desktop;firefox-3.6.desktop;epiphany.desktop +application/pdf=atril.desktop +application/x-bzpdf=atril.desktop +application/x-gzpdf=atril.desktop +application/postscript=atril.desktop +application/x-bzpostscript=atril.desktop +application/x-gzpostscript=atril.desktop +image/x-eps=atril.desktop +image/x-bzeps=atril.desktop +image/x-gzeps=atril.desktop +application/x-dvi=atril.desktop +application/x-bzdvi=atril.desktop +application/x-gzdvi=atril.desktop +image/vnd.djvu=atril.desktop +image/tiff=atril.desktop +application/x-cbr=atril.desktop +application/x-cbz=atril.desktop +application/x-cb7=atril.desktop +application/x-7z-compressed=engrampa.desktop +application/x-7z-compressed-tar=engrampa.desktop +application/x-ace=engrampa.desktop +application/x-alz=engrampa.desktop +application/x-ar=engrampa.desktop +application/x-arj=engrampa.desktop +application/x-bzip=engrampa.desktop +application/x-bzip-compressed-tar=engrampa.desktop +application/x-bzip1=engrampa.desktop +application/x-bzip1-compressed-tar=engrampa.desktop +application/x-cabinet=engrampa.desktop +application/x-cd-image=engrampa.desktop +application/x-compress=engrampa.desktop +application/x-compressed-tar=engrampa.desktop +application/x-cpio=engrampa.desktop +application/x-deb=engrampa.desktop +application/x-ear=engrampa.desktop +application/x-gtar=engrampa.desktop +application/x-gzip=engrampa.desktop +application/x-java-archive=engrampa.desktop +application/x-lha=engrampa.desktop +application/x-lhz=engrampa.desktop +application/x-lzip=engrampa.desktop +application/x-lzip-compressed-tar=engrampa.desktop +application/x-lzma=engrampa.desktop +application/x-lzma-compressed-tar=engrampa.desktop +application/x-lzop=engrampa.desktop +application/x-lzop-compressed-tar=engrampa.desktop +application/x-rar=engrampa.desktop +application/x-rar-compressed=engrampa.desktop +application/x-rpm=engrampa.desktop +application/x-rzip=engrampa.desktop +application/x-tar=engrampa.desktop +application/x-tarz=engrampa.desktop +application/x-stuffit=engrampa.desktop +application/x-war=engrampa.desktop +application/x-xz=engrampa.desktop +application/x-xz-compressed-tar=engrampa.desktop +application/x-zip=engrampa.desktop +application/x-zip-compressed=engrampa.desktop +application/x-zoo=engrampa.desktop +application/zip=engrampa.desktop +multipart/x-zip=engrampa.desktop +text/plain=pluma.desktop +text/css=pluma.desktop +text/javascript=pluma.desktop +text/mathml=pluma.desktop +text/x-csrc=pluma.desktop +text/x-chdr=pluma.desktop +text/x-dtd=pluma.desktop +text/x-java=pluma.desktop +text/x-javascript=pluma.desktop +text/x-patch=pluma.desktop +text/x-perl=pluma.destkop +text/x-php=pluma.destkop +text/x-python=pluma.destkop +text/x-sql=pluma.desktop +text/xml=pluma.desktop +application/javascript=pluma.destkop +application/x-cgi=pluma.desktop +application/x-javascript=pluma.desktop +application/x-perl=pluma.desktop +application/x-php=pluma.desktop +application/x-python=pluma.desktop +application/xml=pluma.desktop +application/xml-dtd=pluma.desktop +application/x-font-ttf=mate-font-viewer.desktop +application/x-font-pcf=mate-font-viewer.desktop +application/x-font-type1=mate-font-viewer.desktop +application/x-font-otf=mate-font-viewer.desktop +application/csv=gnumeric.desktop +application/excel=gnumeric.desktop +application/msexcel=gnumeric.desktop +application/tab-separated-values=gnumeric.desktop +application/vnd.lotus-1-2-3=gnumeric.desktop +application/vnd.ms-excel=gnumeric.desktop +application/x-123=gnumeric.desktop +application/x-applix-spreadsheet=gnumeric.desktop +application/x-dbase=gnumeric.desktop +application/x-dbf=gnumeric.desktop +application/x-dos_ms_excel=gnumeric.desktop +application/x-excel=gnumeric.desktop +application/x-gnumeric=gnumeric.desktop +application/x-mps=gnumeric.desktop +application/x-ms-excel=gnumeric.desktop +application/x-msexcel=gnumeric.desktop +application/x-oleo=gnumeric.desktop +application/x-planperfect=gnumeric.desktop +application/x-quattropro=gnumeric.desktop +application/x-sc=gnumeric.desktop +application/x-sylk=gnumeric.desktop +application/x-xbase=gnumeric.desktop +application/x-xls=gnumeric.desktop +application/xls=gnumeric.desktop +text/comma-separated-values=gnumeric.desktop +text/csv=gnumeric.desktop +text/spreadsheet=gnumeric.desktop +text/tab-separated-values=gnumeric.desktop +text/x-comma-separated-values=gnumeric.desktop +text/x-csv=gnumeric.desktop +zz-application/zz-winassoc-xls=gnumeric.desktop +x-content/software=caja-autorun-software.desktop +x-directory/gnome-default-handler=caja-folder-handler.desktop +x-directory/normal=caja-folder-handler.desktop +inode/directory=caja-folder-handler.desktop +application/x-gnome-saved-search=caja-folder-handler.desktop +application/vnd.oasis.opendocument.spreadsheet=libreoffice-calc.desktop;openoffice.org-calc.desktop +application/vnd.oasis.opendocument.spreadsheet-template=libreoffice-calc.desktop;openoffice.org-calc.desktop +application/vnd.sun.xml.calc=libreoffice-calc.desktop;openoffice.org-calc.desktop +application/vnd.sun.xml.calc.template=libreoffice-calc.desktop;openoffice.org-calc.desktop +application/vnd.stardivision.calc=libreoffice-calc.desktop;openoffice.org-calc.desktop +application/vnd.stardivision.chart=libreoffice-calc.desktop;openoffice.org-calc.desktop +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=libreoffice-calc.desktop;openoffice.org-calc.desktop +application/vnd.ms-excel.sheet.macroenabled.12=libreoffice-calc.desktop;openoffice.org-calc.desktop +application/vnd.openxmlformats-officedocument.spreadsheetml.template=libreoffice-calc.desktop;openoffice.org-calc.desktop +application/vnd.ms-excel.template.macroenabled.12=libreoffice-calc.desktop;openoffice.org-calc.desktop +application/vnd.ms-excel.sheet.binary.macroenabled.12=libreoffice-calc.desktop;openoffice.org-calc.desktop +application/vnd.oasis.opendocument.graphics=libreoffice-draw.desktop;openoffice.org-draw.desktop +application/vnd.oasis.opendocument.graphics-template=libreoffice-draw.desktop;openoffice.org-draw.desktop +application/vnd.sun.xml.draw=libreoffice-draw.desktop;openoffice.org-draw.desktop +application/vnd.sun.xml.draw.template=libreoffice-draw.desktop;openoffice.org-draw.desktop +application/vnd.stardivision.draw=libreoffice-draw.desktop;openoffice.org-draw.desktop +application/vnd.oasis.opendocument.presentation=libreoffice-impress.desktop;openoffice.org-impress.desktop +application/vnd.oasis.opendocument.presentation-template=libreoffice-impress.desktop;openoffice.org-impress.desktop +application/vnd.sun.xml.impress=libreoffice-impress.desktop;openoffice.org-impress.desktop +application/vnd.sun.xml.impress.template=libreoffice-impress.desktop;openoffice.org-impress.desktop +application/vnd.stardivision.impress=libreoffice-impress.desktop;openoffice.org-impress.desktop +application/mspowerpoint=libreoffice-impress.desktop;openoffice.org-impress.desktop +application/vnd.ms-powerpoint=libreoffice-impress.desktop;openoffice.org-impress.desktop +application/vnd.openxmlformats-officedocument.presentationml.presentation=libreoffice-impress.desktop;openoffice.org-impress.desktop +application/vnd.ms-powerpoint.presentation.macroenabled.12=libreoffice-impress.desktop;openoffice.org-impress.desktop +application/vnd.openxmlformats-officedocument.presentationml.template=libreoffice-impress.desktop;openoffice.org-impress.desktop +application/vnd.ms-powerpoint.template.macroenabled.12=libreoffice-impress.desktop;openoffice.org-impress.desktop +application/vnd.oasis.opendocument.formula=libreoffice-math.desktop;openoffice.org-math.desktop +application/vnd.sun.xml.math=libreoffice-math.desktop;openoffice.org-math.desktop +application/vnd.stardivision.math=libreoffice-math.desktop;openoffice.org-math.desktop +application/vnd.oasis.opendocument.text=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/vnd.oasis.opendocument.text-template=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/vnd.oasis.opendocument.text-web=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/vnd.oasis.opendocument.text-master=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/vnd.sun.xml.writer=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/vnd.sun.xml.writer.template=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/vnd.sun.xml.writer.global=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/vnd.stardivision.writer=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/msword=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/vnd.ms-word=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/x-doc=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/vnd.wordperfect=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/wordperfect=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/vnd.ms-word.document.macroenabled.12=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/vnd.openxmlformats-officedocument.wordprocessingml.template=libreoffice-writer.desktop;openoffice.org-writer.desktop +application/vnd.ms-word.template.macroenabled.12=libreoffice-writer.desktop;openoffice.org-writer.desktop +x-content/audio-player=rhythmbox.desktop +x-content/audio-cdda=sound-juicer.desktop +application/x-shockwave-flash=swfdec-player.desktop +application/futuresplash=swfdec-player.desktop +application/mxf=vlc.desktop +application/ogg=vlc.desktop +application/ram=vlc.desktop +application/sdp=vlc.desktop +application/smil=vlc.desktop +application/smil+xml=vlc.desktop +application/vnd.ms-wpl=vlc.desktop +application/vnd.rn-realmedia=vlc.desktop +application/x-extension-m4a=vlc.desktop +application/x-extension-mp4=vlc.desktop +application/x-flac=vlc.desktop +application/x-flash-video=vlc.desktop +application/x-lyx=lyx.desktop +application/x-matroska=vlc.desktop +application/x-netshow-channel=vlc.desktop +application/x-ogg=vlc.desktop +application/x-quicktime-media-link=vlc.desktop +application/x-quicktimeplayer=vlc.desktop +application/x-shorten=vlc.desktop +application/x-smil=vlc.desktop +application/xspf+xml=vlc.desktop +audio/3gpp=vlc.desktop +audio/ac3=vlc.desktop +audio/AMR=vlc.desktop +audio/AMR-WB=vlc.desktop +audio/basic=vlc.desktop +audio/midi=vlc.desktop +audio/mp4=vlc.desktop +audio/mpeg=vlc.desktop +audio/mpegurl=vlc.desktop +audio/ogg=vlc.desktop +audio/prs.sid=vlc.desktop +audio/vnd.rn-realaudio=vlc.desktop +audio/x-ape=vlc.desktop +audio/x-flac=vlc.desktop +audio/x-gsm=vlc.desktop +audio/x-it=vlc.desktop +audio/x-m4a=vlc.desktop +audio/x-matroska=vlc.desktop +audio/x-mod=vlc.desktop +audio/x-mp3=vlc.desktop +audio/x-mpeg=vlc.desktop +audio/x-mpegurl=vlc.desktop +audio/x-ms-asf=vlc.desktop +audio/x-ms-asx=vlc.desktop +audio/x-ms-wax=vlc.desktop +audio/x-ms-wma=vlc.desktop +audio/x-musepack=vlc.desktop +audio/x-pn-aiff=vlc.desktop +audio/x-pn-au=vlc.desktop +audio/x-pn-realaudio=vlc.desktop +audio/x-pn-realaudio-plugin=vlc.desktop +audio/x-pn-wav=vlc.desktop +audio/x-pn-windows-acm=vlc.desktop +audio/x-realaudio=vlc.desktop +audio/x-real-audio=vlc.desktop +audio/x-sbc=vlc.desktop +audio/x-scpls=vlc.desktop +audio/x-speex=vlc.desktop +audio/x-tta=vlc.desktop +audio/x-vorbis=audacious.desktop +audio/x-vorbis+ogg=audacious.desktop +audio/x-wav=audacious.desktop +audio/x-wavpack=audacious.desktop +audio/x-xm=audacious.desktop +image/vnd.rn-realpix=vlc.desktop +image/x-pict=vlc.desktop +misc/ultravox=vlc.desktop +text/google-video-pointer=vlc.desktop +text/x-google-video-pointer=vlc.desktop +video/3gpp=vlc.desktop +video/dv=vlc.desktop +video/fli=vlc.desktop +video/flv=vlc.desktop +video/mp2t=vlc.desktop +video/mp4=vlc.desktop +video/mp4v-es=vlc.desktop +video/mpeg=vlc.desktop +video/msvideo=vlc.desktop +video/ogg=vlc.desktop +video/quicktime=vlc.desktop +video/vivo=vlc.desktop +video/vnd.divx=vlc.desktop +video/vnd.rn-realvideo=vlc.desktop +video/vnd.vivo=vlc.desktop +video/webm=vlc.desktop +video/x-anim=vlc.desktop +video/x-avi=vlc.desktop +video/x-flc=vlc.desktop +video/x-fli=vlc.desktop +video/x-flic=vlc.desktop +video/x-flv=vlc.desktop +video/x-m4v=vlc.desktop +video/x-matroska=vlc.desktop +video/x-mpeg=vlc.desktop +video/x-ms-asf=vlc.desktop +video/x-ms-asx=vlc.desktop +video/x-msvideo=vlc.desktop +video/x-ms-wm=vlc.desktop +video/x-ms-wmv=vlc.desktop +video/x-ms-wmx=vlc.desktop +video/x-ms-wvx=vlc.desktop +video/x-nsv=vlc.desktop +video/x-ogm+ogg=vlc.desktop +video/x-theora+ogg=vlc.desktop +video/x-totem-stream=vlc.desktop +x-content/video-dvd=vlc.desktop +x-content/video-vcd=vlc.desktop +x-content/video-svcd=vlc.desktop +x-scheme-handler/ghelp=yelp.desktop; +x-scheme-handler/help=yelp.desktop; +x-scheme-handler/http=firefox.desktop;epiphany.desktop +x-scheme-handler/https=firefox.desktop;epiphany.desktop +x-scheme-handler/mailto=evolution.desktop +application/x-bittorrent=transmission-gtk.desktop;deluge.desktop +x-scheme-handler/magnet=transmission-gtk.desktop;deluge.desktop diff --git a/mate-base/mate-session-manager/files/mate-session-manager-1.2.0-idle-transition.patch b/mate-base/mate-session-manager/files/mate-session-manager-1.2.0-idle-transition.patch new file mode 100644 index 000000000000..62a229e55be3 --- /dev/null +++ b/mate-base/mate-session-manager/files/mate-session-manager-1.2.0-idle-transition.patch @@ -0,0 +1,10 @@ +--- a/mate-session/gs-idle-monitor.c 2012-02-29 22:03:08.000000000 +0100 ++++ b/mate-session/gs-idle-monitor.c 2012-08-08 11:49:13.308281663 +0200 +@@ -448,6 +448,7 @@ + attr.delta = delta; + attr.events = TRUE; + ++ attr.trigger.wait_value = _int64_to_xsyncvalue (_xsyncvalue_to_int64 (watch->interval) - 1); + attr.trigger.test_type = XSyncPositiveTransition; + if (watch->xalarm_positive != None) { + g_debug ("GSIdleMonitor: updating alarm for positive transition wait=%lld", diff --git a/mate-base/mate-session-manager/files/mate-session-manager-1.5.2-save-session-ui.patch b/mate-base/mate-session-manager/files/mate-session-manager-1.5.2-save-session-ui.patch new file mode 100644 index 000000000000..8a57d44a9180 --- /dev/null +++ b/mate-base/mate-session-manager/files/mate-session-manager-1.5.2-save-session-ui.patch @@ -0,0 +1,535 @@ +diff -burN a/capplet/gsm-properties-dialog.c b/capplet/gsm-properties-dialog.c +--- a/capplet/gsm-properties-dialog.c 2012-02-29 22:03:08.000000000 +0100 ++++ b/capplet/gsm-properties-dialog.c 2012-08-08 12:16:37.527332034 +0200 +@@ -26,6 +26,8 @@ + #include + #include + #include ++#include ++#include + + #include + +@@ -36,6 +38,11 @@ + #include "gsp-app.h" + #include "gsp-app-manager.h" + ++ ++#define GSM_SERVICE_DBUS "org.mate.SessionManager" ++#define GSM_PATH_DBUS "/org/mate/SessionManager" ++#define GSM_INTERFACE_DBUS "org.mate.SessionManager" ++ + #define GSM_PROPERTIES_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSM_TYPE_PROPERTIES_DIALOG, GsmPropertiesDialogPrivate)) + + #define IS_STRING_EMPTY(x) ((x)==NULL||(x)[0]=='\0') +@@ -50,6 +57,7 @@ + #define CAPPLET_DELETE_WIDGET_NAME "session_properties_delete_button" + #define CAPPLET_EDIT_WIDGET_NAME "session_properties_edit_button" + #define CAPPLET_SAVE_WIDGET_NAME "session_properties_save_button" ++#define CAPPLET_SESSION_SAVED_WIDGET_NAME "session_properties_session_saved_label" + #define CAPPLET_REMEMBER_WIDGET_NAME "session_properties_remember_toggle" + + #define STARTUP_APP_ICON "system-run" +@@ -493,10 +501,66 @@ + } + + static void ++session_saved_message (GsmPropertiesDialog *dialog, ++ const char *msg, ++ gboolean is_error) ++{ ++ GtkLabel *label; ++ gchar *markup; ++ ++ label = GTK_LABEL (gtk_builder_get_object (dialog->priv->xml, CAPPLET_SESSION_SAVED_WIDGET_NAME)); ++ if (is_error) ++ markup = g_markup_printf_escaped ("%s", msg); ++ else ++ markup = g_markup_escape_text (msg, -1); ++ ++ gtk_label_set_markup (label, markup); ++ g_free (markup); ++} ++ ++static void ++session_saved_cb (DBusGProxy *proxy, ++ DBusGProxyCall *call_id, ++ void *user_data) ++{ ++ gboolean res; ++ GsmPropertiesDialog *dialog = user_data; ++ ++ res = dbus_g_proxy_end_call (proxy, call_id, NULL, G_TYPE_INVALID); ++ if (res) ++ session_saved_message (dialog, _("Your session has been saved."), FALSE); ++ else ++ session_saved_message (dialog, _("Failed to save session"), TRUE); ++ ++ g_object_unref (proxy); ++} ++ ++static void + on_save_session_clicked (GtkWidget *widget, + GsmPropertiesDialog *dialog) + { +- g_debug ("Session saving is not implemented yet!"); ++ DBusGConnection *conn; ++ DBusGProxy *proxy; ++ DBusGProxyCall *call; ++ ++ conn = dbus_g_bus_get (DBUS_BUS_SESSION, NULL); ++ if (conn == NULL) { ++ session_saved_message (dialog, _("Could not connect to the session bus"), TRUE); ++ return; ++ } ++ ++ proxy = dbus_g_proxy_new_for_name (conn, GSM_SERVICE_DBUS, GSM_PATH_DBUS, GSM_INTERFACE_DBUS); ++ if (proxy == NULL) { ++ session_saved_message (dialog, _("Could not connect to the session manager"), TRUE); ++ return; ++ } ++ ++ call = dbus_g_proxy_begin_call (proxy, "SaveSession", session_saved_cb, dialog, NULL, G_TYPE_INVALID); ++ if (call == NULL) { ++ session_saved_message (dialog, _("Failed to save session"), TRUE); ++ g_object_unref (proxy); ++ return; ++ } + } + + static void +diff -burN a/configure.ac b/configure.ac +--- a/configure.ac 2012-02-29 22:03:09.000000000 +0100 ++++ b/configure.ac 2012-08-08 12:18:58.740336360 +0200 +@@ -75,6 +75,7 @@ + PKG_CHECK_MODULES(SESSION_PROPERTIES, + glib-2.0 >= $GLIB_REQUIRED + gtk+-$GTK_API_VERSION >= $GTK_REQUIRED ++ dbus-glib-1 >= $DBUS_GLIB_REQUIRED + ) + + PKG_CHECK_MODULES(SM, sm) +diff -burN a/data/session-properties.ui b/data/session-properties.ui +--- a/data/session-properties.ui 2012-02-29 22:03:08.000000000 +0100 ++++ b/data/session-properties.ui 2012-08-08 12:22:36.619343035 +0200 +@@ -148,6 +148,7 @@ + True + + ++ True + True + True + +@@ -191,6 +192,17 @@ + 1 + + ++ ++ ++ True ++ True ++ ++ ++ False ++ False ++ 2 ++ ++ + + + 1 +diff -burN a/mate-session/gsm-client.c b/mate-session/gsm-client.c +--- a/mate-session/gsm-client.c 2012-02-29 22:03:08.000000000 +0100 ++++ b/mate-session/gsm-client.c 2012-08-08 12:24:20.120346205 +0200 +@@ -510,6 +510,17 @@ + g_signal_emit (client, signals[DISCONNECTED], 0); + } + ++gboolean ++gsm_client_request_save (GsmClient *client, ++ guint flags, ++ GError **error) ++{ ++ g_return_val_if_fail (GSM_IS_CLIENT (client), FALSE); ++ ++ return GSM_CLIENT_GET_CLASS (client)->impl_request_save (client, flags, error); ++} ++ ++ + GKeyFile * + gsm_client_save (GsmClient *client, + GError **error) +diff -burN a/mate-session/gsm-client.h b/mate-session/gsm-client.h +--- a/mate-session/gsm-client.h 2012-02-29 22:03:09.000000000 +0100 ++++ b/mate-session/gsm-client.h 2012-08-08 12:26:38.848350455 +0200 +@@ -94,6 +94,9 @@ + GError **error); + gboolean (*impl_stop) (GsmClient *client, + GError **error); ++ gboolean (*impl_request_save) (GsmClient *client, ++ guint flags, ++ GError **error); + GKeyFile * (*impl_save) (GsmClient *client, + GError **error); + }; +@@ -139,6 +142,10 @@ + + void gsm_client_disconnected (GsmClient *client); + ++gboolean gsm_client_request_save (GsmClient *client, ++ guint flags, ++ GError **error); ++ + GKeyFile *gsm_client_save (GsmClient *client, + GError **error); + /* exported to bus */ +diff -burN a/mate-session/gsm-dbus-client.c b/mate-session/gsm-dbus-client.c +--- a/mate-session/gsm-dbus-client.c 2012-02-29 22:03:08.000000000 +0100 ++++ b/mate-session/gsm-dbus-client.c 2012-08-08 12:38:15.393371794 +0200 +@@ -413,6 +413,19 @@ + G_OBJECT_CLASS (gsm_dbus_client_parent_class)->finalize (object); + } + ++static gboolean ++dbus_client_request_save (GsmClient *client, ++ guint flags, ++ GError **error) ++{ ++ g_debug ("GsmDBusClient: sending save request to client with id %s", ++ gsm_client_peek_id (client)); ++ ++ /* FIXME: The protocol does not support this */ ++ ++ return FALSE; ++} ++ + static GKeyFile * + dbus_client_save (GsmClient *client, + GError **error) +@@ -665,6 +678,7 @@ + object_class->set_property = gsm_dbus_client_set_property; + object_class->dispose = gsm_dbus_client_dispose; + ++ client_class->impl_request_save = dbus_client_request_save; + 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; +diff -burN a/mate-session/gsm-manager.c b/mate-session/gsm-manager.c +--- a/mate-session/gsm-manager.c 2012-02-29 22:03:09.000000000 +0100 ++++ b/mate-session/gsm-manager.c 2012-08-08 12:47:24.627388620 +0200 +@@ -68,6 +68,7 @@ + #define GSM_MANAGER_DBUS_NAME "org.mate.SessionManager" + + #define GSM_MANAGER_PHASE_TIMEOUT 30 /* seconds */ ++#define GSM_MANAGER_SAVE_SESSION_TIMEOUT 2 + + #define MDM_FLEXISERVER_COMMAND "mdmflexiserver" + #define MDM_FLEXISERVER_ARGS "--startnew Standard" +@@ -1176,6 +1177,69 @@ + + } + ++static gboolean ++_client_request_save (GsmClient *client, ++ ClientEndSessionData *data) ++{ ++ gboolean ret; ++ GError *error; ++ ++ error = NULL; ++ ret = gsm_client_request_save (client, data->flags, &error); ++ if (ret) { ++ g_debug ("GsmManager: adding client to query clients: %s", gsm_client_peek_id (client)); ++ data->manager->priv->query_clients = g_slist_prepend (data->manager->priv->query_clients, ++ client); ++ } else if (error) { ++ g_debug ("GsmManager: unable to query client: %s", error->message); ++ g_error_free (error); ++ } ++ ++ return FALSE; ++} ++ ++static gboolean ++_client_request_save_helper (const char *id, ++ GsmClient *client, ++ ClientEndSessionData *data) ++{ ++ return _client_request_save (client, data); ++} ++ ++static void ++query_save_session_complete (GsmManager *manager) ++{ ++ GError *error = NULL; ++ ++ if (g_slist_length (manager->priv->next_query_clients) > 0) { ++ ClientEndSessionData data; ++ ++ data.manager = manager; ++ data.flags = GSM_CLIENT_END_SESSION_FLAG_LAST; ++ ++ g_slist_foreach (manager->priv->next_query_clients, ++ (GFunc)_client_request_save, ++ &data); ++ ++ g_slist_free (manager->priv->next_query_clients); ++ manager->priv->next_query_clients = NULL; ++ ++ return; ++ } ++ ++ if (manager->priv->query_timeout_id > 0) { ++ g_source_remove (manager->priv->query_timeout_id); ++ manager->priv->query_timeout_id = 0; ++ } ++ ++ gsm_session_save (manager->priv->clients, &error); ++ ++ if (error) { ++ g_warning ("Error saving session: %s", error->message); ++ g_error_free (error); ++ } ++} ++ + static guint32 + generate_cookie (void) + { +@@ -1250,6 +1314,21 @@ + return FALSE; + } + ++static gboolean ++_on_query_save_session_timeout (GsmManager *manager) ++{ ++ manager->priv->query_timeout_id = 0; ++ ++ g_debug ("GsmManager: query to save session timed out"); ++ ++ g_slist_free (manager->priv->query_clients); ++ manager->priv->query_clients = NULL; ++ ++ query_save_session_complete (manager); ++ ++ return FALSE; ++} ++ + static void + do_phase_query_end_session (GsmManager *manager) + { +@@ -1886,13 +1965,32 @@ + const char *reason, + GsmManager *manager) + { +- /* just ignore if received outside of shutdown */ +- if (manager->priv->phase < GSM_MANAGER_PHASE_QUERY_END_SESSION) { ++ /* just ignore if we are not yet running */ ++ if (manager->priv->phase < GSM_MANAGER_PHASE_RUNNING) { + return; + } + + g_debug ("GsmManager: Response from end session request: is-ok=%d do-last=%d cancel=%d reason=%s", is_ok, do_last, cancel, reason ? reason :""); + ++ if (manager->priv->phase == GSM_MANAGER_PHASE_RUNNING) { ++ /* Ignore responses when no requests were sent */ ++ if (manager->priv->query_clients == NULL) { ++ return; ++ } ++ ++ manager->priv->query_clients = g_slist_remove (manager->priv->query_clients, client); ++ ++ if (do_last) { ++ manager->priv->next_query_clients = g_slist_prepend (manager->priv->next_query_clients, ++ client); ++ } ++ ++ if (manager->priv->query_clients == NULL) { ++ query_save_session_complete (manager); ++ } ++ return; ++ } ++ + if (cancel) { + cancel_end_session (manager); + return; +@@ -1991,6 +2089,15 @@ + } + + static void ++on_xsmp_client_save_request (GsmXSMPClient *client, ++ gboolean show_dialog, ++ GsmManager *manager) ++{ ++ g_debug ("GsmManager: save_request"); ++ gsm_manager_save_session (manager, NULL); ++} ++ ++static void + on_store_client_added (GsmStore *store, + const char *id, + GsmManager *manager) +@@ -2011,6 +2118,10 @@ + "logout-request", + G_CALLBACK (on_xsmp_client_logout_request), + manager); ++ g_signal_connect (client, ++ "save-request", ++ G_CALLBACK (on_xsmp_client_save_request), ++ manager); + } + + g_signal_connect (client, +@@ -2968,6 +3079,41 @@ + } + + gboolean ++gsm_manager_save_session (GsmManager *manager, ++ GError **error) ++{ ++ ClientEndSessionData data; ++ ++ g_debug ("GsmManager: SaveSession called"); ++ ++ g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE); ++ ++ if (manager->priv->phase != GSM_MANAGER_PHASE_RUNNING) { ++ g_set_error (error, ++ GSM_MANAGER_ERROR, ++ GSM_MANAGER_ERROR_NOT_IN_RUNNING, ++ "SaveSession interface is only available during the Running phase"); ++ return FALSE; ++ } ++ ++ data.manager = manager; ++ data.flags = 0; ++ gsm_store_foreach (manager->priv->clients, ++ (GsmStoreFunc)_client_request_save_helper, ++ &data); ++ ++ if (manager->priv->query_clients) { ++ manager->priv->query_timeout_id = g_timeout_add_seconds (GSM_MANAGER_SAVE_SESSION_TIMEOUT, ++ (GSourceFunc)_on_query_save_session_timeout, ++ manager); ++ return TRUE; ++ } else { ++ g_debug ("GsmManager: Nothing to save"); ++ return FALSE; ++ } ++} ++ ++gboolean + gsm_manager_can_shutdown (GsmManager *manager, + gboolean *shutdown_available, + GError **error) +diff -burN a/mate-session/gsm-manager.h b/mate-session/gsm-manager.h +--- a/mate-session/gsm-manager.h 2012-02-29 22:03:09.000000000 +0100 ++++ b/mate-session/gsm-manager.h 2012-08-08 12:49:14.262391979 +0200 +@@ -154,6 +154,9 @@ + gboolean gsm_manager_shutdown (GsmManager *manager, + GError **error); + ++gboolean gsm_manager_save_session (GsmManager *manager, ++ GError **error); ++ + gboolean gsm_manager_can_shutdown (GsmManager *manager, + gboolean *shutdown_available, + GError **error); +diff -burN a/mate-session/gsm-xsmp-client.c b/mate-session/gsm-xsmp-client.c +--- a/mate-session/gsm-xsmp-client.c 2012-02-29 22:03:08.000000000 +0100 ++++ b/mate-session/gsm-xsmp-client.c 2012-08-08 12:52:27.719397905 +0200 +@@ -69,6 +69,7 @@ + enum { + REGISTER_REQUEST, + LOGOUT_REQUEST, ++ SAVE_REQUEST, + LAST_SIGNAL + }; + +@@ -502,6 +503,31 @@ + return TRUE; + } + ++static gboolean ++xsmp_request_save (GsmClient *client, ++ guint flags, ++ GError **error) ++{ ++ GsmXSMPClient *xsmp = (GsmXSMPClient *) client; ++ ++ g_debug ("GsmXSMPClient: xsmp_request_save ('%s')", xsmp->priv->description); ++ ++ if (xsmp->priv->conn == NULL) { ++ g_set_error (error, ++ GSM_CLIENT_ERROR, ++ GSM_CLIENT_ERROR_NOT_REGISTERED, ++ "Client is not registered"); ++ return FALSE; ++ } ++ ++ if (flags & GSM_CLIENT_END_SESSION_FLAG_LAST) ++ xsmp_save_yourself_phase2 (client); ++ else ++ do_save_yourself (xsmp, SmSaveLocal, FALSE); ++ ++ return TRUE; ++} ++ + static char * + get_desktop_file_path (GsmXSMPClient *client) + { +@@ -976,6 +1002,8 @@ + object_class->get_property = gsm_xsmp_client_get_property; + object_class->set_property = gsm_xsmp_client_set_property; + ++ ++ client_class->impl_request_save = xsmp_request_save; + client_class->impl_save = xsmp_save; + client_class->impl_stop = xsmp_stop; + client_class->impl_query_end_session = xsmp_query_end_session; +@@ -1003,6 +1031,16 @@ + NULL, + NULL, + g_cclosure_marshal_VOID__BOOLEAN, ++ G_TYPE_NONE, ++ 1, G_TYPE_BOOLEAN); ++ signals[SAVE_REQUEST] = ++ g_signal_new ("save-request", ++ G_OBJECT_CLASS_TYPE (object_class), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GsmXSMPClientClass, save_request), ++ NULL, ++ NULL, ++ g_cclosure_marshal_VOID__BOOLEAN, + G_TYPE_NONE, + 1, G_TYPE_BOOLEAN); + +diff -burN a/mate-session/gsm-xsmp-client.h b/mate-session/gsm-xsmp-client.h +--- a/mate-session/gsm-xsmp-client.h 2012-02-29 22:03:09.000000000 +0100 ++++ b/mate-session/gsm-xsmp-client.h 2012-08-08 12:53:39.629400108 +0200 +@@ -57,6 +57,8 @@ + gboolean (*logout_request) (GsmXSMPClient *client, + gboolean prompt); + ++ gboolean (*save_request) (GsmXSMPClient *client, ++ gboolean prompt); + + void (*saved_state) (GsmXSMPClient *client); + +diff -burN a/mate-session/org.mate.SessionManager.xml b/mate-session/org.mate.SessionManager.xml +--- a/mate-session/org.mate.SessionManager.xml 2012-02-29 22:03:09.000000000 +0100 ++++ b/mate-session/org.mate.SessionManager.xml 2012-08-08 12:57:41.216407509 +0200 +@@ -256,6 +256,14 @@ + + + ++ ++ ++ ++ Request to save session ++ ++ ++ ++ + + + diff --git a/mate-base/mate-session-manager/files/mate-session-manager-1.6-gnome-keyring.patch b/mate-base/mate-session-manager/files/mate-session-manager-1.6-gnome-keyring.patch new file mode 100644 index 000000000000..28bb80e0347d --- /dev/null +++ b/mate-base/mate-session-manager/files/mate-session-manager-1.6-gnome-keyring.patch @@ -0,0 +1,328 @@ +diff --git a/mate-session/Makefile.am b/mate-session/Makefile.am +index f37a0e2..2c73d63 100644 +--- a/mate-session/Makefile.am ++++ b/mate-session/Makefile.am +@@ -42,6 +42,8 @@ mate_session_SOURCES = \ + mdm-signal-handler.c \ + mdm-log.h \ + mdm-log.c \ ++ msm-gnome.c \ ++ msm-gnome.h \ + main.c \ + gsm-store.h \ + gsm-store.c \ +diff --git a/mate-session/main.c b/mate-session/main.c +index 6cfbbe6..f6bee9a 100644 +--- a/mate-session/main.c ++++ b/mate-session/main.c +@@ -51,6 +51,8 @@ + #include "gsm-xsmp-server.h" + #include "gsm-store.h" + ++#include "msm-gnome.h" ++ + #define GSM_SCHEMA "org.mate.session" + #define GSM_DEFAULT_SESSION_KEY "default-session" + #define GSM_REQUIRED_COMPONENTS_SCHEMA GSM_SCHEMA ".required-components" +@@ -542,6 +544,9 @@ int main(int argc, char** argv) + */ + acquire_name(); + ++ /* Starts gnome compat mode */ ++ msm_compat_gnome_startup (); ++ + manager = gsm_manager_new(client_store, failsafe); + + signal_handler = mdm_signal_handler_new(); +@@ -583,6 +588,7 @@ int main(int argc, char** argv) + g_object_unref(client_store); + } + ++ msm_compat_gnome_shutdown(); + mdm_log_shutdown(); + + return 0; +diff --git a/mate-session/msm-gnome.c b/mate-session/msm-gnome.c +new file mode 100644 +index 0000000..5c7d8dc +--- /dev/null ++++ b/mate-session/msm-gnome.c +@@ -0,0 +1,242 @@ ++/* ++ * Copyright (c) 2004-2005 Benedikt Meurer ++ * 2013 Stefano Karapetsas ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2, or (at your option) ++ * any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, ++ * MA 02110-1301 USA. ++ * ++ * Most parts of this file where taken from xfce4-session and ++ * gnome-session. ++ */ ++ ++#include "config.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++ ++#include "msm-gnome.h" ++ ++#define GNOME_KEYRING_DAEMON "gnome-keyring-daemon" ++ ++ ++static gboolean gnome_compat_started = FALSE; ++static int keyring_lifetime_pipe[2]; ++static pid_t gnome_keyring_daemon_pid = 0; ++static Window gnome_smproxy_window = None; ++ ++static void ++child_setup (gpointer user_data) ++{ ++ gint open_max; ++ gint fd; ++ char *fd_str; ++ ++ open_max = sysconf (_SC_OPEN_MAX); ++ for (fd = 3; fd < open_max; fd++) ++ { ++ if (fd != keyring_lifetime_pipe[0]) ++ fcntl (fd, F_SETFD, FD_CLOEXEC); ++ } ++ ++ fd_str = g_strdup_printf ("%d", keyring_lifetime_pipe[0]); ++ g_setenv ("GNOME_KEYRING_LIFETIME_FD", fd_str, TRUE); ++ g_free (fd_str); ++} ++ ++ ++static void ++gnome_keyring_daemon_startup (void) ++{ ++ GError *error = NULL; ++ gchar *sout; ++ gchar **lines; ++ gsize lineno; ++ gint status; ++ glong pid; ++ gchar *end; ++ gchar *argv[3]; ++ gchar *p; ++ gchar *name; ++ const gchar *value; ++ ++ /* Pipe to slave keyring lifetime to */ ++ if (pipe (keyring_lifetime_pipe)) ++ { ++ g_warning ("Failed to set up pipe for gnome-keyring: %s", strerror (errno)); ++ return; ++ } ++ ++ error = NULL; ++ argv[0] = GNOME_KEYRING_DAEMON; ++ argv[1] = "--start"; ++ argv[2] = NULL; ++ g_spawn_sync (NULL, argv, NULL, ++ G_SPAWN_SEARCH_PATH | G_SPAWN_LEAVE_DESCRIPTORS_OPEN, ++ child_setup, NULL, ++ &sout, NULL, &status, &error); ++ ++ close (keyring_lifetime_pipe[0]); ++ /* We leave keyring_lifetime_pipe[1] open for the lifetime of the session, ++ in order to slave the keyring daemon lifecycle to the session. */ ++ ++ if (error != NULL) ++ { ++ g_printerr ("Failed to run gnome-keyring-daemon: %s\n", ++ error->message); ++ g_error_free (error); ++ } ++ else ++ { ++ if (WIFEXITED (status) && WEXITSTATUS (status) == 0 && sout != NULL) ++ { ++ lines = g_strsplit (sout, "\n", 0); ++ ++ for (lineno = 0; lines[lineno] != NULL; lineno++) ++ { ++ p = strchr (lines[lineno], '='); ++ if (p == NULL) ++ continue; ++ ++ name = g_strndup (lines[lineno], p - lines[lineno]); ++ value = p + 1; ++ ++ g_setenv (name, value, TRUE); ++ ++ if (g_strcmp0 (name, "GNOME_KEYRING_PID") == 0) ++ { ++ pid = strtol (value, &end, 10); ++ if (end != value) ++ gnome_keyring_daemon_pid = pid; ++ } ++ ++ g_free (name); ++ } ++ ++ g_strfreev (lines); ++ } ++ else ++ { ++ /* daemon failed for some reason */ ++ g_printerr ("gnome-keyring-daemon failed to start correctly, " ++ "exit code: %d\n", WEXITSTATUS (status)); ++ } ++ ++ g_free (sout); ++ } ++} ++ ++static void ++gnome_keyring_daemon_shutdown (void) ++{ ++ if (gnome_keyring_daemon_pid != 0) ++ { ++ kill (gnome_keyring_daemon_pid, SIGTERM); ++ gnome_keyring_daemon_pid = 0; ++ } ++} ++ ++ ++ ++static void ++msm_compat_gnome_smproxy_startup (void) ++{ ++ Atom gnome_sm_proxy; ++ Display *dpy; ++ Window root; ++ ++ gdk_error_trap_push (); ++ ++ /* Set GNOME_SM_PROXY property, since some apps (like OOo) seem to require ++ * it to behave properly. Thanks to Jasper/Francois for reporting this. ++ * This has another advantage, since it prevents people from running ++ * gnome-smproxy in xfce4, which would cause trouble otherwise. ++ */ ++ dpy = gdk_display; ++ root = RootWindow (dpy, 0); ++ ++ if (gnome_smproxy_window != None) ++ XDestroyWindow (dpy, gnome_smproxy_window); ++ ++ gnome_sm_proxy = XInternAtom (dpy, "GNOME_SM_PROXY", False); ++ gnome_smproxy_window = XCreateSimpleWindow (dpy, root, 1, 1, 1, 1, 0, 0, 0); ++ ++ XChangeProperty (dpy, gnome_smproxy_window, gnome_sm_proxy, ++ XA_CARDINAL, 32, PropModeReplace, ++ (unsigned char *) (void *) &gnome_smproxy_window, 1); ++ XChangeProperty (dpy, root, gnome_sm_proxy, ++ XA_CARDINAL, 32, PropModeReplace, ++ (unsigned char *) (void *) &gnome_smproxy_window, 1); ++ ++ XSync (dpy, False); ++ ++ gdk_error_trap_pop (); ++} ++ ++ ++static void ++msm_compat_gnome_smproxy_shutdown (void) ++{ ++ gdk_error_trap_push (); ++ ++ if (gnome_smproxy_window != None) ++ { ++ XDestroyWindow (gdk_display, gnome_smproxy_window); ++ XSync (gdk_display, False); ++ gnome_smproxy_window = None; ++ } ++ ++ gdk_error_trap_pop (); ++} ++ ++ ++void ++msm_compat_gnome_startup (void) ++{ ++ if (G_UNLIKELY (gnome_compat_started)) ++ return; ++ ++ msm_compat_gnome_smproxy_startup (); ++ ++ gnome_keyring_daemon_startup (); ++ ++ gnome_compat_started = TRUE; ++} ++ ++ ++void ++msm_compat_gnome_shutdown (void) ++{ ++ if (G_UNLIKELY (!gnome_compat_started)) ++ return; ++ ++ /* shutdown the keyring daemon */ ++ gnome_keyring_daemon_shutdown (); ++ ++ msm_compat_gnome_smproxy_shutdown (); ++ ++ gnome_compat_started = FALSE; ++} ++ +diff --git a/mate-session/msm-gnome.h b/mate-session/msm-gnome.h +new file mode 100644 +index 0000000..2f15909 +--- /dev/null ++++ b/mate-session/msm-gnome.h +@@ -0,0 +1,30 @@ ++/* ++ * Copyright (c) 2004 Benedikt Meurer ++ * 2013 Stefano Karapetsas ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2, or (at your option) ++ * any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, ++ * MA 02110-1301 USA. ++ * ++ * Most parts of this file where taken from xfce4-session and ++ * gnome-session. ++ */ ++ ++#ifndef __MSM_GNOME_H__ ++#define __MSM_GNOME_H__ ++ ++void msm_compat_gnome_startup (void); ++void msm_compat_gnome_shutdown (void); ++ ++#endif /* !__MSM_GNOME_H__ */ diff --git a/mate-base/mate-session-manager/files/mate-session-manager-1.6.1-login1.patch b/mate-base/mate-session-manager/files/mate-session-manager-1.6.1-login1.patch new file mode 100644 index 000000000000..009677b1cc44 --- /dev/null +++ b/mate-base/mate-session-manager/files/mate-session-manager-1.6.1-login1.patch @@ -0,0 +1,267 @@ +diff -up mate-session-manager-1.6.1/mate-session/gsm-logout-dialog.c.login1 mate-session-manager-1.6.1/mate-session/gsm-logout-dialog.c +--- mate-session-manager-1.6.1/mate-session/gsm-logout-dialog.c.login1 2013-07-25 10:35:06.000000000 -0500 ++++ mate-session-manager-1.6.1/mate-session/gsm-logout-dialog.c 2013-09-10 08:25:55.450880450 -0500 +@@ -200,13 +200,29 @@ gsm_logout_dialog_destroy (GsmLogoutDial + static gboolean + gsm_logout_supports_system_suspend (GsmLogoutDialog *logout_dialog) + { +- return up_client_get_can_suspend (logout_dialog->priv->up_client); ++ gboolean ret; ++#ifdef HAVE_SYSTEMD ++ if (LOGIND_RUNNING()) ++ ret = gsm_systemd_can_suspend (logout_dialog->priv->systemd); ++ else ++#endif ++ ret = up_client_get_can_suspend (logout_dialog->priv->up_client); ++ ++ return ret; + } + + static gboolean + gsm_logout_supports_system_hibernate (GsmLogoutDialog *logout_dialog) + { +- return up_client_get_can_hibernate (logout_dialog->priv->up_client); ++ gboolean ret; ++#ifdef HAVE_SYSTEMD ++ if (LOGIND_RUNNING()) ++ ret = gsm_systemd_can_hibernate (logout_dialog->priv->systemd); ++ else ++#endif ++ ret = up_client_get_can_hibernate (logout_dialog->priv->up_client); ++ ++ return ret; + } + + static gboolean +diff -up mate-session-manager-1.6.1/mate-session/gsm-manager.c.login1 mate-session-manager-1.6.1/mate-session/gsm-manager.c +--- mate-session-manager-1.6.1/mate-session/gsm-manager.c.login1 2013-07-25 10:35:06.000000000 -0500 ++++ mate-session-manager-1.6.1/mate-session/gsm-manager.c 2013-09-10 08:39:41.199847380 -0500 +@@ -1101,6 +1101,20 @@ manager_attempt_hibernate (GsmManager *m + GError *error; + gboolean ret; + ++#ifdef HAVE_SYSTEMD ++ if (LOGIND_RUNNING()) { ++ ++ GsmSystemd *systemd; ++ ++ systemd = gsm_get_systemd (); ++ ++ /* lock the screen before we suspend */ ++ manager_perhaps_lock (manager); ++ ++ gsm_systemd_attempt_hibernate (systemd); ++ } ++ else { ++#endif + can_hibernate = up_client_get_can_hibernate (manager->priv->up_client); + if (can_hibernate) { + +@@ -1115,6 +1129,9 @@ manager_attempt_hibernate (GsmManager *m + g_error_free (error); + } + } ++#ifdef HAVE_SYSTEMD ++ } ++#endif + } + + static void +@@ -1124,6 +1141,20 @@ manager_attempt_suspend (GsmManager *man + GError *error; + gboolean ret; + ++#ifdef HAVE_SYSTEMD ++ if (LOGIND_RUNNING()) { ++ ++ GsmSystemd *systemd; ++ ++ systemd = gsm_get_systemd (); ++ ++ /* lock the screen before we suspend */ ++ manager_perhaps_lock (manager); ++ ++ gsm_systemd_attempt_suspend (systemd); ++ } ++ else { ++#endif + can_suspend = up_client_get_can_suspend (manager->priv->up_client); + if (can_suspend) { + +@@ -1138,6 +1169,9 @@ manager_attempt_suspend (GsmManager *man + g_error_free (error); + } + } ++#ifdef HAVE_SYSTEMD ++ } ++#endif + } + + static void +diff -up mate-session-manager-1.6.1/mate-session/gsm-systemd.c.login1 mate-session-manager-1.6.1/mate-session/gsm-systemd.c +--- mate-session-manager-1.6.1/mate-session/gsm-systemd.c.login1 2013-07-25 10:35:06.000000000 -0500 ++++ mate-session-manager-1.6.1/mate-session/gsm-systemd.c 2013-09-10 08:51:06.174857597 -0500 +@@ -725,6 +725,141 @@ gsm_systemd_can_stop (GsmSystemd *manage + return can_stop; + } + ++gboolean ++gsm_systemd_can_hibernate (GsmSystemd *manager) ++{ ++ gboolean res; ++ gchar *value; ++ gboolean can_hibernate; ++ GError *error; ++ ++ error = NULL; ++ ++ if (!gsm_systemd_ensure_sd_connection (manager, &error)) { ++ g_warning ("Could not connect to Systemd: %s", ++ error->message); ++ g_error_free (error); ++ return FALSE; ++ } ++ ++ res = dbus_g_proxy_call_with_timeout (manager->priv->sd_proxy, ++ "CanHibernate", ++ INT_MAX, ++ &error, ++ G_TYPE_INVALID, ++ G_TYPE_STRING, &value, ++ G_TYPE_INVALID); ++ if (res == FALSE) { ++ g_warning ("Could not make DBUS call: %s", ++ error->message); ++ g_error_free (error); ++ return FALSE; ++ } ++ ++ can_hibernate = g_strcmp0 (value, "yes") == 0 || ++ g_strcmp0 (value, "challenge") == 0; ++ g_free (value); ++ return can_hibernate; ++} ++ ++gboolean ++gsm_systemd_can_suspend (GsmSystemd *manager) ++{ ++ gboolean res; ++ gchar *value; ++ gboolean can_suspend; ++ GError *error; ++ ++ error = NULL; ++ ++ if (!gsm_systemd_ensure_sd_connection (manager, &error)) { ++ g_warning ("Could not connect to Systemd: %s", ++ error->message); ++ g_error_free (error); ++ return FALSE; ++ } ++ ++ res = dbus_g_proxy_call_with_timeout (manager->priv->sd_proxy, ++ "CanSuspend", ++ INT_MAX, ++ &error, ++ G_TYPE_INVALID, ++ G_TYPE_STRING, &value, ++ G_TYPE_INVALID); ++ if (res == FALSE) { ++ g_warning ("Could not make DBUS call: %s", ++ error->message); ++ g_error_free (error); ++ return FALSE; ++ } ++ ++ can_suspend = g_strcmp0 (value, "yes") == 0 || ++ g_strcmp0 (value, "challenge") == 0; ++ g_free (value); ++ return can_suspend; ++} ++ ++void ++gsm_systemd_attempt_hibernate (GsmSystemd *manager) ++{ ++ gboolean res; ++ GError *error; ++ ++ error = NULL; ++ ++ if (!gsm_systemd_ensure_sd_connection (manager, &error)) { ++ g_warning ("Could not connect to Systemd: %s", ++ error->message); ++ g_error_free (error); ++ return FALSE; ++ } ++ ++ res = dbus_g_proxy_call_with_timeout (manager->priv->sd_proxy, ++ "Hibernate", ++ INT_MAX, ++ &error, ++ G_TYPE_BOOLEAN, TRUE, /* interactive */ ++ G_TYPE_INVALID, ++ G_TYPE_INVALID); ++ if (res == FALSE) { ++ g_warning ("Could not make DBUS call: %s", ++ error->message); ++ g_error_free (error); ++ return FALSE; ++ } ++ ++} ++ ++void ++gsm_systemd_attempt_suspend (GsmSystemd *manager) ++{ ++ gboolean res; ++ GError *error; ++ ++ error = NULL; ++ ++ if (!gsm_systemd_ensure_sd_connection (manager, &error)) { ++ g_warning ("Could not connect to Systemd: %s", ++ error->message); ++ g_error_free (error); ++ return FALSE; ++ } ++ ++ res = dbus_g_proxy_call_with_timeout (manager->priv->sd_proxy, ++ "Suspend", ++ INT_MAX, ++ &error, ++ G_TYPE_BOOLEAN, TRUE, /* interactive */ ++ G_TYPE_INVALID, ++ G_TYPE_INVALID); ++ if (res == FALSE) { ++ g_warning ("Could not make DBUS call: %s", ++ error->message); ++ g_error_free (error); ++ return FALSE; ++ } ++} ++ + gchar * + gsm_systemd_get_current_session_type (GsmSystemd *manager) + { +diff -up mate-session-manager-1.6.1/mate-session/gsm-systemd.h.login1 mate-session-manager-1.6.1/mate-session/gsm-systemd.h +--- mate-session-manager-1.6.1/mate-session/gsm-systemd.h.login1 2013-07-25 10:35:06.000000000 -0500 ++++ mate-session-manager-1.6.1/mate-session/gsm-systemd.h 2013-09-10 08:39:15.689107516 -0500 +@@ -89,10 +89,18 @@ gboolean gsm_systemd_can_stop + + gboolean gsm_systemd_can_restart (GsmSystemd *manager); + ++gboolean gsm_systemd_can_hibernate (GsmSystemd *manager); ++ ++gboolean gsm_systemd_can_suspend (GsmSystemd *manager); ++ + void gsm_systemd_attempt_stop (GsmSystemd *manager); + + void gsm_systemd_attempt_restart (GsmSystemd *manager); + ++void gsm_systemd_attempt_hibernate (GsmSystemd *manager); ++ ++void gsm_systemd_attempt_suspend (GsmSystemd *manager); ++ + void gsm_systemd_set_session_idle (GsmSystemd *manager, + gboolean is_idle); + -- cgit v1.2.3-65-gdbad