cdesktopenv/cde/programs/dtksh/examples/SessionTest.src

138 lines
4.2 KiB
Plaintext

XCOMM! CDE_INSTALLATION_TOP/bin/dtksh
XCOMM $XConsortium: SessionTest.src /main/6 1996/04/23 20:18:46 drk $
XCOMM #########################################################################
XCOMM (c) Copyright 1993, 1994 Hewlett-Packard Company
XCOMM (c) Copyright 1993, 1994 International Business Machines Corp.
XCOMM (c) Copyright 1993, 1994 Sun Microsystems, Inc.
XCOMM (c) Copyright 1993, 1994 Unix System Labs, Inc., a subsidiary of
XCOMM Novell, Inc.
XCOMM #########################################################################
XCOMM
XCOMM This sample shell script demonstrates the steps necessary for tying into
XCOMM session management. To run, simply run this script, and then save the
XCOMM current session. When the session is restored, this script should again
XCOMM restore to its previous state.
XCOMM
XCOMM This function is invoked when the user attempts to save the current session.
XCOMM It will save off its state information (whether it is iconified, and the
XCOMM list of workspaces it occupies) into a session file, and then tell the
XCOMM session manager how to reinvoke it when the session is restored.
SessionCallback()
{
XCOMM Get the name of our session file
if DtSessionSavePath $TOPLEVEL PATH SAVEFILE; then
exec 9>$PATH
XCOMM Save our iconification state
if DtShellIsIconified $TOPLEVEL ; then
print -u9 'Iconified'
else
print -u9 'Deiconified'
fi
XCOMM Save the list of workspace we occupy
if DtWsmGetWorkspacesOccupied $(XtDisplay "-" $TOPLEVEL) \
$(XtWindow "-" $TOPLEVEL) \
CURRENT_WS_LIST ;
then
oldIFS=$IFS
IFS=","
for item in $CURRENT_WS_LIST;
do
XmGetAtomName NAME $(XtDisplay "-" $TOPLEVEL) $item
print -u9 $NAME
done
IFS=$oldIFS
fi
exec 9<&-
XCOMM Tell the session manager how to restart us
DtSetStartupCommand $TOPLEVEL \
"/usr/dt/share/examples/dtksh/SessionTest $SAVEFILE"
else
echo "DtSessionSavePath FAILED!!"
exit -3
fi
}
XCOMM This function is invoked when we are restarted at session restore time.
XCOMM It is passed the name of the session file as $1. It will extract our
XCOMM session information from the session file, and will restore our state
XCOMM accordingly.
RestoreSession()
{
XCOMM Get the full path of our session file
if DtSessionRestorePath $TOPLEVEL PATH $1; then
exec 9<$PATH
read -u9 ICONIFY
XCOMM Restore our iconification state
case $ICONIFY in
Iconified) DtSetIconifyHint $TOPLEVEL True;;
*) DtSetIconifyHint $TOPLEVEL False;;
esac
XCOMM Place us into the indicated set of workspaces
WS_LIST=""
while read -u9 NAME
do
XmInternAtom ATOM $(XtDisplay "-" $TOPLEVEL) $NAME False
if [ ${#WS_LIST} -gt 0 ]; then
WS_LIST=$WS_LIST,$ATOM
else
WS_LIST=$ATOM
fi
done
DtWsmSetWorkspacesOccupied $(XtDisplay "-" $TOPLEVEL) \
$(XtWindow "-" $TOPLEVEL) \
$WS_LIST
exec 9<&-
else
echo "DtSessionRestorePath FAILED!!"
exit -3
fi
}
XCOMM ###################### Create the Main UI ###############################
XtInitialize TOPLEVEL wmProtTest WmProtTest "$0" "$@"
XtCreateManagedWidget DA da XmDrawingArea $TOPLEVEL
XtSetValues $DA height:200 width:200
XmInternAtom SAVE_SESSION_ATOM $(XtDisplay "-" $TOPLEVEL) "WM_SAVE_YOURSELF" False
XCOMM If we are invoked with any command line parameters, then we will assume
XCOMM that it is the name of our session file, and will restore to the indicated
XCOMM state.
if (( $# > 0))
then
XtSetValues $TOPLEVEL mappedWhenManaged:False
XtRealizeWidget $TOPLEVEL
XSync $(XtDisplay "-" $TOPLEVEL) False
RestoreSession $1
XtSetValues $TOPLEVEL mappedWhenManaged:True
XtPopup $TOPLEVEL GrabNone
else
XtRealizeWidget $TOPLEVEL
XSync $(XtDisplay "-" $TOPLEVEL) False
fi
XCOMM Register our interest in participating in session management.
XmAddWMProtocols $TOPLEVEL $SAVE_SESSION_ATOM
XmAddWMProtocolCallback $TOPLEVEL $SAVE_SESSION_ATOM SessionCallback
XtMainLoop