Blame lib/Xm/MenuState.c

Packit b099d7
/* $XConsortium: MenuState.c /main/5 1995/07/15 20:52:55 drk $ */
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
 */
Packit b099d7
/*
Packit b099d7
 * HISTORY
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/XmP.h>
Packit b099d7
#include <Xm/RowColumnP.h>
Packit b099d7
#include <Xm/ScreenP.h>
Packit b099d7
#include "MenuStateI.h"
Packit b099d7
Packit b099d7
/********    Static Function Declarations    ********/
Packit b099d7
Packit b099d7
static void ScreenDestroyCallback ( 
Packit b099d7
			Widget w, 
Packit b099d7
			XtPointer client_data, 
Packit b099d7
			XtPointer call_data );
Packit b099d7
Packit b099d7
/********    End Static Function Declarations    ********/
Packit b099d7
Packit b099d7
Packit b099d7
Widget
Packit b099d7
_XmGetRC_PopupPosted (
Packit b099d7
       Widget wid)
Packit b099d7
{
Packit b099d7
   if (XmIsRowColumn(wid))
Packit b099d7
      return (RC_PopupPosted(wid));
Packit b099d7
   else
Packit b099d7
      return NULL;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * The following two functions are used by menu and menu-item widgets to keep
Packit b099d7
 * track of whether we're in drag (button down) or traversal mode.
Packit b099d7
 */
Packit b099d7
Boolean
Packit b099d7
_XmGetInDragMode (
Packit b099d7
        Widget widget)
Packit b099d7
{
Packit b099d7
  return((_XmGetMenuState(widget))->MU_InDragMode);
Packit b099d7
}
Packit b099d7
Packit b099d7
void
Packit b099d7
_XmSetInDragMode(
Packit b099d7
        Widget widget,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
        int mode )
Packit b099d7
#else
Packit b099d7
        Boolean mode )
Packit b099d7
#endif
Packit b099d7
{
Packit b099d7
  (_XmGetMenuState(widget))->MU_InDragMode = mode;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 * _XmGetMenuState(wid)
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
XmMenuState
Packit b099d7
_XmGetMenuState(
Packit b099d7
        Widget wid)
Packit b099d7
{
Packit b099d7
   XmScreen scrn = (XmScreen) XmGetXmScreen(XtScreen(wid));
Packit b099d7
   XmMenuState menu_state = (XmMenuState)NULL;
Packit b099d7
Packit b099d7
   if ((XmScreen)NULL != scrn)
Packit b099d7
   {
Packit b099d7
     menu_state  = 
Packit b099d7
	(XmMenuState)((XmScreenInfo *)(scrn->screen.screenInfo))->menu_state;
Packit b099d7
Packit b099d7
     if ((XmMenuState)NULL == menu_state)
Packit b099d7
     {
Packit b099d7
      menu_state = (XmMenuState)XtMalloc(sizeof(XmMenuStateRec));
Packit b099d7
      ((XmScreenInfo *)(scrn->screen.screenInfo))->menu_state = 
Packit b099d7
		(XtPointer)menu_state;
Packit b099d7
      XtAddCallback((Widget)scrn, XtNdestroyCallback, 
Packit b099d7
		    ScreenDestroyCallback, (XtPointer) NULL);
Packit b099d7
Packit b099d7
      menu_state->RC_LastSelectToplevel = NULL;
Packit b099d7
      menu_state->RC_ButtonEventStatus.time = (unsigned) -1;
Packit b099d7
      menu_state->RC_ButtonEventStatus.verified = FALSE;
Packit b099d7
      menu_state->RC_ButtonEventStatus.waiting_to_be_managed = TRUE;
Packit b099d7
      /*menu_state->RC_ButtonEventStatus.event = (XButtonEvent)NULL;*/
Packit b099d7
      menu_state->RC_ReplayInfo.time = 0;
Packit b099d7
      menu_state->RC_ReplayInfo.toplevel_menu = NULL;
Packit b099d7
      menu_state->RC_activeItem = NULL;
Packit b099d7
      menu_state->RC_allowAcceleratedInsensitiveUnmanagedMenuItems = False;
Packit b099d7
      menu_state->RC_menuFocus.oldFocus = (Window)NULL;
Packit b099d7
      menu_state->RC_menuFocus.oldRevert = 0;
Packit b099d7
      menu_state->RC_menuFocus.oldWidget = NULL;
Packit b099d7
Packit b099d7
      menu_state->MS_LastManagedMenuTime = (Time)0L;
Packit b099d7
Packit b099d7
      menu_state->MU_InDragMode = False;
Packit b099d7
      menu_state->MU_CurrentMenuChild = NULL;
Packit b099d7
      menu_state->MU_InPMMode = False;
Packit b099d7
     }
Packit b099d7
   }
Packit b099d7
Packit b099d7
   return menu_state;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
ScreenDestroyCallback
Packit b099d7
	( Widget w,
Packit b099d7
        XtPointer client_data,
Packit b099d7
        XtPointer call_data )	/* unused */
Packit b099d7
{
Packit b099d7
   XmScreen scrn = (XmScreen) XmGetXmScreen(XtScreen(w));
Packit b099d7
   if ((XmScreen)NULL != scrn) {
Packit b099d7
       XmMenuState menu_state = 
Packit b099d7
	   (XmMenuState)((XmScreenInfo *)
Packit b099d7
			 (scrn->screen.screenInfo))->menu_state;
Packit b099d7
	if ((XmMenuState)NULL != menu_state) {
Packit b099d7
	    XtFree((char*)menu_state);
Packit b099d7
   	}
Packit b099d7
   }
Packit b099d7
}