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