XCOMM! CDE_INSTALLATION_TOP/bin/dtksh XCOMM $XConsortium: DtWsTest1.src /main/3 1996/04/23 20:18:06 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 how to interact with the workspace XCOMM manager. It demonstrates the following capabilities: XCOMM XCOMM 1) How to query which workspaces the widgets currently reside it. XCOMM 2) How to set the current workspace. XCOMM 3) How to be notified when the current workspace changes. XCOMM integer wsCount XCOMM Pushbutton Callback: This function asks the workspace manager to change XCOMM to the workspace indicated by $1; $1 is an X atom XCOMM which identifies the new workspace. At some point XCOMM after our request to the workspace manager, the XCOMM workspace manager will activate our WsCB function, XCOMM letting us know that the change has actually taken XCOMM place. SetWorkspace() { echo if DtWsmSetCurrentWorkspace $TOPLEVEL $1; then echo "Changing to new workspace" else XmGetAtomName NAME $(XtDisplay "-" $TOPLEVEL) $1 echo "Unable to Change to workspace " $NAME fi } XCOMM Workspace Changed Callback: This function is invoked whenever the workspace XCOMM manager changes workspaces. It will simply XCOMM query the 'name' of the new workspace, and XCOMM echo it outl WsCB() { DtWsmGetCurrentWorkspace $(XtDisplay "-" $TOPLEVEL) \ $(XRootWindowOfScreen "-" $(XtScreen "-" $TOPLEVEL)) \ NEW_ATOM XmGetAtomName NAME $(XtDisplay "-" $TOPLEVEL) $NEW_ATOM echo "Change to workspace complete " $NAME "("$NEW_ATOM")" } XCOMM ###################### Create the Main UI ############################### XtInitialize TOPLEVEL dtWsTest DtWsTest "$0" "$@" XtSetValues $TOPLEVEL allowShellResize:True XtCreateManagedWidget DA da XmDrawingArea $TOPLEVEL XtSetValues $DA height:200 width:200 XtRealizeWidget $TOPLEVEL XSync $(XtDisplay "-" $TOPLEVEL) False XtCreateApplicationShell TOPLEVEL2 DtWsTesta TopLevelShell XtCreateManagedWidget RC rc XmRowColumn $TOPLEVEL2 \ orientation:HORIZONTAL \ packing:PACK_COLUMN XCOMM Get a list of all of the workspaces, and create a pushbutton for each one. XCOMM When a pushbutton is activated, it will ask the workspace manager to XCOMM change to the indicated workspace. oldIF=$IFS if DtWsmGetWorkspaceList $(XtDisplay "-" $TOPLEVEL) \ $(XRootWindowOfScreen "-" $(XtScreen "-" $TOPLEVEL)) \ WS_LIST; then IFS=, wsCount=0 for item in $WS_LIST; do XmGetAtomName NAME $(XtDisplay "-" $TOPLEVEL) $item label="Set Current Workspace to "$NAME XtCreateManagedWidget ITEM $item XmPushButton $RC \ labelString:$label XtAddCallback $ITEM activateCallback "SetWorkspace $item" wsCount=$wsCount+1 done IFS=$oldIFS else echo "Unable to get workspace list" exit -1 fi XtSetValues $RC numColumns:$wsCount XtRealizeWidget $TOPLEVEL2 XSync $(XtDisplay "-" $TOPLEVEL) False XCOMM The following block queries the initial set of workspaces occupied by XCOMM this shell script; this list is printed out. Next, it will ask the XCOMM workspace manager to move the shell script windows into all workspaces. XCOMM Lastly, it will again ask the workspace manager for the list of XCOMM workspaces occupied by the shell script windows, and will again print XCOMM out the list. if DtWsmGetWorkspacesOccupied $(XtDisplay "-" $TOPLEVEL) \ $(XtWindow "-" $TOPLEVEL) \ CURRENT_WS_LIST ; then echo "Initial workspaces occupied:" for item in $CURRENT_WS_LIST; do XmGetAtomName NAME $(XtDisplay "-" $TOPLEVEL) $item echo " "$NAME done DtWsmGetWorkspaceList $(XtDisplay "-" $TOPLEVEL) \ $(XRootWindowOfScreen "-" $(XtScreen "-" $TOPLEVEL)) \ WS_LIST DtWsmSetWorkspacesOccupied $(XtDisplay "-" $TOPLEVEL) \ $(XtWindow "-" $TOPLEVEL) \ $WS_LIST DtWsmSetWorkspacesOccupied $(XtDisplay "-" $TOPLEVEL2) \ $(XtWindow "-" $TOPLEVEL2) \ $WS_LIST else echo "Unable to get current list of occupied workspaces" echo -2 fi XSync $(XtDisplay "-" $TOPLEVEL) False XCOMM Print the new list of workspaces occupied DtWsmGetWorkspacesOccupied $(XtDisplay "-" $TOPLEVEL) \ $(XtWindow "-" $TOPLEVEL) \ CURRENT_WS_LIST echo "After modification, workspaces occupied:" IFS=, for item in $CURRENT_WS_LIST; do XmGetAtomName NAME $(XtDisplay "-" $TOPLEVEL) $item echo " "$NAME done IFS=$oldIFS echo "" XCOMM Add a callback to be notified whenever the workspace changes. DtWsmAddCurrentWorkspaceCallback HANDLE1 $TOPLEVEL WsCB XtMainLoop