Blame clients/mwm/WmCmd.c

Packit b099d7
/*
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
 */
Packit b099d7
/* $TOG: WmCmd.c /main/11 1997/03/20 11:15:26 dbl $
Packit b099d7
 *
Packit b099d7
 * (c) Copyright 1996 Digital Equipment Corporation.
Packit b099d7
 * (c) Copyright 1996 Hewlett-Packard Company.
Packit b099d7
 * (c) Copyright 1996 International Business Machines Corp.
Packit b099d7
 * (c) Copyright 1996 Sun Microsystems, Inc.
Packit b099d7
 * (c) Copyright 1996 Novell, Inc. 
Packit b099d7
 * (c) Copyright 1996 FUJITSU LIMITED.
Packit b099d7
 * (c) Copyright 1996 Hitachi.
Packit b099d7
 */
Packit b099d7
Packit b099d7
#ifdef HAVE_CONFIG_H
Packit b099d7
#include <config.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
#include <Xm/Xm.h>
Packit b099d7
#include <Xm/ScrollBarP.h>
Packit b099d7
#include "./WmWsmLib/utm_send.h"
Packit b099d7
#include "./WmWsmLib/wsm_proto.h"
Packit b099d7
#include "WmGlobal.h"
Packit b099d7
#include "WmFunction.h"
Packit b099d7
#include "WmCmd.h"
Packit b099d7
#include "WmMenu.h"
Packit b099d7
#include "WmResParse.h"
Packit b099d7
#include "WmWsm.h"
Packit b099d7
#include "WmDebug.h"
Packit b099d7
#include "WmWinConf.h"
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
#define MAX_CLIENT_CMDS 1000
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
static CARD32 cmdKillList[MAX_CLIENT_CMDS];
Packit b099d7
static unsigned long cmdKillListIndex;
Packit b099d7
Packit b099d7
#define ScrNum(w) (XScreenNumberOfScreen(XtScreen(w)))
Packit b099d7
#define CCI_TREE(w) (wmGD.Screens[ScrNum(w)].cciTree)
Packit b099d7
#define CCI_TREE_OF_SCR(scr) (wmGD.Screens[(scr)].cciTree)
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                              NewCommand                              |
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
CmdTree *
Packit b099d7
NewCommand (
Packit b099d7
     CARD32  commandID,
Packit b099d7
     CARD32  notifyWindow,
Packit b099d7
     char   *name,
Packit b099d7
     char   *defaultName)
Packit b099d7
	    
Packit b099d7
{
Packit b099d7
  CmdTree *ptr = (CmdTree *) XtMalloc(sizeof(CmdTree));
Packit b099d7
Packit b099d7
  ptr->commandID    = commandID;
Packit b099d7
  ptr->notifyWindow = notifyWindow;
Packit b099d7
Packit b099d7
  if (name != NULL) ptr->name = XtNewString(name);
Packit b099d7
  else              ptr->name = XtNewString("");
Packit b099d7
    
Packit b099d7
  if (defaultName != NULL) ptr->defaultName = XtNewString(defaultName);
Packit b099d7
  else                     ptr->defaultName = NULL;
Packit b099d7
Packit b099d7
  ptr->subTrees = NULL;
Packit b099d7
Packit b099d7
  ptr->next     = NULL;
Packit b099d7
Packit b099d7
  return(ptr);
Packit b099d7
}
Packit b099d7
Packit b099d7
/*---------------------------------------------------------------------------*
Packit b099d7
 |                                  FindCmd                                  |
Packit b099d7
 *---------------------------------------------------------------------------*/
Packit b099d7
CmdTree *
Packit b099d7
FindCmd(
Packit b099d7
     CARD32    commandID,
Packit b099d7
     CmdTree  *menuTree)
Packit b099d7
{
Packit b099d7
  CmdTree *pCmd;
Packit b099d7
Packit b099d7
  if (menuTree != NULL) PRINT("-> %s\n", menuTree->name);
Packit b099d7
Packit b099d7
  if (menuTree == NULL)
Packit b099d7
    {
Packit b099d7
      PRINT("<- NULL\n");
Packit b099d7
      return(NULL);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  if (menuTree->commandID == commandID)
Packit b099d7
    {
Packit b099d7
      PRINT("<- %d, %s\n", commandID, menuTree->name);
Packit b099d7
      return(menuTree);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  if ((pCmd = FindCmd(commandID, menuTree->next)) != NULL)
Packit b099d7
    return(pCmd);
Packit b099d7
Packit b099d7
  return(FindCmd(commandID, menuTree->subTrees));
Packit b099d7
}
Packit b099d7
Packit b099d7
/*---------------------------------------------------------------------------*
Packit b099d7
 |                             FindDuplicateName                             |
Packit b099d7
 | Scan through commandTree for another defined command with the same name.  |
Packit b099d7
 | Once found, return the ID of the duplicate.  Note that at most one match  |
Packit b099d7
 | can be found. If no match is found, 0 is returned.  This should NEVER be  |
Packit b099d7
 | the value of a command defined by a client.                               |
Packit b099d7
 *---------------------------------------------------------------------------*/
Packit b099d7
CARD32
Packit b099d7
FindDuplicateName(
Packit b099d7
     CmdTree  *menuTree,
Packit b099d7
     char     *name)
Packit b099d7
{
Packit b099d7
  CmdTree *tmp;
Packit b099d7
  CARD32  duplicateID;
Packit b099d7
Packit b099d7
  if (menuTree == NULL)
Packit b099d7
    return(0);
Packit b099d7
Packit b099d7
  else if ((menuTree->name != NULL) && (strcmp(menuTree->name, name) == 0))
Packit b099d7
    return(menuTree->commandID);
Packit b099d7
Packit b099d7
  else if ((duplicateID = FindDuplicateName(menuTree->subTrees, name)) != 0)
Packit b099d7
    return(duplicateID);
Packit b099d7
Packit b099d7
  else
Packit b099d7
    return(FindDuplicateName(menuTree->next, name));
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                              AddCommand                              |
Packit b099d7
 | Returns true if the commandSet was found and a new command was added.|
Packit b099d7
 | Note that toplevel commands have 0 as their commandSet.  This will   |
Packit b099d7
 | always match the top entry in the command tree since it is 0.        |
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Boolean
Packit b099d7
AddCommand (
Packit b099d7
     int      scr,
Packit b099d7
     CARD32   commandSet,
Packit b099d7
     CARD32   commandID,
Packit b099d7
     CARD32   notifyWindow,
Packit b099d7
     char    *name,
Packit b099d7
     char    *defaultName,
Packit b099d7
     CmdTree *ptr)
Packit b099d7
{
Packit b099d7
  /*
Packit b099d7
   *  For each subtree of the cmdtree, look for the commandset.
Packit b099d7
   *  If found, add the element there else keep looking.
Packit b099d7
   */
Packit b099d7
Packit b099d7
  CmdTree *tmp;
Packit b099d7
  CARD32 duplicateID;
Packit b099d7
Packit b099d7
  if (ptr == NULL) return (False);
Packit b099d7
Packit b099d7
  else if (ptr->commandID == commandSet)
Packit b099d7
    /* FOUND IT */
Packit b099d7
    {
Packit b099d7
      if ((duplicateID = FindDuplicateName(CCI_TREE_OF_SCR(scr), name)) != 0)
Packit b099d7
	{
Packit b099d7
	  /* a duplicate menu item already exists here, remove it first.
Packit b099d7
	   */
Packit b099d7
	  if (ptr->subTrees != NULL)
Packit b099d7
	    DestroyMenuSpec (&(wmGD.Screens[scr]), commandID);
Packit b099d7
	  DeleteCommand(commandID, &CCI_TREE_OF_SCR(scr));
Packit b099d7
	}
Packit b099d7
Packit b099d7
      tmp = ptr->subTrees;
Packit b099d7
      ptr->subTrees = NewCommand(commandID, notifyWindow, name, defaultName);
Packit b099d7
      ptr->subTrees->next = tmp;
Packit b099d7
Packit b099d7
      return(True);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  else
Packit b099d7
    {
Packit b099d7
      Boolean found;
Packit b099d7
Packit b099d7
      found = AddCommand(scr, commandSet, commandID, notifyWindow,
Packit b099d7
			 name, defaultName, ptr->next);
Packit b099d7
      if (!found)
Packit b099d7
	found = AddCommand(scr, commandSet, commandID, notifyWindow,
Packit b099d7
			   name, defaultName, ptr->subTrees);
Packit b099d7
Packit b099d7
      return (found);
Packit b099d7
    }
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/*---------------------------------------------------------------------------*
Packit b099d7
 |                          RemoveCommandBranch                              |
Packit b099d7
 | This routine all commands at the specified node in the command tree.      |
Packit b099d7
 *---------------------------------------------------------------------------*/
Packit b099d7
void
Packit b099d7
RemoveCommandBranch (CmdTree *menuTree)
Packit b099d7
{
Packit b099d7
  CmdTree *tmp = menuTree;
Packit b099d7
Packit b099d7
  while (menuTree != NULL)
Packit b099d7
    {
Packit b099d7
      if (menuTree->subTrees != (CmdTree*)NULL)
Packit b099d7
	RemoveCommandBranch(menuTree->subTrees);
Packit b099d7
Packit b099d7
      menuTree = menuTree->next;
Packit b099d7
      if (tmp->name != NULL)
Packit b099d7
	XtFree((char*)tmp->name);
Packit b099d7
      XtFree((char*)tmp);
Packit b099d7
    }
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/*---------------------------------------------------------------------------*
Packit b099d7
 |                              DeleteCommand                                |
Packit b099d7
 | This routine deletes any matching command entries in the Command Tree.    |
Packit b099d7
 *---------------------------------------------------------------------------*/
Packit b099d7
void
Packit b099d7
DeleteCommand (
Packit b099d7
     long      commandID,
Packit b099d7
     CmdTree **pmenuTree)
Packit b099d7
{
Packit b099d7
  if ((pmenuTree == NULL) || (*pmenuTree == NULL))
Packit b099d7
    return;
Packit b099d7
Packit b099d7
  else
Packit b099d7
    {
Packit b099d7
      CmdTree *tmp  = *pmenuTree;
Packit b099d7
      CmdTree *prev = NULL;
Packit b099d7
Packit b099d7
      while (tmp != (CmdTree *)NULL)
Packit b099d7
Packit b099d7
	if (tmp->commandID == commandID)
Packit b099d7
	  {
Packit b099d7
	    RemoveCommandBranch(tmp->subTrees); /* remove all sub-commands. */
Packit b099d7
	    if (prev == (CmdTree *)NULL)
Packit b099d7
	      *pmenuTree = tmp->next;
Packit b099d7
	    else
Packit b099d7
	      prev->next = tmp->next;
Packit b099d7
	    
Packit b099d7
	    if (tmp->name != NULL)
Packit b099d7
	      XtFree((char*)tmp->name);
Packit b099d7
	    XtFree((char *)tmp);
Packit b099d7
	    tmp = prev;
Packit b099d7
	  }
Packit b099d7
Packit b099d7
	else
Packit b099d7
	  {
Packit b099d7
	    if (tmp->subTrees != (CmdTree *)NULL)
Packit b099d7
	      DeleteCommand(commandID, &tmp->subTrees);
Packit b099d7
	    prev = tmp;
Packit b099d7
	    tmp = tmp->next;
Packit b099d7
	  }
Packit b099d7
    }
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                            DefineCommand                             |
Packit b099d7
 | hack version - restriction: no spaces allowed in names.              |
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
DefineCommand (
Packit b099d7
     Widget         w,
Packit b099d7
     Atom           target,
Packit b099d7
     MessageData    data,
Packit b099d7
     unsigned long  len,
Packit b099d7
     int            fmt)
Packit b099d7
{
Packit b099d7
  CARD32  commandID, commandSet, selection, duplicateID;
Packit b099d7
  String  name, defaultLabel;
Packit b099d7
  Boolean found = False;
Packit b099d7
  Window  owner;
Packit b099d7
  XWindowAttributes attr;
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * check data to make sure somethings there.
Packit b099d7
   */
Packit b099d7
  if ((data == NULL) || (len == 0))
Packit b099d7
    {
Packit b099d7
      PRINT("Bad data passed to DefineCommand.\n");
Packit b099d7
      return;
Packit b099d7
    }
Packit b099d7
Packit b099d7
  commandID    = UnpackCARD32(&data);
Packit b099d7
  selection    = UnpackCARD32(&data); /* selection to use for invoke cmd */
Packit b099d7
  commandSet   = UnpackCARD32(&data);
Packit b099d7
  name         = UnpackString(&data);
Packit b099d7
  defaultLabel = UnpackString(&data);
Packit b099d7
Packit b099d7
  PRINT("Define command: %d, %d, '%s', '%s'\n",
Packit b099d7
	commandID, commandSet, name, defaultLabel);
Packit b099d7
  
Packit b099d7
  /*
Packit b099d7
   *  Add command to menu structure.
Packit b099d7
   */
Packit b099d7
Packit b099d7
  if (CCI_TREE(w) == NULL)
Packit b099d7
    {
Packit b099d7
      CCI_TREE(w) = NewCommand(0, 0, NULL, NULL);
Packit b099d7
    }
Packit b099d7
Packit b099d7
Packit b099d7
  if (commandSet != 0)
Packit b099d7
    {
Packit b099d7
      found = AddCommand(ScrNum(w), commandSet, commandID, selection, name,
Packit b099d7
			 defaultLabel, CCI_TREE(w));
Packit b099d7
    }
Packit b099d7
  else
Packit b099d7
    /*
Packit b099d7
     * A leaf is being added to the command tree. There should not
Packit b099d7
     * be any other entries with the same name since matching with
Packit b099d7
     * the mwm resource file is done on names.  If a duplicate is
Packit b099d7
     * found, remove it first and any menu spec if it is a command
Packit b099d7
     * set. 
Packit b099d7
     */
Packit b099d7
    if ((duplicateID = FindDuplicateName(CCI_TREE(w), name)) != 0)
Packit b099d7
      {
Packit b099d7
	/* a duplicate menu item already exists here, remove it first.
Packit b099d7
	 */
Packit b099d7
	DestroyMenuSpec (&(wmGD.Screens[ScrNum(w)]), duplicateID);
Packit b099d7
	DeleteCommand(duplicateID, &CCI_TREE(w));
Packit b099d7
      }
Packit b099d7
Packit b099d7
  if (!found || commandSet == 0)
Packit b099d7
    {
Packit b099d7
      CmdTree *tmp;
Packit b099d7
Packit b099d7
      tmp = NewCommand(commandID, selection, name, defaultLabel);
Packit b099d7
      tmp->next = CCI_TREE(w)->next;
Packit b099d7
      CCI_TREE(w)->next = tmp;
Packit b099d7
    }
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                            IncludeCommand                            |
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
IncludeCommand (
Packit b099d7
     Widget         w,
Packit b099d7
     Atom           target,
Packit b099d7
     MessageData    data,
Packit b099d7
     unsigned long  len,
Packit b099d7
     int            fmt)
Packit b099d7
{
Packit b099d7
  CARD32         inLine, commandID, selection, count;
Packit b099d7
  Window        *windowIDs;
Packit b099d7
  CmdTree       *tPtr, *pNext;
Packit b099d7
  int            i, win;
Packit b099d7
  unsigned long  activeContext = 0L;
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * check data to make sure somethings there.
Packit b099d7
   */
Packit b099d7
  if ((data == NULL) || (len == 0))
Packit b099d7
    {
Packit b099d7
      PRINT("Bad data passed to IncludeCommand.\n");
Packit b099d7
      return;
Packit b099d7
    }
Packit b099d7
Packit b099d7
  inLine    = UnpackCARD32(&data);
Packit b099d7
  commandID = UnpackCARD32(&data);
Packit b099d7
  selection = UnpackCARD32(&data);
Packit b099d7
  count     = UnpackCARD32(&data);
Packit b099d7
Packit b099d7
  if (count > 0) windowIDs = (Window *) XtMalloc(sizeof(Window)*count);
Packit b099d7
  for (win=0; win
Packit b099d7
  {
Packit b099d7
      windowIDs[win] = UnpackCARD32(&data);
Packit b099d7
      PRINT("Got window ID %d.\n", windowIDs[win]);
Packit b099d7
  }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   *  Insert on root menu
Packit b099d7
   */
Packit b099d7
  if ((windowIDs[0] & WINDOW_MASK) == 0L)
Packit b099d7
    {
Packit b099d7
      ShowWaitState (TRUE);
Packit b099d7
	tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
	if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	    activeContext = F_CONTEXT_ROOT;
Packit b099d7
	    pNext = tPtr->next;
Packit b099d7
	    tPtr->next = NULL;
Packit b099d7
	    InsertTreeOnRootMenu(ACTIVE_PSD, tPtr, selection, inLine);
Packit b099d7
	    tPtr->next = pNext;
Packit b099d7
	}
Packit b099d7
      ShowWaitState (FALSE);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Insert on all clients
Packit b099d7
   */
Packit b099d7
  else if ((windowIDs[0] & WINDOW_MASK) == ALL_WINDOWS)
Packit b099d7
    {
Packit b099d7
      tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
      if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	  ShowWaitState (TRUE);
Packit b099d7
Packit b099d7
	  activeContext = 0L;
Packit b099d7
	  if (windowIDs[0] &   ICON_ONLY) activeContext |= F_CONTEXT_ICON;
Packit b099d7
	  if (windowIDs[0] & WINDOW_ONLY) activeContext |= F_CONTEXT_WINDOW;
Packit b099d7
      
Packit b099d7
	  pNext = tPtr->next;
Packit b099d7
	  tPtr->next = NULL;
Packit b099d7
	  InsertTreeOnAllClients (ACTIVE_PSD, tPtr, selection,
Packit b099d7
				  activeContext, inLine);
Packit b099d7
	  tPtr->next = pNext;
Packit b099d7
Packit b099d7
	  PRINT("Inserted commandID %d on all windows.\n", commandID);
Packit b099d7
	  
Packit b099d7
	  ShowWaitState (FALSE);
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	PRINT("ERROR - commandID %d not found in command tree.\n", commandID);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Insert on specified clients
Packit b099d7
   */
Packit b099d7
  else
Packit b099d7
    {
Packit b099d7
      tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
      if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	  ShowWaitState (TRUE);
Packit b099d7
Packit b099d7
	  for (i=0; i
Packit b099d7
	    {
Packit b099d7
	      ClientData *pCD;
Packit b099d7
	      
Packit b099d7
	      activeContext = 0L;
Packit b099d7
	      if (windowIDs[i] &   ICON_ONLY)
Packit b099d7
		activeContext |= F_CONTEXT_ICON;
Packit b099d7
	      if (windowIDs[i] & WINDOW_ONLY)
Packit b099d7
		activeContext |= F_CONTEXT_WINDOW;
Packit b099d7
	      pCD = GetPCD(ScrNum(w), windowIDs[i] & WINDOW_MASK);
Packit b099d7
	      if (pCD != NULL)
Packit b099d7
	      {
Packit b099d7
		  pNext = tPtr->next;
Packit b099d7
		  tPtr->next = NULL;
Packit b099d7
		  InsertTreeOnSingleClient (pCD->pSD, pCD, tPtr, selection,
Packit b099d7
					    activeContext, inLine);
Packit b099d7
		  tPtr->next = pNext;
Packit b099d7
	      }
Packit b099d7
	    }
Packit b099d7
Packit b099d7
	  ShowWaitState (FALSE);
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	PRINT("ERROR - commandID %d not found in command tree.\n", commandID);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  if (count > 0)
Packit b099d7
    XtFree((char*)windowIDs);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             EnableCommand                            |
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
EnableCommand (
Packit b099d7
     Widget         w,
Packit b099d7
     Atom           target,
Packit b099d7
     MessageData    data,
Packit b099d7
     unsigned long  len,
Packit b099d7
     int            fmt)
Packit b099d7
{
Packit b099d7
  CARD32         commandID, count;
Packit b099d7
  Window        *windowIDs;
Packit b099d7
  CmdTree       *tPtr, *pNext;
Packit b099d7
  int            i, win;
Packit b099d7
  unsigned long  activeContext = 0L;
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * check data to make sure somethings there.
Packit b099d7
   */
Packit b099d7
  if ((data == NULL) || (len == 0))
Packit b099d7
    {
Packit b099d7
      PRINT("Bad data passed to EnableCommand.\n");
Packit b099d7
      return;
Packit b099d7
    }
Packit b099d7
Packit b099d7
  commandID = UnpackCARD32(&data);
Packit b099d7
  count     = UnpackCARD32(&data);
Packit b099d7
Packit b099d7
  if (count > 0) windowIDs = (Window *) XtMalloc(sizeof(Window)*count);
Packit b099d7
  for (win=0; win
Packit b099d7
    {
Packit b099d7
      windowIDs[win] = UnpackCARD32(&data);
Packit b099d7
      PRINT("Got window ID %d.\n", windowIDs[win]);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   *  Enable on root menu
Packit b099d7
   */
Packit b099d7
  if ((windowIDs[0] & WINDOW_MASK) == 0L)
Packit b099d7
    {
Packit b099d7
      tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
      if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	  for (i=0; i
Packit b099d7
	  {
Packit b099d7
	      activeContext = F_CONTEXT_ROOT;
Packit b099d7
	      pNext = tPtr->next;
Packit b099d7
	      tPtr->next = NULL;
Packit b099d7
	      ModifyClientCommandTree (ACTIVE_PSD, NULL, ROOT, tPtr,
Packit b099d7
				       ENABLE, activeContext, NULL);
Packit b099d7
	      tPtr->next = pNext;
Packit b099d7
	  }
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	PRINT("ERROR - commandID %d not found in command tree.\n", commandID);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Enable on all clients
Packit b099d7
   */
Packit b099d7
  else if ((windowIDs[0] & WINDOW_MASK) == ALL_WINDOWS)
Packit b099d7
    {
Packit b099d7
      tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
      if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	  activeContext = 0L;
Packit b099d7
	  if (windowIDs[0] &   ICON_ONLY) activeContext |= F_CONTEXT_ICON;
Packit b099d7
	  if (windowIDs[0] & WINDOW_ONLY) activeContext |= F_CONTEXT_WINDOW;
Packit b099d7
      
Packit b099d7
	  pNext = tPtr->next;
Packit b099d7
	  tPtr->next = NULL;
Packit b099d7
	  ModifyClientCommandTree (ACTIVE_PSD, NULL, ALL, tPtr, ENABLE,
Packit b099d7
				   activeContext, NULL);
Packit b099d7
	  tPtr->next = pNext;
Packit b099d7
Packit b099d7
	  PRINT("Enabled commandID %d on all windows.\n", commandID);
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	PRINT("ERROR - commandID %d not found in command tree.\n", commandID);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Enable on specified clients
Packit b099d7
   */
Packit b099d7
  else
Packit b099d7
    {
Packit b099d7
      tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
      if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	  for (i=0; i
Packit b099d7
	    {
Packit b099d7
	      ClientData *pCD;
Packit b099d7
Packit b099d7
	      activeContext = 0L;
Packit b099d7
	      if (windowIDs[i] &   ICON_ONLY)
Packit b099d7
		activeContext |= F_CONTEXT_ICON;
Packit b099d7
	      if (windowIDs[i] & WINDOW_ONLY)
Packit b099d7
		activeContext |= F_CONTEXT_WINDOW;
Packit b099d7
	      
Packit b099d7
	      pCD = GetPCD(ScrNum(w), windowIDs[i] & WINDOW_MASK);
Packit b099d7
	      if (pCD != NULL)
Packit b099d7
	      {
Packit b099d7
		  pNext = tPtr->next;
Packit b099d7
		  tPtr->next = NULL;
Packit b099d7
		  ModifyClientCommandTree (pCD->pSD, pCD, SINGLE, tPtr,
Packit b099d7
					   ENABLE, activeContext, NULL);
Packit b099d7
		  tPtr->next = pNext;
Packit b099d7
	      }
Packit b099d7
	    }
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	PRINT("ERROR - commandID %d not found in command tree.\n", commandID);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  if (count > 0)
Packit b099d7
    XtFree((char*)windowIDs);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             DisableCommand                            |
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
DisableCommand (
Packit b099d7
     Widget         w,
Packit b099d7
     Atom           target,
Packit b099d7
     MessageData    data,
Packit b099d7
     unsigned long  len,
Packit b099d7
     int            fmt)
Packit b099d7
{
Packit b099d7
  CARD32         commandID, count;
Packit b099d7
  Window        *windowIDs;
Packit b099d7
  CmdTree       *tPtr, *pNext;
Packit b099d7
  int            i, win;
Packit b099d7
  unsigned long  activeContext = 0L;
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * check data to make sure somethings there.
Packit b099d7
   */
Packit b099d7
  if ((data == NULL) || (len == 0))
Packit b099d7
    {
Packit b099d7
      PRINT("Bad data passed to DisableCommand.\n");
Packit b099d7
      return;
Packit b099d7
    }
Packit b099d7
Packit b099d7
  commandID = UnpackCARD32(&data);
Packit b099d7
  count     = UnpackCARD32(&data);
Packit b099d7
Packit b099d7
  if (count > 0) windowIDs = (Window *) XtMalloc(sizeof(Window)*count);
Packit b099d7
  for (win=0; win
Packit b099d7
    {
Packit b099d7
      windowIDs[win] = UnpackCARD32(&data);
Packit b099d7
      PRINT("Got window ID %d.\n", windowIDs[win]);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   *  Disable on root menu
Packit b099d7
   */
Packit b099d7
  if ((windowIDs[0] & WINDOW_MASK) == 0L)
Packit b099d7
    {
Packit b099d7
      tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
      if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	  for (i=0; i
Packit b099d7
	  {
Packit b099d7
	      activeContext = F_CONTEXT_ROOT;
Packit b099d7
	      pNext = tPtr->next;
Packit b099d7
	      tPtr->next = NULL;
Packit b099d7
	      ModifyClientCommandTree (ACTIVE_PSD, NULL, ROOT, tPtr,
Packit b099d7
				       DISABLE, activeContext, NULL);
Packit b099d7
	      tPtr->next = pNext;
Packit b099d7
	  }
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	PRINT("ERROR - commandID %d not found in command tree.\n", commandID);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Disable on all clients
Packit b099d7
   */
Packit b099d7
  else if ((windowIDs[0] & WINDOW_MASK) == ALL_WINDOWS)
Packit b099d7
    {
Packit b099d7
      tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
      if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	  activeContext = 0L;
Packit b099d7
	  if (windowIDs[0] &   ICON_ONLY) activeContext |= F_CONTEXT_ICON;
Packit b099d7
	  if (windowIDs[0] & WINDOW_ONLY) activeContext |= F_CONTEXT_WINDOW;
Packit b099d7
      
Packit b099d7
	  pNext = tPtr->next;
Packit b099d7
	  tPtr->next = NULL;
Packit b099d7
	  ModifyClientCommandTree (ACTIVE_PSD, NULL, ALL, tPtr,
Packit b099d7
				   DISABLE, activeContext, NULL);
Packit b099d7
	  tPtr->next = pNext;
Packit b099d7
Packit b099d7
	  PRINT("Disabled commandID %d on all windows.\n", commandID);
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	PRINT("ERROR - commandID %d not found in command tree.\n", commandID);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Disable on specified clients
Packit b099d7
   */
Packit b099d7
  else
Packit b099d7
    {
Packit b099d7
      tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
      if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	  for (i=0; i
Packit b099d7
	    {
Packit b099d7
	      ClientData *pCD;
Packit b099d7
Packit b099d7
	      activeContext = 0L;
Packit b099d7
	      if (windowIDs[i] &   ICON_ONLY)
Packit b099d7
		activeContext |= F_CONTEXT_ICON;
Packit b099d7
	      if (windowIDs[i] & WINDOW_ONLY)
Packit b099d7
		activeContext |= F_CONTEXT_WINDOW;
Packit b099d7
	      
Packit b099d7
	      pCD = GetPCD(ScrNum(w), windowIDs[i] & WINDOW_MASK);
Packit b099d7
	      if (pCD != NULL)
Packit b099d7
	      {
Packit b099d7
		  pNext = tPtr->next;
Packit b099d7
		  tPtr->next = NULL;
Packit b099d7
		  ModifyClientCommandTree (pCD->pSD, pCD, SINGLE, tPtr,
Packit b099d7
					   DISABLE, activeContext, NULL);
Packit b099d7
		  tPtr->next = pNext;
Packit b099d7
	      }
Packit b099d7
	    }
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	PRINT("ERROR - commandID %d not found in command tree.\n", commandID);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  if (count > 0)
Packit b099d7
    XtFree((char*)windowIDs);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             RenameCommand                            |
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
RenameCommand (
Packit b099d7
     Widget         w,
Packit b099d7
     Atom           target,
Packit b099d7
     MessageData    data,
Packit b099d7
     unsigned long  len,
Packit b099d7
     int            fmt)
Packit b099d7
{
Packit b099d7
  CARD32         commandID, count;
Packit b099d7
  Window        *windowIDs;
Packit b099d7
  CmdTree       *tPtr, *pNext;
Packit b099d7
  int            i, win;
Packit b099d7
  unsigned long  activeContext = 0L;
Packit b099d7
  String	 newname;
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * check data to make sure somethings there.
Packit b099d7
   */
Packit b099d7
  if ((data == NULL) || (len == 0))
Packit b099d7
    {
Packit b099d7
      PRINT("Bad data passed to RenameCommand.\n");
Packit b099d7
      return;
Packit b099d7
    }
Packit b099d7
Packit b099d7
  commandID = UnpackCARD32(&data);
Packit b099d7
  newname   = UnpackString(&data);
Packit b099d7
  count     = UnpackCARD32(&data);
Packit b099d7
Packit b099d7
  if (count > 0) windowIDs = (Window *) XtMalloc(sizeof(Window)*count);
Packit b099d7
  for (win=0; win
Packit b099d7
    {
Packit b099d7
      windowIDs[win] = UnpackCARD32(&data);
Packit b099d7
      PRINT("Got window ID %d.\n", windowIDs[win]);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   *  Rename on root menu
Packit b099d7
   */
Packit b099d7
  if ((windowIDs[0] & WINDOW_MASK) == 0L)
Packit b099d7
    {
Packit b099d7
      tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
      if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	  for (i=0; i
Packit b099d7
	  {
Packit b099d7
	      activeContext = F_CONTEXT_ROOT;
Packit b099d7
	      pNext = tPtr->next;
Packit b099d7
	      tPtr->next = NULL;
Packit b099d7
	      ModifyClientCommandTree (ACTIVE_PSD, NULL, ROOT, tPtr,
Packit b099d7
				       RENAME, activeContext, newname);
Packit b099d7
	      tPtr->next = pNext;
Packit b099d7
	  }
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	PRINT("ERROR - commandID %d not found in command tree.\n", commandID);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Rename on all clients
Packit b099d7
   */
Packit b099d7
  else if ((windowIDs[0] & WINDOW_MASK) == ALL_WINDOWS)
Packit b099d7
    {
Packit b099d7
      tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
      if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	  activeContext = 0L;
Packit b099d7
	  if (windowIDs[0] &   ICON_ONLY) activeContext |= F_CONTEXT_ICON;
Packit b099d7
	  if (windowIDs[0] & WINDOW_ONLY) activeContext |= F_CONTEXT_WINDOW;
Packit b099d7
      
Packit b099d7
	  pNext = tPtr->next;
Packit b099d7
	  tPtr->next = NULL;
Packit b099d7
	  ModifyClientCommandTree (ACTIVE_PSD, NULL, ALL, tPtr,
Packit b099d7
				   RENAME, activeContext, newname);
Packit b099d7
	  tPtr->next = pNext;
Packit b099d7
Packit b099d7
	  PRINT("Renamed commandID %d on all windows.\n", commandID);
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	PRINT("ERROR - commandID %d not found in command tree.\n", commandID);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Rename on specified clients
Packit b099d7
   */
Packit b099d7
  else
Packit b099d7
    {
Packit b099d7
      tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
      if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	  for (i=0; i
Packit b099d7
	    {
Packit b099d7
	      ClientData *pCD;
Packit b099d7
Packit b099d7
	      activeContext = 0L;
Packit b099d7
	      if (windowIDs[i] &   ICON_ONLY)
Packit b099d7
		activeContext |= F_CONTEXT_ICON;
Packit b099d7
	      if (windowIDs[i] & WINDOW_ONLY)
Packit b099d7
		activeContext |= F_CONTEXT_WINDOW;
Packit b099d7
	      
Packit b099d7
	      pCD = GetPCD(ScrNum(w), windowIDs[i] & WINDOW_MASK);
Packit b099d7
	      if (pCD != NULL)
Packit b099d7
	      {
Packit b099d7
		  pNext = tPtr->next;
Packit b099d7
		  tPtr->next = NULL;
Packit b099d7
		  ModifyClientCommandTree (pCD->pSD, pCD, SINGLE, tPtr,
Packit b099d7
					   RENAME, activeContext, newname);
Packit b099d7
		  tPtr->next = pNext;
Packit b099d7
	      }
Packit b099d7
	    }
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	PRINT("ERROR - commandID %d not found in command tree.\n", commandID);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  if (count > 0)
Packit b099d7
    XtFree((char*)windowIDs);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             RemoveCommand                            |
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
RemoveCommand (
Packit b099d7
     Widget         w,
Packit b099d7
     Atom           target,
Packit b099d7
     MessageData    data,
Packit b099d7
     unsigned long  len,
Packit b099d7
     int            fmt)
Packit b099d7
{
Packit b099d7
  CARD32         commandID, count;
Packit b099d7
  Window        *windowIDs;
Packit b099d7
  CmdTree       *tPtr, *pNext;
Packit b099d7
  int            i, win;
Packit b099d7
  unsigned long  activeContext = 0L;
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * check data to make sure somethings there.
Packit b099d7
   */
Packit b099d7
  if ((data == NULL) || (len == 0))
Packit b099d7
    {
Packit b099d7
      PRINT("Bad data passed to RemoveCommand.\n");
Packit b099d7
      return;
Packit b099d7
    }
Packit b099d7
Packit b099d7
  commandID = UnpackCARD32(&data);
Packit b099d7
  count     = UnpackCARD32(&data);
Packit b099d7
Packit b099d7
  if (count > 0) windowIDs = (Window *) XtMalloc(sizeof(Window)*count);
Packit b099d7
  for (win=0; win
Packit b099d7
    {
Packit b099d7
      windowIDs[win] = UnpackCARD32(&data);
Packit b099d7
      PRINT("Got window ID %d.\n", windowIDs[win]);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   *  Remove on root menu
Packit b099d7
   */
Packit b099d7
  if ((windowIDs[0] & WINDOW_MASK) == 0L)
Packit b099d7
    {
Packit b099d7
      tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
      if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	  for (i=0; i
Packit b099d7
	  {
Packit b099d7
	      activeContext = F_CONTEXT_ROOT;
Packit b099d7
	      pNext = tPtr->next;
Packit b099d7
	      tPtr->next = NULL;
Packit b099d7
	      ModifyClientCommandTree (ACTIVE_PSD, NULL, ROOT, tPtr,
Packit b099d7
				       REMOVE, activeContext, NULL);
Packit b099d7
	      tPtr->next = pNext;
Packit b099d7
	  }
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	PRINT("ERROR - commandID %d not found in command tree.\n", commandID);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Remove on all clients
Packit b099d7
   */
Packit b099d7
  else if ((windowIDs[0] & WINDOW_MASK) == ALL_WINDOWS)
Packit b099d7
    {
Packit b099d7
      tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
      if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	  activeContext = 0L;
Packit b099d7
	  if (windowIDs[0] &   ICON_ONLY) activeContext |= F_CONTEXT_ICON;
Packit b099d7
	  if (windowIDs[0] & WINDOW_ONLY) activeContext |= F_CONTEXT_WINDOW;
Packit b099d7
      
Packit b099d7
	  pNext = tPtr->next;
Packit b099d7
	  tPtr->next = NULL;
Packit b099d7
	  ModifyClientCommandTree (ACTIVE_PSD, NULL, ALL, tPtr, REMOVE,
Packit b099d7
				   activeContext, NULL);
Packit b099d7
	  tPtr->next = pNext;
Packit b099d7
Packit b099d7
	  PRINT("Removed commandID %d on all windows.\n", commandID);
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	PRINT("ERROR - commandID %d not found in command tree.\n", commandID);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Remove on specified clients
Packit b099d7
   */
Packit b099d7
  else
Packit b099d7
    {
Packit b099d7
      tPtr = FindCmd (commandID, CCI_TREE(w));
Packit b099d7
      if (tPtr != NULL)
Packit b099d7
	{
Packit b099d7
	  for (i=0; i
Packit b099d7
	  {
Packit b099d7
	      ClientData *pCD;
Packit b099d7
	      
Packit b099d7
	      activeContext = 0L;
Packit b099d7
	      if (windowIDs[i] &   ICON_ONLY)
Packit b099d7
		activeContext |= F_CONTEXT_ICON;
Packit b099d7
	      if (windowIDs[i] & WINDOW_ONLY)
Packit b099d7
		activeContext |= F_CONTEXT_WINDOW;
Packit b099d7
Packit b099d7
	      pCD = GetPCD(ScrNum(w), windowIDs[i] & WINDOW_MASK);
Packit b099d7
	      if (pCD != NULL)
Packit b099d7
	      {
Packit b099d7
		  pNext = tPtr->next;
Packit b099d7
		  tPtr->next = NULL;
Packit b099d7
		  ModifyClientCommandTree (pCD->pSD, pCD, SINGLE, tPtr,
Packit b099d7
					   REMOVE, activeContext, NULL);
Packit b099d7
		  tPtr->next = pNext;
Packit b099d7
	      }
Packit b099d7
	    }
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	PRINT("ERROR - commandID %d not found in command tree.\n", commandID);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  if (count > 0)
Packit b099d7
    XtFree((char*)windowIDs);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*---------------------------------------------------------------------------*
Packit b099d7
 |                           RemoveMatchingCommands                          |
Packit b099d7
 | Recursively removes commands that match a given window in the specified   |
Packit b099d7
 | command tree.                                                             |
Packit b099d7
 *---------------------------------------------------------------------------*/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
RemoveMatchingCommands (
Packit b099d7
     int    scr,
Packit b099d7
     Window clientWindow,
Packit b099d7
     CmdTree *tree)
Packit b099d7
{
Packit b099d7
  if (tree == NULL)
Packit b099d7
    return;
Packit b099d7
Packit b099d7
  if (tree->subTrees != NULL)
Packit b099d7
    RemoveMatchingCommands(scr, clientWindow, tree->subTrees);
Packit b099d7
Packit b099d7
  if (tree->notifyWindow == clientWindow)
Packit b099d7
    {
Packit b099d7
      cmdKillList[ cmdKillListIndex++ ] = tree->commandID;
Packit b099d7
    }
Packit b099d7
Packit b099d7
  if (tree->next != NULL)
Packit b099d7
    RemoveMatchingCommands(scr, clientWindow, tree->next);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*---------------------------------------------------------------------------*
Packit b099d7
 |                           RemoveCommandsForClient                         |
Packit b099d7
 | This function will remove any command that was inserted by this client.   |
Packit b099d7
 *---------------------------------------------------------------------------*/
Packit b099d7
void
Packit b099d7
RemoveCommandsForClient (
Packit b099d7
     int    scr,
Packit b099d7
     Window clientWindow)
Packit b099d7
{
Packit b099d7
  int i;
Packit b099d7
Packit b099d7
  ShowWaitState (TRUE);
Packit b099d7
Packit b099d7
  cmdKillListIndex = 0;
Packit b099d7
  RemoveMatchingCommands(scr, clientWindow, CCI_TREE_OF_SCR(scr));
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Remove any matching commands on the root menu.
Packit b099d7
   */
Packit b099d7
  for (i = 0;  i < cmdKillListIndex;  i++)
Packit b099d7
    {
Packit b099d7
      CmdTree *tPtr, *pNext;
Packit b099d7
      MenuSpec *pMS;
Packit b099d7
      WmScreenData *pSD = ACTIVE_PSD;
Packit b099d7
Packit b099d7
      while (tPtr = FindCmd (cmdKillList[ i ], CCI_TREE_OF_SCR(scr)))
Packit b099d7
	{
Packit b099d7
	  /* make sure ModifyClientCommandTree can't muck with cmdTree. */
Packit b099d7
	  pNext = tPtr->next;
Packit b099d7
	  tPtr->next = NULL;
Packit b099d7
Packit b099d7
	  ModifyClientCommandTree (pSD, NULL, ALL, tPtr,
Packit b099d7
				   REMOVE, F_CONTEXT_ALL, NULL);
Packit b099d7
	  /* restore tree. */
Packit b099d7
	  tPtr->next = pNext;
Packit b099d7
Packit b099d7
	  /*
Packit b099d7
	   * if this command caused a menu spec to be created, remove it.
Packit b099d7
	   */
Packit b099d7
	  DestroyMenuSpec(pSD, cmdKillList[i]);
Packit b099d7
Packit b099d7
	  /*
Packit b099d7
	   * Now delete the matching entry in the command tree.
Packit b099d7
	   */
Packit b099d7
	  DeleteCommand(cmdKillList[ i ], &CCI_TREE_OF_SCR(scr));
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
  ShowWaitState (FALSE);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/*---------------------------------------------------------------------------*
Packit b099d7
 |                            InvokeMessageReply                             |
Packit b099d7
 *---------------------------------------------------------------------------*/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
InvokeMessageReply (Widget w, XtPointer clientData, XtPointer callData)
Packit b099d7
{
Packit b099d7
  PRINT("Invoke message reply received.\n");
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*---------------------------------------------------------------------------*
Packit b099d7
 |                            SendInvokeMessage                              |
Packit b099d7
 | Send a convert request to the client that owns the menu command.          |
Packit b099d7
 *---------------------------------------------------------------------------*/
Packit b099d7
void
Packit b099d7
SendInvokeMessage (
Packit b099d7
     CARD32 commandID,
Packit b099d7
     CARD32 clientWindow,
Packit b099d7
     Atom   selection,
Packit b099d7
     Time   time)
Packit b099d7
{
Packit b099d7
  MessageData  msg, fulldata;
Packit b099d7
  unsigned long size;
Packit b099d7
Packit b099d7
  size = (unsigned long)(sizeof(CARD32) + sizeof(CARD32));
Packit b099d7
  msg = fulldata = (MessageData)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
  msg = PackCARD32(msg, commandID);
Packit b099d7
  msg = PackCARD32(msg, clientWindow);
Packit b099d7
Packit b099d7
  UTMSendMessage(ACTIVE_PSD->utmShell,
Packit b099d7
		 selection,
Packit b099d7
		 wmGD._MOTIF_WM_INVOKE_COMMAND,
Packit b099d7
		 (XtPointer)fulldata, size, WSM_PROTO_FMT,
Packit b099d7
		 InvokeMessageReply, NULL, /* no client data */
Packit b099d7
		 time);
Packit b099d7
}
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             CopyMwmGadget
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Packit b099d7
static void
Packit b099d7
CopyMwmGadget(GadgetRectangle *mwm_gadget, GadgetRectangle *auto_gadget)
Packit b099d7
{
Packit b099d7
	auto_gadget->id = mwm_gadget->id;
Packit b099d7
	auto_gadget->rect.x = mwm_gadget->rect.x;
Packit b099d7
	auto_gadget->rect.y = mwm_gadget->rect.y;
Packit b099d7
	auto_gadget->rect.width = mwm_gadget->rect.width;
Packit b099d7
	auto_gadget->rect.height = mwm_gadget->rect.height;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             FillInvalidInfo
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Packit b099d7
static void
Packit b099d7
FillInvalidInfo(GadgetRectangle *auto_gadget)
Packit b099d7
{
Packit b099d7
	auto_gadget->id = INVALID;
Packit b099d7
	auto_gadget->rect.x = auto_gadget->rect.y = auto_gadget->rect.width =
Packit b099d7
	auto_gadget->rect.height = INVALID;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             GetMinimizeInfo
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetMinimizeInfo(ClientData *pcd, XtPointer reply)
Packit b099d7
{
Packit b099d7
  /*
Packit b099d7
   * This function packs data about the minimize button in the following
Packit b099d7
   * order : 1. gadget count 2. id  3. x position 4. y position 5. width
Packit b099d7
   *         6. height
Packit b099d7
   */
Packit b099d7
Packit b099d7
Packit b099d7
  GadgetRectangle minimize_button;
Packit b099d7
  CARD32 filledCount;
Packit b099d7
  int i;
Packit b099d7
  Window frameWin;
Packit b099d7
  Boolean minFound = False;
Packit b099d7
Packit b099d7
      
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
   filledCount = pcd->cTitleGadgets;
Packit b099d7
   frameWin = pcd->clientFrameWin;
Packit b099d7
      
Packit b099d7
	
Packit b099d7
   for (i=0; i < filledCount; i++)
Packit b099d7
 	if (pcd->pTitleGadgets[i].id == FRAME_MINIMIZE)
Packit b099d7
	   {
Packit b099d7
	        CopyMwmGadget (&(pcd->pTitleGadgets[i]), &minimize_button); 
Packit b099d7
		minFound = True;
Packit b099d7
	   }
Packit b099d7
Packit b099d7
   if (minFound == False)
Packit b099d7
	FillInvalidInfo (&minimize_button);
Packit b099d7
	
Packit b099d7
		
Packit b099d7
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)filledCount);
Packit b099d7
      reply = PackCARD32(reply, (CARD32)minimize_button.id);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)minimize_button.rect.x);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)minimize_button.rect.y);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)minimize_button.rect.width);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)minimize_button.rect.height); 
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)frameWin);
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             GetMaximizeInfo
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetMaximizeInfo(ClientData *pcd, XtPointer reply)
Packit b099d7
{
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * This function packs data about the maximize button in the following
Packit b099d7
   * order : 1. gadget count 2. id  3. x position 4. y position 5. width
Packit b099d7
   *         6. height 7. event window
Packit b099d7
   */
Packit b099d7
Packit b099d7
      int i;
Packit b099d7
      GadgetRectangle maximize_button;
Packit b099d7
      CARD32 filledCount;
Packit b099d7
      Window frameWin;
Packit b099d7
      Boolean maxFound = False;
Packit b099d7
Packit b099d7
Packit b099d7
      filledCount = pcd->cTitleGadgets;
Packit b099d7
      frameWin = pcd->clientFrameWin;
Packit b099d7
Packit b099d7
Packit b099d7
      for (i=0; i < filledCount; i++)
Packit b099d7
	{
Packit b099d7
     
Packit b099d7
        if (pcd->pTitleGadgets[i].id == FRAME_MAXIMIZE)
Packit b099d7
	  {
Packit b099d7
	    CopyMwmGadget (&(pcd->pTitleGadgets[i]),&maximize_button);
Packit b099d7
	    maxFound = True;
Packit b099d7
          }
Packit b099d7
Packit b099d7
      	}
Packit b099d7
      
Packit b099d7
      if (maxFound == False)
Packit b099d7
	FillInvalidInfo (&maximize_button);
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
	reply = PackCARD32 (reply, (CARD32)filledCount);
Packit b099d7
	reply = PackCARD32 (reply, (CARD32)maximize_button.id);
Packit b099d7
	reply = PackCARD32 (reply, (CARD32)maximize_button.rect.x);
Packit b099d7
	reply = PackCARD32 (reply, (CARD32)maximize_button.rect.y);
Packit b099d7
	reply = PackCARD32 (reply, (CARD32)maximize_button.rect.width);
Packit b099d7
	reply = PackCARD32 (reply, (CARD32)maximize_button.rect.height);
Packit b099d7
	reply = PackCARD32 (reply, (CARD32)frameWin);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             GetIconInfo
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetIconInfo(ClientData *pcd, XtPointer reply, Boolean use_icon_box)
Packit b099d7
{
Packit b099d7
Packit b099d7
   IconBoxData *icon_box;
Packit b099d7
   XmScrollBarWidget  hScrollBar, vScrollBar;
Packit b099d7
   Widget frameWidget, scrollWidget, shellWidget;
Packit b099d7
Packit b099d7
   
Packit b099d7
Packit b099d7
   CARD32 iconX, iconY, iconWidth, iconHeight ;
Packit b099d7
   CARD32 hMin, hMax, hSliderAreaWidth, hSliderX, hSliderAreaX,
Packit b099d7
          vMin, vMax, vSliderAreaHeight, vSliderY, vSliderAreaY;
Packit b099d7
   CARD32 rightArrowX, rightArrowY, leftArrowX, leftArrowY, 
Packit b099d7
          topArrowX, topArrowY, bottomArrowX, bottomArrowY;
Packit b099d7
   CARD32 iconBoxX, iconBoxY, iconBoxWidth, iconBoxHeight;
Packit b099d7
   Window frameWin, scrollWin, hScrollWin, vScrollWin, iconShellWin, iconFrameWin;
Packit b099d7
   CARD32 lastRow, lastCol;
Packit b099d7
   CARD32 iPlaceW, iPlaceH;
Packit b099d7
   CARD32 useIconBox;
Packit b099d7
   
Packit b099d7
   
Packit b099d7
   icon_box = pcd->pIconBox;
Packit b099d7
   useIconBox = pcd->pSD->useIconBox;
Packit b099d7
   
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
       /*
Packit b099d7
	* IconBox info
Packit b099d7
	*/
Packit b099d7
       if (use_icon_box == True)
Packit b099d7
	 {
Packit b099d7
	   hScrollBar =  (XmScrollBarWidget)icon_box->hScrollBar;
Packit b099d7
Packit b099d7
	   hMin = hScrollBar->scrollBar.minimum;
Packit b099d7
	   hMax = hScrollBar->scrollBar.maximum;
Packit b099d7
	   hSliderAreaWidth = hScrollBar->scrollBar.slider_area_width;
Packit b099d7
	   hSliderX = hScrollBar->scrollBar.slider_x;
Packit b099d7
	   hSliderAreaX = hScrollBar->scrollBar.slider_area_x;
Packit b099d7
	   leftArrowX = hScrollBar->core.x + 
Packit b099d7
	                  hScrollBar->scrollBar.arrow1_x +
Packit b099d7
	                  (hScrollBar->scrollBar.arrow_width/2);
Packit b099d7
	   leftArrowY = hScrollBar->core.y + 
Packit b099d7
	                  hScrollBar->scrollBar.arrow1_y +
Packit b099d7
	                  (hScrollBar->scrollBar.arrow_height/2);
Packit b099d7
Packit b099d7
	   rightArrowX = hScrollBar->core.x + hScrollBar->scrollBar.arrow2_x
Packit b099d7
	                  + (hScrollBar->scrollBar.arrow_width/2);
Packit b099d7
	   rightArrowY = hScrollBar->core.y + hScrollBar->scrollBar.arrow2_y
Packit b099d7
	                  + (hScrollBar->scrollBar.arrow_height/2);
Packit b099d7
Packit b099d7
	   vScrollBar =  (XmScrollBarWidget)icon_box->vScrollBar;
Packit b099d7
Packit b099d7
	   vMin = vScrollBar->scrollBar.minimum;
Packit b099d7
	   vMax = vScrollBar->scrollBar.maximum;
Packit b099d7
	   vSliderAreaHeight = vScrollBar->scrollBar.slider_area_height;
Packit b099d7
	   vSliderY = vScrollBar->scrollBar.slider_y;
Packit b099d7
	   vSliderAreaY = vScrollBar->scrollBar.slider_area_y;
Packit b099d7
Packit b099d7
	   topArrowX = vScrollBar->core.x + vScrollBar->scrollBar.arrow1_x
Packit b099d7
	                  + (vScrollBar->scrollBar.arrow_width/2);
Packit b099d7
	   topArrowY = vScrollBar->core.y + vScrollBar->scrollBar.arrow1_y
Packit b099d7
	                  + (vScrollBar->scrollBar.arrow_height/2);
Packit b099d7
Packit b099d7
	   bottomArrowX = vScrollBar->core.x + vScrollBar->scrollBar.arrow2_x
Packit b099d7
	                  + (vScrollBar->scrollBar.arrow_width/2);
Packit b099d7
	   bottomArrowY = hScrollBar->core.y + hScrollBar->scrollBar.arrow2_y
Packit b099d7
	                  + (hScrollBar->scrollBar.arrow_height/2);
Packit b099d7
Packit b099d7
Packit b099d7
	   
Packit b099d7
Packit b099d7
	   shellWidget = icon_box->shellWidget;
Packit b099d7
Packit b099d7
Packit b099d7
	   iconBoxX = shellWidget->core.x;
Packit b099d7
	   iconBoxY = shellWidget->core.y;
Packit b099d7
	   iconBoxWidth = shellWidget->core.width;
Packit b099d7
	   iconBoxHeight = shellWidget->core.height;
Packit b099d7
	   iconShellWin = XtWindow (shellWidget);
Packit b099d7
Packit b099d7
Packit b099d7
	   frameWidget = icon_box->frameWidget;
Packit b099d7
	   frameWin = XtWindow (frameWidget);
Packit b099d7
Packit b099d7
	   scrollWidget = icon_box->scrolledWidget;
Packit b099d7
	   scrollWin = XtWindow (scrollWidget);
Packit b099d7
	   
Packit b099d7
	   hScrollWin = XtWindow (hScrollBar);
Packit b099d7
	   vScrollWin = XtWindow (vScrollBar);
Packit b099d7
	   
Packit b099d7
	   lastCol = icon_box->lastCol;
Packit b099d7
	   lastRow = icon_box->lastRow;
Packit b099d7
	   iPlaceW = icon_box->IPD.iPlaceW;
Packit b099d7
	   iPlaceH = icon_box->IPD.iPlaceH;
Packit b099d7
	}
Packit b099d7
Packit b099d7
Packit b099d7
       /*
Packit b099d7
	* icon info
Packit b099d7
	*/
Packit b099d7
Packit b099d7
       iconX = pcd->iconX;
Packit b099d7
       iconY = pcd->iconY;
Packit b099d7
       iconWidth = pcd->pSD->iconWidth;
Packit b099d7
Packit b099d7
Packit b099d7
       iconHeight = pcd->pSD->iconHeight;
Packit b099d7
       iconFrameWin = pcd->iconFrameWin;
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
       reply = PackCARD32 (reply,(CARD32)useIconBox);
Packit b099d7
       reply = PackCARD32 (reply,(CARD32)iconX);
Packit b099d7
       reply = PackCARD32 (reply,(CARD32)iconY);
Packit b099d7
       reply = PackCARD32 (reply,(CARD32)iconWidth);
Packit b099d7
       reply = PackCARD32 (reply,(CARD32)iconHeight);
Packit b099d7
       reply = PackCARD32 (reply,(CARD32)iconFrameWin);
Packit b099d7
Packit b099d7
       if (use_icon_box == True)
Packit b099d7
	 {
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)hMin);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)hMax);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)hSliderAreaWidth);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)hSliderX);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)hSliderAreaX);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)vMin);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)vMax);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)vSliderAreaHeight);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)vSliderY);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)vSliderAreaY);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)rightArrowX);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)rightArrowY);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)leftArrowX);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)leftArrowY);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)topArrowX);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)topArrowY);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)bottomArrowX);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)bottomArrowY);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)iconBoxX);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)iconBoxY);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)iconBoxWidth);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)iconBoxHeight);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)iconShellWin);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)frameWin);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)scrollWin);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)hScrollWin);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)vScrollWin);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)lastCol);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)lastRow);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)iPlaceH);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)iPlaceW);
Packit b099d7
	   
Packit b099d7
	}
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             GetMoveInfo
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetMoveInfo(ClientData *pcd, XtPointer reply)
Packit b099d7
Packit b099d7
{
Packit b099d7
      int i;
Packit b099d7
      GadgetRectangle title;
Packit b099d7
      GadgetRectangle menu;
Packit b099d7
      CARD32 filledCount;
Packit b099d7
      CARD32 upperBorderWidth, lowerBorderWidth;
Packit b099d7
      CARD32 windowX, windowY;
Packit b099d7
      Window frameWin;
Packit b099d7
Packit b099d7
      Boolean titleFound = False;
Packit b099d7
      Boolean system_found = False;
Packit b099d7
Packit b099d7
Packit b099d7
      filledCount = pcd->cTitleGadgets;
Packit b099d7
      upperBorderWidth = pcd->frameInfo.upperBorderWidth;
Packit b099d7
      lowerBorderWidth = pcd->frameInfo.lowerBorderWidth;
Packit b099d7
      windowX = pcd->clientX;
Packit b099d7
      windowY = pcd->clientY;
Packit b099d7
      frameWin = pcd->clientFrameWin;
Packit b099d7
Packit b099d7
      for (i=0; i < filledCount; i++)
Packit b099d7
	{
Packit b099d7
	  if (pcd->pTitleGadgets[i].id == FRAME_TITLE)
Packit b099d7
	    {
Packit b099d7
		CopyMwmGadget (&(pcd->pTitleGadgets[i]), &title);
Packit b099d7
		titleFound = True;
Packit b099d7
	    }
Packit b099d7
Packit b099d7
	  if (pcd->pTitleGadgets[i].id == FRAME_SYSTEM)
Packit b099d7
	    {
Packit b099d7
	      CopyMwmGadget (&(pcd->pTitleGadgets[i]), &menu);
Packit b099d7
	      system_found = True;
Packit b099d7
	    }
Packit b099d7
Packit b099d7
        }
Packit b099d7
Packit b099d7
        if (titleFound == False)
Packit b099d7
	 FillInvalidInfo (&title);
Packit b099d7
Packit b099d7
        if (system_found == False)
Packit b099d7
	 FillInvalidInfo (&menu);
Packit b099d7
			  
Packit b099d7
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)filledCount);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)title.id);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)title.rect.x);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)title.rect.y);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)title.rect.width);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)title.rect.height);
Packit b099d7
       	 reply = PackCARD32 (reply, (CARD32)menu.id);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)menu.rect.x);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)menu.rect.y);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)menu.rect.width);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)menu.rect.height);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)upperBorderWidth);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)lowerBorderWidth);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)windowX);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)windowY);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)frameWin);
Packit b099d7
Packit b099d7
    }
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             GetResizeInfo
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetResizeInfo(ClientData *pcd, XtPointer reply, int dir)
Packit b099d7
{
Packit b099d7
      int i;
Packit b099d7
      GadgetRectangle east_resize, west_resize, gravity_resize, title;
Packit b099d7
      CARD32  upperBorderWidth, lowerBorderWidth;
Packit b099d7
      Window frameWin;
Packit b099d7
      int filledCount;
Packit b099d7
      Boolean titleFound = False;
Packit b099d7
Packit b099d7
Packit b099d7
      filledCount = pcd->cTitleGadgets;
Packit b099d7
Packit b099d7
      if (!(pcd->decor & MWM_DECOR_RESIZEH))
Packit b099d7
      	FillInvalidInfo (&gravity_resize);
Packit b099d7
      else
Packit b099d7
	{
Packit b099d7
		CopyMwmGadget (&pcd->pResizeGadgets[dir], &gravity_resize);
Packit b099d7
		CopyMwmGadget (&pcd->pResizeGadgets[WM_WEST], &west_resize);
Packit b099d7
		CopyMwmGadget (&pcd->pResizeGadgets[WM_EAST], &east_resize);
Packit b099d7
	}
Packit b099d7
Packit b099d7
Packit b099d7
       for (i=0; i < filledCount; i++)
Packit b099d7
	if (pcd->pTitleGadgets[i].id == FRAME_TITLE)
Packit b099d7
	   {
Packit b099d7
	      CopyMwmGadget (&(pcd->pTitleGadgets[i]), &title);
Packit b099d7
              titleFound = True;
Packit b099d7
	   }
Packit b099d7
Packit b099d7
	if (titleFound == False)
Packit b099d7
	   FillInvalidInfo (&title);
Packit b099d7
		
Packit b099d7
Packit b099d7
Packit b099d7
	    
Packit b099d7
Packit b099d7
        upperBorderWidth = pcd->frameInfo.upperBorderWidth;
Packit b099d7
        lowerBorderWidth = pcd->frameInfo.lowerBorderWidth;
Packit b099d7
	frameWin = pcd->clientFrameWin;
Packit b099d7
Packit b099d7
		
Packit b099d7
Packit b099d7
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)east_resize.id);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)east_resize.rect.width);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)west_resize.id);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)west_resize.rect.width);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)gravity_resize.id);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)gravity_resize.rect.x);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)gravity_resize.rect.y);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)gravity_resize.rect.width);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)gravity_resize.rect.height);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)title.id);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)title.rect.x);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)title.rect.y);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)title.rect.width);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)title.rect.height);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)upperBorderWidth);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)lowerBorderWidth);
Packit b099d7
	 reply = PackCARD32 (reply, (CARD32)frameWin);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             GetWindowMenuUnpostInfo
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetWindowMenuUnpostInfo(ClientData *pcd, XtPointer reply)
Packit b099d7
{
Packit b099d7
Packit b099d7
    MenuSpec *menuSpec;
Packit b099d7
Packit b099d7
    CARD32 clientState;
Packit b099d7
    CARD32 menuWin;
Packit b099d7
    CARD32 frameWin;
Packit b099d7
Packit b099d7
    menuSpec = pcd->systemMenuSpec;
Packit b099d7
    
Packit b099d7
Packit b099d7
    clientState = pcd->clientState;
Packit b099d7
    menuWin = XtWindow (menuSpec->menuWidget);
Packit b099d7
    frameWin = pcd->clientFrameWin;
Packit b099d7
Packit b099d7
    reply = PackCARD32 (reply,clientState);
Packit b099d7
    reply = PackCARD32 (reply,menuWin);
Packit b099d7
    reply = PackCARD32 (reply,frameWin);
Packit b099d7
    
Packit b099d7
}
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             GetFocusInfo
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetFocusInfo(ClientData *pcd, XtPointer reply)
Packit b099d7
{
Packit b099d7
Packit b099d7
Packit b099d7
  GadgetRectangle title;
Packit b099d7
  CARD32 filledCount;
Packit b099d7
  int i;
Packit b099d7
  Window frameWin;
Packit b099d7
  Boolean titleFound = False;
Packit b099d7
Packit b099d7
      
Packit b099d7
Packit b099d7
      filledCount = pcd->cTitleGadgets;
Packit b099d7
      frameWin = pcd->clientFrameWin;
Packit b099d7
Packit b099d7
      for (i=0; i < filledCount; i++)
Packit b099d7
        {
Packit b099d7
          if (pcd->pTitleGadgets[i].id == FRAME_TITLE)
Packit b099d7
            {
Packit b099d7
	      CopyMwmGadget (&(pcd->pTitleGadgets[i]), &title);
Packit b099d7
              titleFound = True;
Packit b099d7
Packit b099d7
            }
Packit b099d7
	}
Packit b099d7
Packit b099d7
Packit b099d7
   if (titleFound == False)
Packit b099d7
	FillInvalidInfo (&title);
Packit b099d7
	
Packit b099d7
		
Packit b099d7
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)filledCount);
Packit b099d7
      reply = PackCARD32(reply, (CARD32)title.id);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)title.rect.x);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)title.rect.y);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)title.rect.width);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)title.rect.height);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)frameWin);
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             GetWindowMenuPostInfo
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetWindowMenuPostInfo(ClientData *pcd, XtPointer reply)
Packit b099d7
{
Packit b099d7
      int i;
Packit b099d7
      GadgetRectangle title;
Packit b099d7
      GadgetRectangle menu;
Packit b099d7
      CARD32 filledCount;
Packit b099d7
      Window frameWin;
Packit b099d7
Packit b099d7
Packit b099d7
      Boolean titleFound = False;
Packit b099d7
      Boolean systemFound = False;
Packit b099d7
Packit b099d7
Packit b099d7
      filledCount = pcd->cTitleGadgets;
Packit b099d7
      frameWin = pcd->clientFrameWin;
Packit b099d7
Packit b099d7
      for (i=0; i < filledCount; i++)
Packit b099d7
        {
Packit b099d7
          if (pcd->pTitleGadgets[i].id == FRAME_TITLE)
Packit b099d7
            {
Packit b099d7
	      CopyMwmGadget (&(pcd->pTitleGadgets[i]), &title);
Packit b099d7
              titleFound = True;
Packit b099d7
Packit b099d7
            }
Packit b099d7
Packit b099d7
          if (pcd->pTitleGadgets[i].id == FRAME_SYSTEM)
Packit b099d7
            {
Packit b099d7
	      CopyMwmGadget (&(pcd->pTitleGadgets[i]), &menu);
Packit b099d7
              systemFound = True;
Packit b099d7
            }
Packit b099d7
Packit b099d7
        }
Packit b099d7
Packit b099d7
Packit b099d7
        if (titleFound == False)
Packit b099d7
		FillInvalidInfo (&title);
Packit b099d7
Packit b099d7
        if (systemFound == False)
Packit b099d7
          	FillInvalidInfo (&menu);
Packit b099d7
Packit b099d7
Packit b099d7
        reply = PackCARD32 (reply, (CARD32)filledCount);
Packit b099d7
	reply = PackCARD32 (reply, (CARD32)title.id);
Packit b099d7
        reply = PackCARD32 (reply, (CARD32)title.rect.x);
Packit b099d7
        reply = PackCARD32 (reply, (CARD32)title.rect.y);
Packit b099d7
        reply = PackCARD32 (reply, (CARD32)title.rect.width);
Packit b099d7
        reply = PackCARD32 (reply, (CARD32)title.rect.height);
Packit b099d7
	reply = PackCARD32 (reply, (CARD32)menu.id);
Packit b099d7
        reply = PackCARD32 (reply, (CARD32)menu.rect.x);
Packit b099d7
        reply = PackCARD32 (reply, (CARD32)menu.rect.y);
Packit b099d7
        reply = PackCARD32 (reply, (CARD32)menu.rect.width);
Packit b099d7
        reply = PackCARD32 (reply, (CARD32)menu.rect.height);
Packit b099d7
        reply = PackCARD32 (reply, (CARD32)frameWin);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             GetIconMenuItemSelectInfo
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetIconMenuItemSelectInfo(ClientData *pcd, XtPointer reply, Boolean use_icon_box)
Packit b099d7
{
Packit b099d7
  MenuSpec *menuSpec;
Packit b099d7
  int menuItemCount,sensitiveCount;
Packit b099d7
  Window menuWin, frameWin;
Packit b099d7
  int sensitive[MAX_MENU_ITEMS];
Packit b099d7
  int itemY[MAX_MENU_ITEMS];
Packit b099d7
  char itemName[MAX_MENU_ITEMS][25];
Packit b099d7
Packit b099d7
Packit b099d7
   IconBoxData *icon_box;
Packit b099d7
   XmScrollBarWidget  hScrollBar, vScrollBar;
Packit b099d7
   Widget frameWidget, scrollWidget, shellWidget;
Packit b099d7
  
Packit b099d7
  MenuButton              *NewMenuButton;
Packit b099d7
  MenuItem                *NewMenuItem;
Packit b099d7
  int n;
Packit b099d7
  CARD32 iconX, iconY, iconWidth, iconHeight;
Packit b099d7
  CARD32 hMin, hMax, hSliderAreaWidth, hSliderX, hSliderAreaX,
Packit b099d7
          vMin, vMax, vSliderAreaHeight, vSliderY, vSliderAreaY;
Packit b099d7
  CARD32 rightArrowX, rightArrowY, leftArrowX, leftArrowY, 
Packit b099d7
          topArrowX, topArrowY, bottomArrowX, bottomArrowY;
Packit b099d7
  CARD32 iconBoxX, iconBoxY, iconBoxWidth, iconBoxHeight;
Packit b099d7
  Window scrollWin, hScrollWin, vScrollWin, iconShellWin, iconFrameWin;
Packit b099d7
  CARD32 lastRow, lastCol;
Packit b099d7
  CARD32 iPlaceW, iPlaceH;
Packit b099d7
  CARD32 clientState;
Packit b099d7
  CARD32 useIconBox;
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
  useIconBox = pcd->pSD->useIconBox;
Packit b099d7
Packit b099d7
  icon_box = pcd->pIconBox;
Packit b099d7
Packit b099d7
  menuSpec = pcd->systemMenuSpec;
Packit b099d7
Packit b099d7
  if (menuSpec == NULL)
Packit b099d7
    return;
Packit b099d7
Packit b099d7
  menuItemCount = menuSpec->menuButtonCount;
Packit b099d7
Packit b099d7
  for (n = 0; n < menuItemCount && n < MAX_MENU_ITEMS; n++)
Packit b099d7
    {
Packit b099d7
      itemName[n][0] = '\0';
Packit b099d7
      sensitive[n] = FALSE;
Packit b099d7
    }
Packit b099d7
Packit b099d7
  menuWin = XtWindow (menuSpec->menuWidget);
Packit b099d7
  frameWin = pcd->clientFrameWin;
Packit b099d7
  clientState = pcd->clientState;
Packit b099d7
Packit b099d7
      sensitiveCount = 0;
Packit b099d7
Packit b099d7
      for (n = 0, NewMenuButton = menuSpec->menuButtons;
Packit b099d7
	   n < menuSpec->menuButtonCount;
Packit b099d7
	   n++, NewMenuButton++)
Packit b099d7
	{
Packit b099d7
	  if (NewMenuButton->managed == FALSE)
Packit b099d7
            continue;
Packit b099d7
Packit b099d7
	  NewMenuItem = NewMenuButton->menuItem;
Packit b099d7
	  sensitive[n] = NewMenuButton->buttonWidget->core.sensitive;
Packit b099d7
	  itemY[n] = NewMenuButton->buttonWidget->core.y +
Packit b099d7
                            (NewMenuButton->buttonWidget->core.height / 2);
Packit b099d7
	  strcpy(itemName[n], NewMenuItem->label);
Packit b099d7
Packit b099d7
	  if (sensitive[n] == TRUE)
Packit b099d7
            sensitiveCount++;
Packit b099d7
	}
Packit b099d7
Packit b099d7
Packit b099d7
  
Packit b099d7
Packit b099d7
Packit b099d7
       if (use_icon_box == True)
Packit b099d7
	 {
Packit b099d7
	   hScrollBar =  (XmScrollBarWidget)icon_box->hScrollBar;
Packit b099d7
	   hMin = hScrollBar->scrollBar.minimum;
Packit b099d7
	   hMax = hScrollBar->scrollBar.maximum;
Packit b099d7
	   hSliderAreaWidth = hScrollBar->scrollBar.slider_area_width;
Packit b099d7
	   hSliderX = hScrollBar->scrollBar.slider_x;
Packit b099d7
	   hSliderAreaX = hScrollBar->scrollBar.slider_area_x;
Packit b099d7
	   leftArrowX = hScrollBar->core.x + 
Packit b099d7
	                  hScrollBar->scrollBar.arrow1_x +
Packit b099d7
	                  (hScrollBar->scrollBar.arrow_width/2);
Packit b099d7
	   leftArrowY = hScrollBar->core.y + 
Packit b099d7
	                  hScrollBar->scrollBar.arrow1_y +
Packit b099d7
	                  (hScrollBar->scrollBar.arrow_height/2);
Packit b099d7
Packit b099d7
	   rightArrowX = hScrollBar->core.x + hScrollBar->scrollBar.arrow2_x
Packit b099d7
	                  + (hScrollBar->scrollBar.arrow_width/2);
Packit b099d7
	   rightArrowY = hScrollBar->core.y + hScrollBar->scrollBar.arrow2_y
Packit b099d7
	                  + (hScrollBar->scrollBar.arrow_height/2);
Packit b099d7
Packit b099d7
	   vScrollBar =  (XmScrollBarWidget)icon_box->vScrollBar;
Packit b099d7
Packit b099d7
	   vMin = vScrollBar->scrollBar.minimum;
Packit b099d7
	   vMax = vScrollBar->scrollBar.maximum;
Packit b099d7
	   vSliderAreaHeight = vScrollBar->scrollBar.slider_area_height;
Packit b099d7
	   vSliderY = vScrollBar->scrollBar.slider_y;
Packit b099d7
	   vSliderAreaY = vScrollBar->scrollBar.slider_area_y;
Packit b099d7
Packit b099d7
	   topArrowX = vScrollBar->core.x + vScrollBar->scrollBar.arrow1_x
Packit b099d7
	                  + (vScrollBar->scrollBar.arrow_width/2);
Packit b099d7
	   topArrowY = vScrollBar->core.y + vScrollBar->scrollBar.arrow1_y
Packit b099d7
	                  + (vScrollBar->scrollBar.arrow_height/2);
Packit b099d7
Packit b099d7
	   bottomArrowX = vScrollBar->core.x + vScrollBar->scrollBar.arrow2_x
Packit b099d7
	                  + (vScrollBar->scrollBar.arrow_width/2);
Packit b099d7
	   bottomArrowY = hScrollBar->core.y + hScrollBar->scrollBar.arrow2_y
Packit b099d7
	                  + (hScrollBar->scrollBar.arrow_height/2);
Packit b099d7
Packit b099d7
Packit b099d7
	   
Packit b099d7
Packit b099d7
	   shellWidget = icon_box->shellWidget;
Packit b099d7
Packit b099d7
Packit b099d7
	   iconBoxX = shellWidget->core.x;
Packit b099d7
	   iconBoxY = shellWidget->core.y;
Packit b099d7
	   iconBoxWidth = shellWidget->core.width;
Packit b099d7
	   iconBoxHeight = shellWidget->core.height;
Packit b099d7
	   iconShellWin = XtWindow (shellWidget);
Packit b099d7
Packit b099d7
Packit b099d7
	   frameWidget = icon_box->frameWidget;
Packit b099d7
	   frameWin = XtWindow (frameWidget);
Packit b099d7
Packit b099d7
	   scrollWidget = icon_box->scrolledWidget;
Packit b099d7
	   scrollWin = XtWindow (scrollWidget);
Packit b099d7
	   
Packit b099d7
	   hScrollWin = XtWindow (hScrollBar);
Packit b099d7
	   vScrollWin = XtWindow (vScrollBar);
Packit b099d7
	   
Packit b099d7
	   lastCol = icon_box->lastCol;
Packit b099d7
	   lastRow = icon_box->lastRow;
Packit b099d7
	   iPlaceW = icon_box->IPD.iPlaceW;
Packit b099d7
	   iPlaceH = icon_box->IPD.iPlaceH;
Packit b099d7
	}
Packit b099d7
Packit b099d7
Packit b099d7
       /*
Packit b099d7
	* icon info
Packit b099d7
	*/
Packit b099d7
Packit b099d7
       iconX = pcd->iconX;
Packit b099d7
       iconY = pcd->iconY;
Packit b099d7
       iconWidth = pcd->pSD->iconWidth;
Packit b099d7
       iconHeight = pcd->pSD->iconHeight;
Packit b099d7
       iconFrameWin = pcd->iconFrameWin;
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)clientState);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)menuItemCount);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)sensitiveCount);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)menuWin);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)frameWin);
Packit b099d7
      for (n=0; n < menuItemCount && n < MAX_MENU_ITEMS; n++)
Packit b099d7
	{
Packit b099d7
	  reply = PackCARD32 (reply, (CARD32)sensitive[n]);
Packit b099d7
	  reply = PackCARD32 (reply, (CARD32)itemY[n]);	
Packit b099d7
	  reply = PackString (reply, (String)itemName[n]);		
Packit b099d7
	}
Packit b099d7
Packit b099d7
       reply = PackCARD32 (reply,(CARD32)use_icon_box);
Packit b099d7
       reply = PackCARD32 (reply,(CARD32)iconX);
Packit b099d7
       reply = PackCARD32 (reply,(CARD32)iconY);
Packit b099d7
       reply = PackCARD32 (reply,(CARD32)iconWidth);
Packit b099d7
       reply = PackCARD32 (reply,(CARD32)iconHeight);
Packit b099d7
       reply = PackCARD32 (reply,(CARD32)iconFrameWin);
Packit b099d7
Packit b099d7
       if (use_icon_box == True)
Packit b099d7
	 {
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)hMin);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)hMax);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)hSliderAreaWidth);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)hSliderX);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)hSliderAreaX);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)vMin);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)vMax);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)vSliderAreaHeight);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)vSliderY);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)vSliderAreaY);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)rightArrowX);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)rightArrowY);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)leftArrowX);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)leftArrowY);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)topArrowX);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)topArrowY);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)bottomArrowX);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)bottomArrowY);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)iconBoxX);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)iconBoxY);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)iconBoxWidth);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)iconBoxHeight);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)iconShellWin);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)frameWin);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)scrollWin);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)hScrollWin);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)vScrollWin);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)lastCol);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)lastRow);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)iPlaceH);
Packit b099d7
	   reply = PackCARD32 (reply,(CARD32)iPlaceW);
Packit b099d7
	   
Packit b099d7
	}
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             GetItemSelectInfo
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetWindowItemSelectInfo(ClientData *pcd, XtPointer reply)
Packit b099d7
{
Packit b099d7
  MenuSpec *menuSpec;
Packit b099d7
  CARD32 menuItemCount,sensitiveCount;
Packit b099d7
  Window menuWin, frameWin;
Packit b099d7
  CARD32 sensitive[MAX_MENU_ITEMS];
Packit b099d7
  CARD32 itemY[MAX_MENU_ITEMS];
Packit b099d7
  char itemName[MAX_MENU_ITEMS][MAX_NAME_LEN + 1];
Packit b099d7
  
Packit b099d7
  MenuButton              *NewMenuButton;
Packit b099d7
  MenuItem                *NewMenuItem;
Packit b099d7
  int n;
Packit b099d7
Packit b099d7
Packit b099d7
  menuSpec = pcd->systemMenuSpec;
Packit b099d7
Packit b099d7
  if (menuSpec == NULL)
Packit b099d7
    return;
Packit b099d7
Packit b099d7
  menuItemCount = menuSpec->menuButtonCount;
Packit b099d7
Packit b099d7
  for (n = 0; n < menuItemCount && n < MAX_MENU_ITEMS; n++)
Packit b099d7
    {
Packit b099d7
      itemName[n][0] = '\0';
Packit b099d7
      sensitive[n] = FALSE;
Packit b099d7
    }
Packit b099d7
Packit b099d7
  menuWin = XtWindow (menuSpec->menuWidget);
Packit b099d7
  frameWin = pcd->clientFrameWin;
Packit b099d7
Packit b099d7
   sensitiveCount = 0;
Packit b099d7
Packit b099d7
      for (n = 0, NewMenuButton = menuSpec->menuButtons;
Packit b099d7
	   n < menuSpec->menuButtonCount;
Packit b099d7
	   n++, NewMenuButton++)
Packit b099d7
	{
Packit b099d7
	  if (NewMenuButton->managed == FALSE)
Packit b099d7
            continue;
Packit b099d7
Packit b099d7
	  NewMenuItem = NewMenuButton->menuItem;
Packit b099d7
	  sensitive[n] = NewMenuButton->buttonWidget->core.sensitive;
Packit b099d7
	  itemY[n] = NewMenuButton->buttonWidget->core.y +
Packit b099d7
                            (NewMenuButton->buttonWidget->core.height / 2);
Packit b099d7
	  strcpy(itemName[n], NewMenuItem->label);
Packit b099d7
Packit b099d7
	  if (sensitive[n] == TRUE)
Packit b099d7
            sensitiveCount++;
Packit b099d7
	}
Packit b099d7
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)menuItemCount);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)sensitiveCount);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)menuWin);
Packit b099d7
      reply = PackCARD32 (reply, (CARD32)frameWin);
Packit b099d7
      for (n=0; n < menuItemCount && n < MAX_MENU_ITEMS; n++)
Packit b099d7
	{
Packit b099d7
	  reply = PackCARD32 (reply, (CARD32)sensitive[n]);
Packit b099d7
	  reply = PackCARD32 (reply, (CARD32)itemY[n]);	
Packit b099d7
	  reply = PackString (reply, (String)itemName[n]);		
Packit b099d7
	}
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             GetItemCheckInfo
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetItemCheckInfo(ClientData *pcd, XtPointer reply)
Packit b099d7
{
Packit b099d7
  MenuSpec *menuSpec;
Packit b099d7
  int menuItemCount;
Packit b099d7
  int clientState;
Packit b099d7
  int titleGadgetCount;
Packit b099d7
  int titleId, systemId, minimizeId, maximizeId, northwestId;
Packit b099d7
  int upperBorderWidth, lowerBorderWidth;
Packit b099d7
  Window menuWin;
Packit b099d7
  char itemName[MAX_MENU_ITEMS][MAX_NAME_LEN + 1];
Packit b099d7
  
Packit b099d7
  MenuButton              *NewMenuButton;
Packit b099d7
  MenuItem                *NewMenuItem;
Packit b099d7
  int i,filledCount;
Packit b099d7
  Boolean titleFound, systemFound, minimizeFound, maximizeFound = False;
Packit b099d7
Packit b099d7
  menuSpec = pcd->systemMenuSpec;
Packit b099d7
Packit b099d7
  if (menuSpec == NULL)
Packit b099d7
    return;
Packit b099d7
Packit b099d7
  menuItemCount = menuSpec->menuButtonCount;
Packit b099d7
Packit b099d7
  for (i = 0; i < menuItemCount && i < MAX_MENU_ITEMS; i++)
Packit b099d7
      itemName[i][0] = '\0'; 
Packit b099d7
Packit b099d7
  menuWin = XtWindow (menuSpec->menuWidget);
Packit b099d7
Packit b099d7
      for (i = 0, NewMenuButton = menuSpec->menuButtons;
Packit b099d7
	   i < menuSpec->menuButtonCount;
Packit b099d7
	   i++, NewMenuButton++)
Packit b099d7
	{
Packit b099d7
	  if (NewMenuButton->managed == FALSE)
Packit b099d7
            continue;
Packit b099d7
Packit b099d7
	  NewMenuItem = NewMenuButton->menuItem;
Packit b099d7
	  strcpy (itemName[i],NewMenuItem->label);
Packit b099d7
Packit b099d7
	}
Packit b099d7
Packit b099d7
      filledCount = pcd->cTitleGadgets;
Packit b099d7
Packit b099d7
      for (i=0; i < filledCount; i++)
Packit b099d7
        {
Packit b099d7
          if (pcd->pTitleGadgets[i].id == FRAME_TITLE)
Packit b099d7
	      { 
Packit b099d7
		  titleId = FRAME_TITLE;
Packit b099d7
		  titleFound = True;
Packit b099d7
	      }
Packit b099d7
	  else
Packit b099d7
          if (pcd->pTitleGadgets[i].id == FRAME_SYSTEM)
Packit b099d7
	      {
Packit b099d7
		  systemId = FRAME_SYSTEM;
Packit b099d7
		  systemFound = True;
Packit b099d7
	      }
Packit b099d7
Packit b099d7
	  else
Packit b099d7
          if (pcd->pTitleGadgets[i].id == FRAME_MINIMIZE)
Packit b099d7
	      {
Packit b099d7
		  minimizeId = FRAME_MINIMIZE;
Packit b099d7
		  minimizeFound = True;
Packit b099d7
	      }
Packit b099d7
	  else
Packit b099d7
          if (pcd->pTitleGadgets[i].id == FRAME_MAXIMIZE)
Packit b099d7
	      {
Packit b099d7
		  maximizeId = FRAME_MAXIMIZE;
Packit b099d7
		  maximizeFound = True;
Packit b099d7
	      }
Packit b099d7
Packit b099d7
Packit b099d7
        }
Packit b099d7
Packit b099d7
   if (titleFound == False)
Packit b099d7
       titleId = INVALID;
Packit b099d7
   if (systemFound == False)
Packit b099d7
       systemId = INVALID;
Packit b099d7
   if (minimizeFound == False)
Packit b099d7
       minimizeId = INVALID;
Packit b099d7
   if (maximizeFound == False)
Packit b099d7
       maximizeId = INVALID;
Packit b099d7
Packit b099d7
   if (!(pcd->decor & MWM_DECOR_RESIZEH))
Packit b099d7
       northwestId = INVALID;
Packit b099d7
   else
Packit b099d7
       northwestId = pcd->pResizeGadgets[WM_NORTHWEST].id;
Packit b099d7
Packit b099d7
  upperBorderWidth = pcd->frameInfo.upperBorderWidth;
Packit b099d7
  lowerBorderWidth = pcd->frameInfo.lowerBorderWidth;
Packit b099d7
      	
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
  clientState = pcd->clientState;
Packit b099d7
Packit b099d7
  reply = PackCARD32 (reply, (CARD32)clientState);
Packit b099d7
  reply = PackCARD32 (reply, (CARD32)menuWin);
Packit b099d7
  reply = PackCARD32 (reply, (CARD32)menuItemCount);
Packit b099d7
  for (i=0; i < menuItemCount && i < MAX_MENU_ITEMS; i++)
Packit b099d7
      reply = PackString (reply, (String)itemName[i]);		
Packit b099d7
  reply = PackCARD32 (reply, (CARD32)filledCount);
Packit b099d7
  reply = PackCARD32 (reply, (CARD32)titleId);
Packit b099d7
  reply = PackCARD32 (reply, (CARD32)systemId);	
Packit b099d7
  reply = PackCARD32 (reply, (CARD32)minimizeId);	  
Packit b099d7
  reply = PackCARD32 (reply, (CARD32)maximizeId);	
Packit b099d7
  reply = PackCARD32 (reply, (CARD32)northwestId);	
Packit b099d7
  reply = PackCARD32 (reply, (CARD32)upperBorderWidth);	
Packit b099d7
  reply = PackCARD32 (reply, (CARD32)lowerBorderWidth);	
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             GetRaiseInfo
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetRaiseInfo(ClientData *pcd, XtPointer reply)
Packit b099d7
{
Packit b099d7
Packit b099d7
  CARD32 state = pcd->clientState;
Packit b099d7
  reply = PackCARD32 (reply, (CARD32)state);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/*----------------------------------------------------------------------*
Packit b099d7
 |                             GetAutomationData
Packit b099d7
 *----------------------------------------------------------------------*/
Packit b099d7
void
Packit b099d7
GetAutomationData (XtPointer input, Atom *outputType, XtPointer *output, unsigned long *outputLen, int *outputFmt)
Packit b099d7
{
Packit b099d7
  ClientData *pcd;
Packit b099d7
  CARD32 infoWanted;
Packit b099d7
  
Packit b099d7
  Window winId;  
Packit b099d7
  XtPointer reply;
Packit b099d7
  int size;
Packit b099d7
Packit b099d7
  int i, n, menuItemCount;
Packit b099d7
  MenuItem *menu_item;
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
  winId        = UnpackCARD32(&input);
Packit b099d7
  infoWanted    = UnpackCARD32(&input);
Packit b099d7
Packit b099d7
Packit b099d7
  
Packit b099d7
  /*
Packit b099d7
   * Get client data associated with window if the widget making the request.
Packit b099d7
   */
Packit b099d7
Packit b099d7
  if ((pcd = GetPCD (0,winId)) == NULL)
Packit b099d7
    {
Packit b099d7
Packit b099d7
      PRINT ("Can't get client data\n");
Packit b099d7
      return;
Packit b099d7
    }
Packit b099d7
Packit b099d7
Packit b099d7
  size = 0;
Packit b099d7
Packit b099d7
  switch (infoWanted)
Packit b099d7
      {
Packit b099d7
	case WINDOW_MINIMIZE_INFO:
Packit b099d7
	  size += sizeof(CARD32) * 7;
Packit b099d7
	  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	  GetMinimizeInfo (pcd,*output);
Packit b099d7
          break;
Packit b099d7
Packit b099d7
	case WINDOW_MAXIMIZE_INFO:
Packit b099d7
	  size += sizeof (CARD32) * 7;
Packit b099d7
	  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	  GetMaximizeInfo(pcd,*output);
Packit b099d7
          break;
Packit b099d7
Packit b099d7
        case WINDOW_RAISE_INFO:
Packit b099d7
	  size += sizeof (CARD32);
Packit b099d7
	  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	  GetRaiseInfo(pcd, *output);
Packit b099d7
	  break;
Packit b099d7
Packit b099d7
        case WINDOW_MOVE_INFO:
Packit b099d7
	   SetGrabServer();    /* tell mwm not to grab server */
Packit b099d7
	   size += sizeof (CARD32) * 16;
Packit b099d7
	    *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	   GetMoveInfo(pcd,*output);
Packit b099d7
	   break;
Packit b099d7
Packit b099d7
	case WINDOW_RESIZE_NORTH_INFO:
Packit b099d7
	  SetGrabServer();    /* tell mwm not to grab server */
Packit b099d7
	  size += sizeof (CARD32) * 17;
Packit b099d7
	  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	  GetResizeInfo(pcd,*output,WM_NORTH);
Packit b099d7
	  break;
Packit b099d7
Packit b099d7
	case WINDOW_RESIZE_SOUTH_INFO:
Packit b099d7
	  SetGrabServer();    /* tell mwm not to grab server */
Packit b099d7
	  size += sizeof (CARD32) * 17;
Packit b099d7
	  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	  GetResizeInfo(pcd,*output,WM_SOUTH);
Packit b099d7
	  break;
Packit b099d7
Packit b099d7
	case WINDOW_RESIZE_EAST_INFO:
Packit b099d7
	  SetGrabServer();    /* tell mwm not to grab server */
Packit b099d7
	  size += sizeof (CARD32) * 17;
Packit b099d7
	  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	  GetResizeInfo(pcd,*output,WM_EAST);
Packit b099d7
	  break;
Packit b099d7
Packit b099d7
	case WINDOW_RESIZE_WEST_INFO:
Packit b099d7
	  SetGrabServer();    /* tell mwm not to grab server */
Packit b099d7
	  size += sizeof (CARD32) * 17;
Packit b099d7
	  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	  GetResizeInfo(pcd,*output,WM_WEST);
Packit b099d7
	  break;
Packit b099d7
Packit b099d7
	case WINDOW_RESIZE_NORTHEAST_INFO:
Packit b099d7
	  SetGrabServer();    /* tell mwm not to grab server */
Packit b099d7
	  size += sizeof (CARD32) * 17;
Packit b099d7
	  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	  GetResizeInfo(pcd,*output,WM_NORTHEAST);
Packit b099d7
	  break;
Packit b099d7
Packit b099d7
Packit b099d7
	case WINDOW_RESIZE_NORTHWEST_INFO:
Packit b099d7
	  SetGrabServer();    /* tell mwm not to grab server */
Packit b099d7
	  size += sizeof (CARD32) * 17;
Packit b099d7
	  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	  GetResizeInfo(pcd,*output,WM_NORTHWEST);
Packit b099d7
	  break;
Packit b099d7
Packit b099d7
Packit b099d7
	case WINDOW_RESIZE_SOUTHEAST_INFO:
Packit b099d7
	  SetGrabServer();    /* tell mwm not to grab server */
Packit b099d7
	  size += sizeof (CARD32) * 17;
Packit b099d7
	  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	  GetResizeInfo(pcd,*output,WM_SOUTHEAST);
Packit b099d7
	  break;
Packit b099d7
Packit b099d7
Packit b099d7
	case WINDOW_RESIZE_SOUTHWEST_INFO:
Packit b099d7
	  SetGrabServer();    /* tell mwm not to grab server */
Packit b099d7
	  size += sizeof (CARD32) * 17;
Packit b099d7
	  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	  GetResizeInfo(pcd,*output,WM_SOUTHWEST);
Packit b099d7
	  break;
Packit b099d7
Packit b099d7
Packit b099d7
	case WINDOW_MENU_ITEM_SELECT_INFO:
Packit b099d7
	  if (pcd->systemMenuSpec)
Packit b099d7
	      menuItemCount = pcd->systemMenuSpec->menuButtonCount;
Packit b099d7
	  size += sizeof(CARD32) * 4;
Packit b099d7
	  for (n=0; n < menuItemCount && n < MAX_MENU_ITEMS; n++)
Packit b099d7
	      {
Packit b099d7
		  menu_item = pcd->systemMenuSpec->menuButtons->menuItem;
Packit b099d7
		  size += sizeof (CARD32);    /* sensitive */
Packit b099d7
		  size += sizeof (CARD32);    /* itemY */
Packit b099d7
		  size += sizeof (CARD16) + ((strlen(menu_item->label) + 1) * sizeof(CARD8)); /*itemName */
Packit b099d7
	      }
Packit b099d7
	 *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	  GetWindowItemSelectInfo(pcd,*output);
Packit b099d7
	  break;
Packit b099d7
      
Packit b099d7
	case WINDOW_DEICONIFY_INFO:
Packit b099d7
	  if (pcd->pSD->useIconBox == True)
Packit b099d7
	      {
Packit b099d7
		  size += sizeof (CARD32) * 37;
Packit b099d7
		  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
		  GetIconInfo(pcd,*output,True);
Packit b099d7
	      }
Packit b099d7
	  else
Packit b099d7
	      {
Packit b099d7
		  size += sizeof (CARD32) * 6;
Packit b099d7
		  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
		  GetIconInfo(pcd,*output,False);
Packit b099d7
	      }
Packit b099d7
	  break;
Packit b099d7
Packit b099d7
Packit b099d7
	case WINDOW_MENU_POST_INFO:
Packit b099d7
	   size += sizeof (CARD32) * 12;
Packit b099d7
	   *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	   GetWindowMenuPostInfo(pcd,*output);
Packit b099d7
	   break;
Packit b099d7
Packit b099d7
	case WINDOW_FOCUS_INFO:
Packit b099d7
	   size += sizeof (CARD32) * 7;
Packit b099d7
	   *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	   GetFocusInfo(pcd,*output);
Packit b099d7
	   break;
Packit b099d7
Packit b099d7
Packit b099d7
	case WINDOW_MENU_UNPOST_INFO:
Packit b099d7
	   size += sizeof (CARD32) * 3;
Packit b099d7
	   *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	   GetWindowMenuUnpostInfo(pcd,*output);
Packit b099d7
	   break;
Packit b099d7
Packit b099d7
	case WINDOW_MENU_ITEM_CHECK_INFO:
Packit b099d7
	  if (pcd->systemMenuSpec)
Packit b099d7
	      menuItemCount = pcd->systemMenuSpec->menuButtonCount;
Packit b099d7
	  size += sizeof(CARD32) * 11;
Packit b099d7
	  for (n=0; n < menuItemCount && n < MAX_MENU_ITEMS; n++)
Packit b099d7
	      {
Packit b099d7
		  menu_item = pcd->systemMenuSpec->menuButtons->menuItem;
Packit b099d7
		  size += sizeof (CARD16) + (strlen(menu_item->label + 1) * sizeof(CARD8)); /*itemName */
Packit b099d7
	      }
Packit b099d7
	 *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	  GetItemCheckInfo(pcd, *output);
Packit b099d7
	  break;
Packit b099d7
Packit b099d7
	case ICON_MOVE_INFO:
Packit b099d7
	  {
Packit b099d7
	      SetGrabServer();    /* tell mwm not to grab server */
Packit b099d7
	      size += sizeof (CARD32) * 6;
Packit b099d7
	      *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	      GetIconInfo(pcd,*output,False);
Packit b099d7
	      break;
Packit b099d7
	  }
Packit b099d7
Packit b099d7
	case ICON_MENU_POST_INFO:
Packit b099d7
	  if (pcd->pSD->useIconBox == True)
Packit b099d7
	      {
Packit b099d7
		  size += sizeof (CARD32) * 37;
Packit b099d7
		  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
		  GetIconInfo(pcd,*output,True);
Packit b099d7
	      }
Packit b099d7
	  else
Packit b099d7
	      {
Packit b099d7
		  size += sizeof (CARD32) * 6;
Packit b099d7
		  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
		  GetIconInfo(pcd,*output,False);
Packit b099d7
	      }
Packit b099d7
	  break;
Packit b099d7
Packit b099d7
	case ICON_MENU_UNPOST_INFO:
Packit b099d7
	  if (pcd->pSD->useIconBox == True)
Packit b099d7
	      {
Packit b099d7
		  size += sizeof (CARD32) * 37;
Packit b099d7
		  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
		  GetIconInfo(pcd,*output,True);
Packit b099d7
Packit b099d7
	      }
Packit b099d7
	  else
Packit b099d7
	      {
Packit b099d7
		  size += sizeof (CARD32) * 6;
Packit b099d7
		  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
		  GetIconInfo(pcd,*output,False);
Packit b099d7
	      }
Packit b099d7
	  break;
Packit b099d7
Packit b099d7
	case ICON_MENU_ITEM_SELECT_INFO:
Packit b099d7
	  if (pcd->systemMenuSpec)
Packit b099d7
	      menuItemCount = pcd->systemMenuSpec->menuButtonCount;
Packit b099d7
	  size += sizeof(CARD32) * 11;
Packit b099d7
	  for (n=0; n < menuItemCount && n < MAX_MENU_ITEMS; n++)
Packit b099d7
	      {
Packit b099d7
		  size += sizeof (CARD32);    /* sensitive */
Packit b099d7
		  size += sizeof (CARD32);    /* itemY */
Packit b099d7
		  menu_item = pcd->systemMenuSpec->menuButtons->menuItem;
Packit b099d7
		  size += sizeof (CARD16) + ((strlen(menu_item->label) + 1) * sizeof(CARD8)); /*itemName */
Packit b099d7
	      }
Packit b099d7
	  if (pcd->pSD->useIconBox == True)
Packit b099d7
		  size += sizeof (CARD32) * 37;
Packit b099d7
	  else
Packit b099d7
	  	  size += sizeof (CARD32) * 6;
Packit b099d7
	  *output = (XtPointer)XtMalloc(sizeof(CARD8) * size);
Packit b099d7
	  GetIconMenuItemSelectInfo (pcd,*output,pcd->pSD->useIconBox);
Packit b099d7
	  break;
Packit b099d7
Packit b099d7
Packit b099d7
	default:
Packit b099d7
	  PRINT ("Illegal operation from Automation");
Packit b099d7
	  break;
Packit b099d7
      }
Packit b099d7
Packit b099d7
	*outputLen = (unsigned long)size;
Packit b099d7
	*outputFmt = WSM_PROTO_FMT;
Packit b099d7
	
Packit b099d7
}
Packit b099d7