# Thin desktop
# Simple but with many functions
# Icons on the desktop
# Menu on the mouse and on the dock
#
# Written by Dominique Michel <dominique_libre@sourceforge.net>, 2007
# Look similar to the Nebulea recipe and is mainly a mix of the original
# fvwm-crystal Clean, Dock and Nebulea recipes from 
# Maciej Delmanowski <harnir@linux.net.pl>
# with a few modifications and added functions.
# The multimedia menu is from Tavis Ormandy <taviso@gentoo.org> configuration 
# http://dev.gentoo.org/~taviso/fvwm2rc.html
#
# You can use folding to navigate this file


# ImagePath {{{1
SetEnv Icon-Theme "Default"
ImagePath $[FVWM_USERDIR]/icons/$[Icon-Theme]:$[FVWM_SYSTEMDIR]/icons/$[Icon-Theme]

# Browse directory Menu
#SetEnv music_path $[HOME]/Musique/musique
#SetEnv fvwm_video_path /mnt/usbdisk/dom/movies
#SetEnv fvwm_video_path_2 /mnt/usbdisk_2/Musique/films
#SetEnv music_exec "alsaplayer --enqueue"
#SetEnv fvwm_video_exec "mplayer"

# Includes and FVWM modules {{{1
Module FvwmCommandS

# Default FVWM-Crystal functions, initialization {{{2
Include components/desktop/FVWM-Crystal_Functions
Include components/functions/Clear-FVWM-Settings
Include components/desktop/FVWM-Crystal_Preferences
Include components/functions/Window-Autohide
Append preferences/Startup

# Preferred applications {{{2
Include components/functions/Screenshot-import
Include components/apps/XScreenSaver
Include components/apps/FvwmMiniConsole
Include components/apps/QuakeConsole
Include components/apps/OpenOffice.org
Include components/functions/NotificationAreaManager-$[NotificationAreaManager]
Include components/functions/Music-$[MusicPlayer]

# Desktop & window bindings {{{2
Include components/bindings/Desktop-RMB-OpenTerminal
Include components/bindings/Desktop-MMB-EdgeScroll
Include components/bindings/Desktop-MMB-TogglePanels
Include components/bindings/Window-Basic
Include components/bindings/Window-Border

# Keyboard bindings {{{2
Include components/desktop/Keyboard
Include components/desktop/Keyboard_NumLock
Include components/desktop/Numpad

# Use window thumbnails instead of simple icons on the desktop {{{2
Include components/desktop/Icon-Thumbnails

# Various styles {{{2
Include components/desktop/FVWM-Crystal_Styles
Include components/styles/CursorStyle-Border

# Desktop settings {{{1
EdgeScroll	0	0
EdgeResistance	0	100
HideGeometryWindow	Move, Resize
OpaqueMoveSize	100
EdgeThickness	1

EWMH-Desktop 3 3 3 3
EWMH-Panel-Bottom 28

# Change desktop with mouse wheel
Include components/bindings/Desktop-PageSwitch-Horizontal

#DestroyFunc FuncFvwmMenuDirectory
#AddToFunc FuncFvwmMenuDirectory
#+ I PipeRead 'case "$0" in \
#        "$[music_path]"*) myexec="$[music_exec]" mypng=audio.png;; \
#	"$[fvwm_video_path]"*) myexec="$[fvwm_video_exec]" mypng=film.png;; \
#	"$[fvwm_video_path_2]"*) myexec="$[fvwm_video_exec]" mypng=film.png;; \
#    esac; \
#    test -f "$0"/.icontitle.png && mytitle="$0"/.icontitle.png; \
#    fvwm-menu-directory --icon-title "${mytitle:-folder_view.png}" --icon-file ${mypng:-file_text_view.png} \
#    --icon-dir folder_paper_closed.png --dir "$0" --exec-t="^${myexec:-gvim} *" \
#    --exec-file "^${myexec:-gvim}"'

#DestroyMenu MenuMultimedia
#AddToMenu MenuMultimedia
#+ MissingSubmenuFunction FuncFvwmMenuDirectory
#+ '%music_notes_view.png%$[gt.Browse Music]' Popup $[music_path]
#+ '%video_movies_view.png%$[gt.Browse Movies]' Popup $[fvwm_video_path]
#+ '%video_movies_view.png%$[gt.Browse Movies]' Popup $[fvwm_video_path_2]


# Main panel with FVWM-Crystal menu {{{1
All (FvwmButtons-MainMenu) Close
DestroyModuleConfig FvwmButtons-MainMenu: *
*FvwmButtons-MainMenu: Geometry +-1--1
*FvwmButtons-MainMenu: BoxSize smart
*FvwmButtons-MainMenu: ActiveColorset $[cs-panel-active]
*FvwmButtons-MainMenu: Colorset $[cs-panel-inactive]
*FvwmButtons-MainMenu: Rows 1
*FvwmButtons-MainMenu: Font "xft:Verdana:pixelsize=12:Bold:Italic"
Test (EnvIsSet FVWM_FLAG_UTF-8) *FvwmButtons-MainMenu: Font "xft:Verdana:pixelsize=12:Bold:Italic:encoding=iso10646-1"
*FvwmButtons-MainMenu: Padding 1 1
*FvwmButtons-MainMenu: Frame 0

# Diamond {{{2
*FvwmButtons-MainMenu: (1x1, Size 75 22, Title (Side) "Menu", Icon "22x22/fvwm-crystal/fvwm-crystal.png", \
Action (Mouse 1) Menu /StartMenu $[MenuPosition-NE], \
Action (Mouse 2) Menu /FVWM-Crystal $[MenuPosition-NE])
#Action (Mouse 3) Wallpaper-Random $[FVWM_SYSTEMDIR]/wallpapers $[FVWM_USERDIR]/wallpapers ~/wallpapers /usr/local/share/wallpapers /usr/share/wallpapers)

# Applications menu generator {{{2
DestroyMenu /StartMenu
AddToMenu /StartMenu "%32x32/fvwm-crystal/fvwm-crystal.png%FVWM-Crystal" Popup /FVWM-Crystal
AddToMenu /StartMenu "" Nop
# This creates the main "Start Menu", upside down because it's located on the
# bottom of the screen
PipeRead 'fvwm-crystal.apps --database=$[FVWM_DISTROMENUDIR]/Applications --database=$[FVWM_SYSTEMDIR]/Applications --database=$[FVWM_USERDIR]/Applications --search-icons-in=$[FVWM_USERDIR]/icons/$[Icon-Theme]/32x32/categories:$[FVWM_USERDIR]/icons/$[Icon-Theme]/32x32/apps:$[FVWM_SYSTEMDIR]/icons/$[Icon-Theme]/32x32/categories:$[FVWM_SYSTEMDIR]/icons/$[Icon-Theme]/32x32/apps:$[FVWM_DISTROMENUDIR]/icons/$[Icon-Theme]/32x32/categories:$[FVWM_DISTROMENUDIR]/icons/$[Icon-Theme]/32x32/apps --default-file-icon=32x32/apps/default.png --default-dir-icon=32x32/categories/directory.png --min-submenu-length=5 --root-cat-name="StartMenu" --submenu-suffix="Item 100 o100" --sort=rprio --no-panel --check-execs --dont-clear-menu'
# This creates app menu available under Alt+Win_R
PipeRead 'fvwm-crystal.apps --database=$[FVWM_DISTROMENUDIR]/Applications --database=$[FVWM_SYSTEMDIR]/Applications --database=$[FVWM_USERDIR]/Applications --search-icons-in=$[FVWM_USERDIR]/icons/$[Icon-Theme]/22x22/categories:$[FVWM_USERDIR]/icons/$[Icon-Theme]/22x22/apps:$[FVWM_SYSTEMDIR]/icons/$[Icon-Theme]/22x22/categories:$[FVWM_SYSTEMDIR]/icons/$[Icon-Theme]/22x22/apps:$[FVWM_DISTROMENUDIR]/icons/$[Icon-Theme]/22x22/categories:$[FVWM_DISTROMENUDIR]/icons/$[Icon-Theme]/22x22/apps --default-file-icon=22x22/apps/default.png --default-dir-icon=22x22/categories/directory.png --min-submenu-length=5 --sort=prio --no-panel --check-execs'

# A small workaround made to allow desktop click which close program's menu
# and open main FVWM-Crystal menu at the same time (usually it's made
# using LMB). Hold LMB on the desktop to open the Applications menu
DestroyFunc DesktopMenu
AddToFunc DesktopMenu
+ H Menu /StartMenu $[MenuPosition-BelowLeft]
#+ H Menu /FVWM-Crystal $[MenuPosition-BelowLeft]

Mouse 1 R $[Mod] DesktopMenu

# Main "diamond" menu {{{2
DestroyMenu /FVWM-Crystal
AddToMenu /FVWM-Crystal
#+ '%22x22/categories/xorg.png%$[gt.Multimedia Browser]' Popup MenuMultimedia
+ '%22x22/fvwm-crystal/preferences-desktop-screensaver.png%$[gt.Screensaver]' Popup /Screensaver
+ '%22x22/fvwm-crystal/camera-photo.png%$[gt.Screenshot]' Popup /Screenshot
+ "" Nop
+ '%22x22/fvwm-crystal/preferences-desktop-theme.png%$[gt.Window decorations]' Popup /Window-Decorations
+ '%22x22/fvwm-crystal/colorsets.png%$[gt.Colorsets]' Popup /Colorsets
+ '%22x22/fvwm-crystal/preferences-desktop-wallpaper.png%$[gt.Wallpaper]' Popup /Wallpaper
+ '%22x22/fvwm-crystal/preferences-desktop.png%$[gt.Preferences]' Popup /Preferences
+ "" Nop
+ '%22x22/fvwm-crystal/applications-development.png%$[gt.Developer menu]' Popup /Developer
+ '%22x22/fvwm-crystal/fvwm-crystal.png%$[gt.About FVWM-Crystal]' Include components/functions/About
+ '%22x22/fvwm-crystal/system-log-out.png%$[gt.Exit]' Popup /Exit
# }}}2

Module FvwmButtons FvwmButtons-MainMenu

###########################################
# Settings of Trayer {{{1
# Settings of stalonetray {{{2
DestroyFunc NotificationArea-Stalone
AddToFunc NotificationArea-Stalone
+ I SetEnv trayer_ic_size "24"
+ I SetEnv trayer_area_width "$[trayer_width]"
+ I SetEnv trayer_area_eigth "24"
+ I SetEnv trayer_x "+77"
+ I SetEnv trayer_y "--1"
+ I SetEnv trayer_ic_grav "W"
+ I SetEnv trayer_vert ""

# Settings of trayer {{{2
DestroyFunc NotificationArea-Trayer
AddToFunc NotificationArea-Trayer
+ I SetEnv trayer_width_t "pixel"
+ I SetEnv trayer_heigth_t "pixel"
+ I SetEnv trayer_edge "bottom"
+ I SetEnv trayer_align "left"
+ I SetEnv trayer_marge "77"
+ I SetEnv trayer_dist "1"
+ I SetEnv trayer_width_w "--width $[trayer_width]"

Test (EnvMatch NotificationAreaManager stalonetray) NotificationArea-Stalone
Test (EnvMatch NotificationAreaManager trayer) NotificationArea-Trayer
Test (!EnvMatch trayer_width 0) TrayerPanel

##############################################################
# Music panel {{{1
All (FvwmButtons-Music) Close
DestroyModuleConfig FvwmButtons-Music: *
PipeRead 'echo *FvwmButtons-Music: Geometry +$(($[trayer_width]+77))--1'
*FvwmButtons-Music: BoxSize smart
*FvwmButtons-Music: ActiveColorset $[cs-panel-active]
*FvwmButtons-Music: Colorset $[cs-panel-inactive]
*FvwmButtons-Music: Rows 1
*FvwmButtons-Music: Padding 1 1
*FvwmButtons-Music: Frame 0

# Main music button, with some menus {{{2
*FvwmButtons-Music: (1x1, Size 22 22, Icon "22x22/fvwm-crystal/media-playback-start.png", \
Action (Mouse 1) Menu /Music $[MenuPosition-NE], \
Action (Mouse 2) Music-GUI, \
Action (Mouse 3) Music-PlayPause, \
Action (Mouse 4) Mixer-Volume-Up 10, \
Action (Mouse 5) Mixer-Volume-Down 10)
# music controls button {{{2
*FvwmButtons-Music: (1x1, Size 22 22, Icon "22x22/fvwm-crystal/media-skip-forward.png", \
        Action (Mouse 1) Music-Next, \
        Action (Mouse 2) Menu /Mixer $[MenuPosition-NE], \
        Action (Mouse 3) Music-Prev, \
	Action (Mouse 4) Music-Forward, \
	Action (Mouse 5) Music-Backward)
# }}}2

# Music alsaplayer panel {{{1
All (FvwmButtons-MusicAlsaplayer) Close
DestroyModuleConfig FvwmButtons-MusicAlsaplayer: *
PipeRead 'echo *FvwmButtons-MusicAlsaplayer: Geometry +$(($[trayer_width]+77))--1'
*FvwmButtons-MusicAlsaplayer: BoxSize smart
*FvwmButtons-MusicAlsaplayer: ActiveColorset $[cs-panel-active]
*FvwmButtons-MusicAlsaplayer: Colorset $[cs-panel-inactive]
*FvwmButtons-MusicAlsaplayer: Rows 1
*FvwmButtons-MusicAlsaplayer: Padding 1 1
*FvwmButtons-MusicAlsaplayer: Frame 0

# Main music button, with some menus {{{2
*FvwmButtons-MusicAlsaplayer: (1x1, Size 22 22, Icon "22x22/fvwm-crystal/media-eject.png", \
	Action (Mouse 1) Menu /Player $[MenuPosition-NE], \
	Action (Mouse 2) Music-GUI, \
	Action (Mouse 3) Menu /Playback $[MenuPosition-NE], \
	Action (Mouse 4) Mixer-Volume-Up 8, \
	Action (Mouse 5) Mixer-Volume-Down 8)
# music controls button {{{2
*FvwmButtons-MusicAlsaplayer: (1x1, Size 22 22, Icon "22x22/fvwm-crystal/media-playback-start.png", \
	Action (Mouse 1) Menu /Music/Volume $[MenuPosition-NE], \
	Action (Mouse 2) Menu /Mixer $[MenuPosition-NE], \
	Action (Mouse 3) Menu /Speed $[MenuPosition-NE], \
	Action (Mouse 4) Music-Speed-Up, \
	Action (Mouse 5) Music-Speed-Down)
# music controls button {{{2
*FvwmButtons-MusicAlsaplayer: (1x1, Size 22 22, Icon "22x22/fvwm-crystal/media-skip-forward.png", \
        Action (Mouse 1) Menu /Playlist-bot $[MenuPosition-NE], \
        Action (Mouse 2) Music-Pause, \
        Action (Mouse 3) Music-PlayPause, \
	Action (Mouse 4) Music-Next, \
	Action (Mouse 5) Music-Prev)
# }}}2 Menu /Control $[MenuPosition-NE], \

Test (!EnvMatch MusicPlayer alsaplayer, !EnvMatch MusicPlayer mplayer) Module FvwmButtons FvwmButtons-Music
Test (EnvMatch MusicPlayer alsaplayer) Module FvwmButtons FvwmButtons-MusicAlsaplayer
Test (EnvMatch MusicPlayer mplayer) Module FvwmButtons FvwmButtons-MusicAlsaplayer

##########################################################
# Bottom panel {{{1
Test (!EnvMatch MusicPlayer alsaplayer, !EnvMatch MusicPlayer mplayer) SetEnv AppPanelGeom "0"
Test (EnvMatch MusicPlayer alsaplayer) SetEnv AppPanelGeom "22"
Test (EnvMatch MusicPlayer mplayer) SetEnv AppPanelGeom "22"

SetEnv Desk-Pages-X "8"
SetEnv Desk-Pages-Y "1"
PipeRead 'echo SetEnv FvwmPager-Width $((28*$[Desk-Pages-X])); echo SetEnv FvwmPager-Height $((24*$[Desk-Pages-Y]))'
PipeRead 'echo SetEnv FvwmButtons-Columns $(($[vp.width]/28))'

All (FvwmButtons-BotPanel) Close
DestroyModuleConfig FvwmButtons-BotPanel: *
PipeRead 'echo *FvwmButtons-BotPanel: Geometry $(($[vp.width]-$(($[trayer_width]+190+$[AppPanelGeom]))))x$[FvwmPager-Height]-60--1'
#*FvwmButtons-BotPanel: ButtonGeometry $[FvwmPager-Height]x$[FvwmPager-Height]
*FvwmButtons-BotPanel: BoxSize smart
*FvwmButtons-BotPanel: ActiveColorset $[cs-panel-active]
*FvwmButtons-BotPanel: Colorset $[cs-panel-inactive]
*FvwmButtons-BotPanel: Rows 1
*FvwmButtons-BotPanel: Columns $[FvwmButtons-Columns]
*FvwmButtons-BotPanel: Padding 0 0
*FvwmButtons-BotPanel: Frame 0

# Window list {{{2
All (FvwmIconMan-Windows-2) Close
DestroyModuleConfig FvwmIconMan-Windows-2: *

*FvwmIconMan-Windows-2: Resolution Global
*FvwmIconMan-Windows-2: UseWinList True
*FvwmIconMan-Windows-2: DontShow Class=xmms,FvwmButtons,FvwmIconMan,FvwmPager,FvwmIdent,FvwmForm
*FvwmIconMan-Windows-2: ShowNoIcons True
*FvwmIconMan-Windows-2: DrawIcons Always
*FvwmIconMan-Windows-2: Sort Id
*FvwmIconMan-Windows-2: FollowFocus True
*FvwmIconMan-Windows-2: Format "%t"
*FvwmIconMan-Windows-2: Title ""
PipeRead "echo *FvwmIconMan-Windows-2: ButtonGeometry $(($[vp.width]))x24"
*FvwmIconMan-Windows-2: ManagerGeometry 1x1-$[FvwmPager-Width]-1
#*FvwmIconMan-Windows-2: MaxButtonWidthByColumns 80
*FvwmIconMan-Windows-2: Font "xft:Verdana:pixelsize=12"
Test (EnvIsSet FVWM_FLAG_UTF-8) *FvwmIconMan-Windows-2: Font "xft:Verdana:pixelsize=12:encoding=iso10646-1"
# Tips {{{3
*FvwmIconMan-Windows-2: Tips needed
*FvwmIconMan-Windows-2: TipsDelays 500 200
*FvwmIconMan-Windows-2: TipsFont "xft:Verdana:pixelsize=12"
Test (EnvIsSet FVWM_FLAG_UTF-8) *FvwmIconMan-Windows-2: TipsFont "xft:Verdana:pixelsize=12:Bold:Italic:encoding=iso10646-1"
*FvwmIconMan-Windows-2: TipsBorderWidth 0
*FvwmIconMan-Windows-2: TipsColorset $[cs-panel-inactive]
*FvwmIconMan-Windows-2: TipsJustification leftup
# Button look {{{3
*FvwmIconMan-Windows-2: PlainButton flat
*FvwmIconMan-Windows-2: FocusButton flat
*FvwmIconMan-Windows-2: SelectButton flat
*FvwmIconMan-Windows-2: FocusAndSelectButton flat
*FvwmIconMan-Windows-2: IconButton flat
# Colorsets {{{3
*FvwmIconMan-Windows-2: Colorset $[cs-panel-inactive]
*FvwmIconMan-Windows-2: PlainColorset $[cs-panel-wininactive]
*FvwmIconMan-Windows-2: FocusColorset $[cs-panel-winactive]
*FvwmIconMan-Windows-2: SelectColorset $[cs-panel-active]
*FvwmIconMan-Windows-2: FocusAndSelectColorset $[cs-panel-active]
*FvwmIconMan-Windows-2: IconColorset $[cs-panel-inactive]
# Actions {{{3
*FvwmIconMan-Windows-2: Action Mouse 1 A SendCommand "Function Window-Focus-DefaultDesk-Raised"
*FvwmIconMan-Windows-2: Action Mouse 2 $[Mod2] SendCommand "Close"
*FvwmIconMan-Windows-2: Action Mouse 2 $[Mod0] SendCommand "Window-Iconify"
*FvwmIconMan-Windows-2: Action Mouse 3 $[Mod] SendCommand "Function Window-Focus-CurrentDesk-Raised"
# }}}3

PipeRead 'echo SetEnv Windows-Columns $(($[FvwmButtons-Columns]-$[Desk-Pages-X]))'
*FvwmButtons-BotPanel: ($[Windows-Columns]x1, Frame 0, Padding 0 0, \
  Swallow(UseOld, Hints, Respawn) "FvwmIconMan-Windows-2" "Module FvwmIconMan FvwmIconMan-Windows-2"))
# }}}2

# Pager {{{2
All (FvwmPager) Close
DestroyModuleConfig FvwmPager: *

PipeRead 'echo DesktopSize $[Desk-Pages-X]x$[Desk-Pages-Y]'

*FvwmPager: MiniIcons
*FvwmPager: Font none
*FvwmPager: WindowBorderWidth 1
*FvwmPager: Window3DBorders
#*FvwmPager: NoSeparators
*FvwmPager: UseSkipList
*FvwmPager: Colorset * $[cs-panel-inactive]
*FvwmPager: HilightColorset * $[cs-panel-active]
*FvwmPager: WindowColorsets $[cs-panel-wininactive] $[cs-panel-winactive]

*FvwmButtons-BotPanel: ($[Desk-Pages-X]x1, Frame 0, Padding 0 0, \
  Swallow(UseOld, Hints, Respawn) "FvwmPager" "Module FvwmPager FvwmPager"))

# Change desktop pages using mouse wheel on pager
Mouse (FvwmPager) 4 W $[Mod] GotoPage-Right
Mouse (FvwmPager) 5 W $[Mod] GotoPage-Left
# }}}2

Module FvwmButtons FvwmButtons-BotPanel

# Override FVWM style (it's applied later)
AddToFunc InitFunction
+ I Style FvwmButtons-BotPanel StaysOnTop

# Override FVWM style (it's applied later)
Style FvwmButtons-BotPanel StaysOnTop
Style FvwmButtons-BotPanel NoIcon
EdgeCommand Bottom All (FvwmButtons-BotPanel) Iconify

Style FvwmButtons-Musi* StaysOnTop
Style FvwmButtons-Musi* NoIcon
EdgeCommand Left All (FvwmButtons-Musi*) Iconify

######################################
# Clock {{{1
All (FvwmButtons-Clock) Close
DestroyModuleConfig FvwmButtons-Clock: *
*FvwmButtons-Clock: Geometry --1--1
*FvwmButtons-Clock: BoxSize smart
*FvwmButtons-Clock: ActiveColorset $[cs-panel-active]
*FvwmButtons-Clock: Colorset $[cs-panel-inactive]
*FvwmButtons-Clock: Columns 2
*FvwmButtons-Clock: Padding 2 2
*FvwmButtons-Clock: Frame 0

*FvwmButtons-Clock: (2x1, Size 60 24, \
Swallow (Close, Respawn, FvwmModule) "FvwmScript-Clock" 'Script components/scripts/FvwmScript-Clock', \
Action (Mouse 3) SendToModule *FvwmScript-Clock SendString 1 1 str)

Module FvwmButtons FvwmButtons-Clock

# ViM modeline {{{1
# vim:foldmethod=marker:foldenable:foldlevel=0:ft=fvwm

