123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- 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
|