# Menu for different ways to run away ;)
# Created by: Pawel "NEMO" Drygas <nemo@braxis.org>
# Modified by Dominique Michel <dominique_libre@sourceforge.net> for use with
# session managers as gnome-session (its old and outdated now)
# + pm-utils and systemd supports - anyway, hibernation is much better
# than session management because it just work and is fast.
# + pm-utils was removed from gentoo, add loginctl support and
# cleanup of executables testing.
# The loginctl support is for elogind, not for systemd. That imply when
# systemctl is present, we use it.

# We do not know how fvwm-crystal is started and what its PATH is
InfoStoreAdd sysctl no
InfoStoreAdd pmquit no
# Use pm-utils, then loginctl, then sysctl
## Fallbacks
Test (x loginctl) InfoStoreAdd sysctl loginctl
Test (x systemctl) InfoStoreAdd sysctl systemctl
Test (x pm-suspend-hybrid) InfoStoreAdd pmquit pm-suspend-hybrid
## With full paths
Test (x /usr/bin/loginctl) InfoStoreAdd sysctl /usr/bin/loginctl
Test (x /bin/loginctl) InfoStoreAdd sysctl /bin/loginctl
Test (x /usr/sbin/loginctl) InfoStoreAdd sysctl /usr/sbin/loginctl
Test (x /sbin/loginctl) InfoStoreAdd sysctl /sbin/loginctl
Test (x /usr/bin/systemctl) InfoStoreAdd sysctl /usr/bin/systemctl
Test (x /bin/systemctl) InfoStoreAdd sysctl /bin/systemctl
Test (x /usr/sbin/systemctl) InfoStoreAdd sysctl /usr/sbin/systemctl
Test (x /sbin/systemctl) InfoStoreAdd sysctl /sbin/systemctl
Test (x /usr/bin/pm-suspend-hybrid) InfoStoreAdd pmquit /usr/bin/
Test (x /bin/pm-suspend-hybrid) InfoStoreAdd pmquit /bin/
Test (x /usr/sbin/pm-suspend-hybrid) InfoStoreAdd pmquit /usr/sbin/
Test (x /sbin/pm-suspend-hybrid) InfoStoreAdd pmquit /sbin/

# ps -C ... truncate the command name (see man 5 proc); use pgrep -f ...
DestroyFunc KillAutoHibernate
AddToFunc KillAutoHibernate
+ I Piperead 'pgrep -f AutoHibernate 1>/dev/null && killall -9 AutoHibernate $[infostore.SILENT]'

DestroyFunc EndAutoHibernate
AddToFunc EndAutoHibernate
+ I KillAutoHibernate
+ I SavePreferences AutoHibernation Nop

DestroyMenu /AutoHibernateValue
AddToMenu /AutoHibernateValue
+ "$[gt. 1 %]" Exec exec $[FVWM_SYSTEMDIR]/scripts/AutoHibernate 1 $[infostore.sysctl]
+ "$[gt. 2 %]" Exec exec $[FVWM_SYSTEMDIR]/scripts/AutoHibernate 2 $[infostore.sysctl]
+ "$[gt. 3 %]" Exec exec $[FVWM_SYSTEMDIR]/scripts/AutoHibernate 3 $[infostore.sysctl]
+ "$[gt. 5 %]" Exec exec $[FVWM_SYSTEMDIR]/scripts/AutoHibernate 5 $[infostore.sysctl]
+ "$[gt.10 %]" Exec exec $[FVWM_SYSTEMDIR]/scripts/AutoHibernate 10 $[infostore.sysctl]
+ "$[gt.15 %]" Exec exec $[FVWM_SYSTEMDIR]/scripts/AutoHibernate 15 $[infostore.sysctl]
+ "$[gt.20 %]" Exec exec $[FVWM_SYSTEMDIR]/scripts/AutoHibernate 20 $[infostore.sysctl]
+ "$[gt.25 %]" Exec exec $[FVWM_SYSTEMDIR]/scripts/AutoHibernate 25 $[infostore.sysctl]
+ "$[gt.50 %]" Exec exec $[FVWM_SYSTEMDIR]/scripts/AutoHibernate 50 $[infostore.sysctl]
+ "$[gt.75 %]" Exec exec $[FVWM_SYSTEMDIR]/scripts/AutoHibernate 75 $[infostore.sysctl]

DestroyFunc AutoHibernate-generator
AddToFunc AutoHibernate-generator
+ I DestroyMenu recreate /AutoHibernate
+ I Piperead "if [ $(pgrep AutoHibernate) ]; \
	then echo AddToMenu /AutoHibernate \\'$[gt.Stop]\\' EndAutoHibernate; \
	else echo AddToMenu /AutoHibernate \\'$[gt.Start when battery is as low as]\\' Popup /AutoHibernateValue; \
	fi"

DestroyMenu /AutoHibernate
AddToMenu /AutoHibernate
+ DynamicPopupAction Function AutoHibernate-generator

DestroyFunc ScreenLidSuspend
AddToFunc ScreenLidSuspend
+ I Exec exec $[FVWM_SYSTEMDIR]/scripts/ScreenLidSuspend $0
+ I SavePreferences ScreenLidSuspend "Exec if [ \\`pgrep -c ScreenLidSuspen\\` -eq 0 ]; then exec $[FVWM_SYSTEMDIR]/scripts/ScreenLidSuspend $0; fi"

DestroyFunc NoScreenLidSuspend
AddToFunc NoScreenLidSuspend
+ I Piperead 'pkill ScreenLidSuspen'
+ I SavePreferences ScreenLidSuspend Nop

DestroyFunc ScreenLidSuspend-generator
AddToFunc ScreenLidSuspend-generator
+ I DestroyMenu recreate /ScreenLidSuspend
+ I Piperead "if [ `pgrep -c ScreenLidSuspen` -gt 0 ]; \
	then echo AddToMenu /ScreenLidSuspend \\'$[gt.No resume hybride with screen lid]\\' NoScreenLidSuspend; \
	else echo AddToMenu /ScreenLidSuspend \\'$[gt.Resume hybride with screen lid]\\' ScreenLidSuspend $[infostore.sysctl]; \
	fi"

DestroyMenu /ScreenLidSuspend
AddToMenu /ScreenLidSuspend
+ DynamicPopupAction Function ScreenLidSuspend-generator

DestroyFunc Exit-Menu-pm
AddToFunc Exit-Menu-pm
+ I AddToMenu /Exit '' Nop
+ I Test (X /sys/class/power_supply/BAT0) AddToMenu /Exit '%22x22/fvwm-crystal/gdm.png%$[gt.Automatic suspend to disk]' Popup /AutoHibernate
+ I Test (X /proc/acpi/button/lid) AddToMenu /Exit '%22x22/fvwm-crystal/gdm.png%$[gt.Resume hybride with screen lid]' Popup /ScreenLidSuspend
+ I AddToMenu /Exit '' Nop
+ I AddToMenu /Exit '%22x22/fvwm-crystal/gdm.png%$[gt.Resume to RAM]' S $[pmquit]pm-suspend
+ I AddToMenu /Exit '%22x22/fvwm-crystal/gdm.png%$[gt.Resume hybride]' S $[pmquit]pm-suspend-hybrid
+ I AddToMenu /Exit '%22x22/fvwm-crystal/gdm.png%$[gt.Suspend to disk]' S $[pmquit]pm-hibernate
+ I AddToMenu /Exit '%22x22/fvwm-crystal/gdm.png%$[gt.Powersave]' S $[pmquit]pm-powersave

DestroyFunc Exit-Menu-sysctl
AddToFunc Exit-Menu-sysctl
+ I AddToMenu /Exit '' Nop
+ I Test (R /sys/class/power_supply/BAT0) AddToMenu /Exit '%22x22/fvwm-crystal/gdm.png%$[gt.Automatic suspend to disk]' Popup /AutoHibernate
+ I Test (R /proc/acpi/button/lid) Test (R /etc/elogind/logind.conf) Piperead \
	"if [ $(grep ^HandleLidSwitch=ignore /etc/elogind/logind.conf) ] ; then \
		echo AddToMenu /Exit \\'%22x22/fvwm-crystal/gdm.png%$[gt.Resume hybride with screen lid]\\' Popup /ScreenLidSuspend ; fi"
+ I AddToMenu /Exit '' Nop
+ I AddToMenu /Exit '%22x22/fvwm-crystal/gdm.png%$[gt.Resume to RAM]' S $0 suspend -i
+ I AddToMenu /Exit '%22x22/fvwm-crystal/gdm.png%$[gt.Resume hybride]' S $0 hybrid-sleep -i
+ I AddToMenu /Exit '%22x22/fvwm-crystal/gdm.png%$[gt.Resume to RAM then disk]' S $0 suspend-then-hibernate -i
+ I AddToMenu /Exit '%22x22/fvwm-crystal/gdm.png%$[gt.Suspend to disk]' S $0 hibernate -i
+ I AddToMenu /Exit "" Nop
+ I AddToMenu /Exit '%22x22/fvwm-crystal/system-reboot.png%$[gt.Reboot computer]' S $0 reboot -i
+ I AddToMenu /Exit '%22x22/fvwm-crystal/system-shutdown.png%$[gt.Turn off computer]' S $0 poweroff -i

DestroyFunc Exit-SelectLogoutManager
AddToFunc Exit-SelectLogoutManager
+ I Test (X gdmflexiserver) PipeRead 'pidof gdm > /dev/null && echo "Include components/functions/Exit-gdm" || echo "Exit-SelectExitManager"'
+ I TestRc (NoMatch) Include components/functions/Exit-sudo

DestroyFunc Exit-Menu
AddToFunc Exit-Menu
+ I DestroyMenu /Exit
+ I AddToMenu /Exit 
+ I AddToMenu /Exit '%22x22/fvwm-crystal/view-refresh.png%$[gt.Restart]' Restart
+ I Test (x /usr/bin/xscreensaver) AddToMenu /Exit '%22x22/fvwm-crystal/system-lock-screen.png%$[gt.Lock screen]' X xscreensaver-command -lock
+ I Test (EnvIsSet SESSION_MANAGER) AddToMenu /Exit '%22x22/fvwm-crystal/system-log-out.png%$[gt.Logout]' QuitSession
+ I Test (!EnvIsSet SESSION_MANAGER) AddToMenu /Exit '%22x22/fvwm-crystal/system-log-out.png%$[gt.Logout]' Quit
+ I Test Test (x $[infostore.sysctl]) Exit-Menu-sysctl $[infostore.sysctl]
+ I TestRc (NoMatch) (!EnvMatch infostore.pmquit no) Exit-Menu-pm
+ I Test (EnvIsSet SESSION_MANAGER) AddToMenu /Exit '' Nop
Test (EnvIsSet SESSION_MANAGER) AddToMenu /Exit '%22x22/fvwm-crystal/gdm.png%$[gt.Save session]' Exec exec gnome-session-save --gui
Test (EnvIsSet SESSION_MANAGER) AddToMenu /Exit '%22x22/fvwm-crystal/gdm.png%$[gt.Manage session]' Exec exec gnome-session-properties
+ I Test (EnvMatch infostore.sysctl no) Exit-SelectLogoutManager

Exit-Menu

Test (x /usr/sbin/pm-hibernate) AddToFunc ExitFunction I Test (ToRestart) KillAutoHibernate

# vim:ft=fvwm
