projects
/
ncurses.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ncurses 6.1 - patch 20180623
[ncurses.git]
/
menu
/
m_driver.c
diff --git
a/menu/m_driver.c
b/menu/m_driver.c
index d29c6024a7e3a0c235a2ed0973b4b5a15ab6762f..8e72999b64c1d3a549cbd8cc1759ffeb26240f97 100644
(file)
--- a/
menu/m_driver.c
+++ b/
menu/m_driver.c
@@
-1,5
+1,5
@@
/****************************************************************************
/****************************************************************************
- * Copyright (c) 1998-20
04,2005
Free Software Foundation, Inc. *
+ * Copyright (c) 1998-20
12,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 *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
@@
-37,7
+37,7
@@
#include "menu.priv.h"
#include "menu.priv.h"
-MODULE_ID("$Id: m_driver.c,v 1.
25 2005/11/26 20:46:59
tom Exp $")
+MODULE_ID("$Id: m_driver.c,v 1.
32 2016/03/26 21:51:52
tom Exp $")
/* Macros */
/* Macros */
@@
-47,7
+47,7
@@
MODULE_ID("$Id: m_driver.c,v 1.25 2005/11/26 20:46:59 tom Exp $")
/* Add a new character to the match pattern buffer */
#define Add_Character_To_Pattern(menu,ch) \
/* 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)++] = (ch
ar) (ch
);\
(menu)->pattern[(menu)->pindex] = '\0'; }
/*---------------------------------------------------------------------------
(menu)->pattern[(menu)->pindex] = '\0'; }
/*---------------------------------------------------------------------------
@@
-74,7
+74,7
@@
Is_Sub_String(
{
while (*string && *part)
{
{
while (*string && *part)
{
- if (toupper(
*string++) != toupper(*part
))
+ if (toupper(
UChar(*string++)) != toupper(UChar(*part)
))
break;
part++;
}
break;
part++;
}
@@
-121,7
+121,8
@@
_nc_Match_Next_Character_In_Item_Name
bool found = FALSE, passed = FALSE;
int idx, last;
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;
assert(menu && item && *item);
idx = (*item)->index;
@@
-197,7
+198,7
@@
_nc_Match_Next_Character_In_Item_Name
/*---------------------------------------------------------------------------
| Facility : libnmenu
/*---------------------------------------------------------------------------
| 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.
|
| Description : Central dispatcher for the menu. Translates the logical
| request 'c' into a menu action.
@@
-220,7
+221,7
@@
menu_driver(MENU * menu, int c)
ITEM *item;
int my_top_row, rdiff;
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);
if (!menu)
RETURN(E_BAD_ARGUMENT);
@@
-303,7
+304,7
@@
menu_driver(MENU * menu, int c)
else
{
my_top_row += rdiff;
else
{
my_top_row += rdiff;
- while (rdiff-- > 0 && item !=
(ITEM *)
0)
+ while (rdiff-- > 0 && item !=
0 && item->down !=
0)
item = item->down;
}
break;
item = item->down;
}
break;
@@
-316,7
+317,7
@@
menu_driver(MENU * menu, int c)
else
{
my_top_row -= rdiff;
else
{
my_top_row -= rdiff;
- while (rdiff--
&& item != (ITEM *)
0)
+ while (rdiff--
> 0 && item != 0 && item->up !=
0)
item = item->up;
}
break;
item = item->up;
}
break;
@@
-529,14
+530,22
@@
menu_driver(MENU * menu, int c)
}
}
else
}
}
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;
}
}
#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 */
{
/* Adjust the top row if it turns out that the current item unfortunately
doesn't appear in the menu window */