/****************************************************************************
- * Copyright (c) 1998-2004,2005 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2012,2016 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
#include "menu.priv.h"
-MODULE_ID("$Id: m_driver.c,v 1.24 2005/04/09 20:40:25 tom Exp $")
+MODULE_ID("$Id: m_driver.c,v 1.32 2016/03/26 21:51:52 tom Exp $")
/* Macros */
/* Add a new character to the match pattern buffer */
#define Add_Character_To_Pattern(menu,ch) \
- { (menu)->pattern[((menu)->pindex)++] = (ch);\
+ { (menu)->pattern[((menu)->pindex)++] = (char) (ch);\
(menu)->pattern[(menu)->pindex] = '\0'; }
/*---------------------------------------------------------------------------
{
while (*string && *part)
{
- if (toupper(*string++) != toupper(*part))
+ if (toupper(UChar(*string++)) != toupper(UChar(*part)))
break;
part++;
}
bool found = FALSE, passed = FALSE;
int idx, last;
- T((T_CALLED("_nc_Match_Next_Character(%p,%d,%p)"), menu, ch, item));
+ T((T_CALLED("_nc_Match_Next_Character(%p,%d,%p)"),
+ (void *)menu, ch, (void *)item));
assert(menu && item && *item);
idx = (*item)->index;
if (++idx >= menu->nitems)
idx = 0;
}
- if (Is_Sub_String((menu->opt & O_IGNORECASE) != 0,
+ if (Is_Sub_String((bool)((menu->opt & O_IGNORECASE) != 0),
menu->pattern,
menu->items[idx]->name.str)
)
/*---------------------------------------------------------------------------
| Facility : libnmenu
-| Function : int menu_driver(MENU *menu, int c)
+| Function : int menu_driver(MENU* menu, int c)
|
| Description : Central dispatcher for the menu. Translates the logical
| request 'c' into a menu action.
ITEM *item;
int my_top_row, rdiff;
- T((T_CALLED("menu_driver(%p,%d)"), menu, c));
+ T((T_CALLED("menu_driver(%p,%d)"), (void *)menu, c));
if (!menu)
RETURN(E_BAD_ARGUMENT);
else
{
my_top_row += rdiff;
- while (rdiff-- > 0 && item != (ITEM *) 0)
+ while (rdiff-- > 0 && item != 0 && item->down != 0)
item = item->down;
}
break;
else
{
my_top_row -= rdiff;
- while (rdiff-- && item != (ITEM *) 0)
+ while (rdiff-- > 0 && item != 0 && item->up != 0)
item = item->up;
}
break;
}
}
else
- result = E_REQUEST_DENIED;
+ {
+ if (menu->opt & O_MOUSE_MENU)
+ ungetmouse(&event); /* let someone else handle this */
+ result = E_REQUEST_DENIED;
+ }
}
#endif /* NCURSES_MOUSE_VERSION */
else
result = E_UNKNOWN_COMMAND;
}
- if (E_OK == result)
+ if (item == 0)
+ {
+ result = E_BAD_STATE;
+ }
+ else if (E_OK == result)
{
/* Adjust the top row if it turns out that the current item unfortunately
doesn't appear in the menu window */