# Author: Scott Smedley ss@aao.gov.au

# See the FvwmTabs(1) man page for how to use the FvwmTabs module.
#
# DO NOT EDIT this file unless you know what you are doing.
# Default USER CONFIGURATION settings are in FvwmTabs-DefaultSetup.

# Create a new Tabber.
# Can specify optional --geometry 1st argument.
# ie. NewTabber --geometry=+220+550 scottie
DestroyFunc NewTabber
AddToFunc NewTabber I SendToModule FvwmTabs createNewTabber $0 $1

# Add a window (as a tab) to a Tabber.
DestroyFunc Tabize
AddToFunc Tabize I SendToModule FvwmTabs addme $0

# Save FvwmTabs state (usually invoked just before restart).
DestroyFunc SaveState
AddToFunc SaveState I SendToModule FvwmTabs saveState

DestroyFunc SaveStateAndKill
AddToFunc SaveStateAndKill
+ I	Function SaveState
+ I KillModule FvwmTabs

# Functions used in key bindings.
DestroyFunc NextTab
AddToFunc NextTab
+ I Current (FvwmTabs) SendToModule FvwmTabs fn showNext $[w.id] 1

DestroyFunc PrevTab
AddToFunc PrevTab
+ I Current (FvwmTabs) SendToModule FvwmTabs fn showNext $[w.id] -1

DestroyFunc LastTab
AddToFunc LastTab
+ I Current (FvwmTabs) SendToModule FvwmTabs fn showLast $[w.id]

DestroyFunc ReleaseIconifyTab
AddToFunc ReleaseIconifyTab
+ I Current (FvwmTabs) SendToModule FvwmTabs fn releaseTab $[w.id] current 1

DestroyFunc ReleaseTab
AddToFunc ReleaseTab
+ I Current (FvwmTabs) SendToModule FvwmTabs fn releaseTab $[w.id] current 0

DestroyFunc ReleaseAllTabs
AddToFunc ReleaseAllTabs
+ I Current (FvwmTabs) SendToModule FvwmTabs fn releaseAll $[w.id] 0

DestroyFunc ReleaseIconifyAllTabs
AddToFunc ReleaseIconifyAllTabs
+ I Current (FvwmTabs) SendToModule FvwmTabs fn releaseAll $[w.id] 1

DestroyFunc CloseTabber
AddToFunc CloseTabber
+ I Current (FvwmTabs) SendToModule FvwmTabs fn closeTabber $[w.id]

DestroyFunc AddTab
AddToFunc AddTab
+ I Current (FvwmTabs) SendToModule FvwmTabs fn pickAndAdd $[w.id] single

DestroyFunc MultiAddTab
AddToFunc MultiAddTab
+ I Current (FvwmTabs) SendToModule FvwmTabs fn pickAndAdd $[w.id] multi

DestroyFunc ShowTab
AddToFunc ShowTab
+ I Current (FvwmTabs) SendToModule FvwmTabs fn showTab $[w.id] $0

DestroyFunc SwapLeft
AddToFunc SwapLeft
+ I Current (FvwmTabs) SendToModule FvwmTabs fn swapLeft $[w.id]

DestroyFunc SwapRight
AddToFunc SwapRight
+ I Current (FvwmTabs) SendToModule FvwmTabs fn swapRight $[w.id]

DestroyFunc EnableDND
AddToFunc EnableDND I SendToModule FvwmTabs enableDND $0

# SwallowNew - Run program $0 & have window immediately added to tabber.
DestroyFunc SwallowNew
AddToFunc SwallowNew
+ I SendToModule FvwmTabs swallowNext lastFocus Exec exec $*

# SwallowNewIfFocussed - Run program $0. If a tabber is focused, have
# window immediately added to tabber.
DestroyFunc SwallowNewIfFocused
AddToFunc SwallowNewIfFocused
+ I Current (FvwmTabs) SwallowNew $*
+ I TestRc (NoMatch) Exec exec $*

# SwallowNextStatus - is used by the 'tab' (shell) command.
DestroyFunc SwallowNextStatus
AddToFunc SwallowNextStatus
+ I Deschedule 314159
+ I PipeRead 'usleep 1'
+ I SendToModule FvwmCommandS swallowNext$0
+ I PipeRead 'usleep 1'
+ I SendToModule FvwmCommandS flush

# AddToTabber - add the current window to a tabber.
DestroyFunc AddToTabber
AddToFunc AddToTabber I Current Function Tabize $0

# CreateTabberWithWin will put the focused window into a new tabber,
# creating it at the same position as the window.
DestroyFunc CreateTabberWithWin
AddToFunc CreateTabberWithWin
+ I Current (!FvwmTabs) SetEnv CTWW_ID $[w.id]
+ I TestRc (NoMatch) Break
+ I PipeRead 'echo SetEnv CTWW_COUNT $(( $CTWW_COUNT+1 ))'
+ I NewTabber --geometry=+$[w.x]+$[w.y] .$[CTWW_COUNT]
+ I Wait "FvwmTabs*"
+ I WindowId $[CTWW_ID] Tabize .$[CTWW_COUNT]

DestroyFunc MakeTabbersMenu
AddToFunc MakeTabbersMenu
+ I DestroyMenu recreate TabbersMenu
+ I AddToMenu TabbersMenu "FvwmTabs tab-managers" Title
+ I AddToMenu TabbersMenu "Create tab-manager with this window" Function CreateTabberWithWin
+ I All ("FvwmTabs [*]") AddToMenu TabbersMenu "$$$$[w.name]" Function AddToTabber $$$$[w.id]

# TabbersMenu - best invoked from the menu that pops up when you click
# on the left button in the titlebar of a window. It lists all tabbers
# currently running on the system & automatically adds the window to the
# tabber the user selects.
DestroyMenu TabbersMenu
AddToMenu TabbersMenu
+ DynamicPopupAction Function MakeTabbersMenu

# === Once ===

# Once - only execute an action if it has not been executed already.
# This looks complicated mostly because environment variable
# values are preserved between restarts.
# Requires fvwm >= 2.5.17 or CVS >= 16-July-2006
DestroyFunc Once
AddToFunc Once
+ I Test (EnvIsSet $[0]) Break
+ I SetEnv $[0]
+ I AddToFunc Once_ClearEnvVars I UnsetEnv $[0]
+ I $[1-]

Once ONCE_INIT AddToFunc ExitFunction I Test (ToRestart) Once_ClearEnvVars

# === === ===

# Make sure "SaveState" is only added to ExitFunction once.
Once FvwmTabs_AddSaveStateHook AddToFunc ExitFunction I Test (ToRestart) Function SaveState

# FvwmTabs-DefaultSetup has some useful key-bindings for FvwmTabs.
# Source this file unless the $FvwmTabs_NoDefaultSetup environment
# variable is set, in which case the user probably wants to define their
# own bindings.
Test (!EnvIsSet FvwmTabs_NoDefaultSetup) Read FvwmTabs-DefaultSetup
