replace "extended" by "keymask" for finer grained checks
This commit is contained in:
+4
-3
@@ -557,7 +557,7 @@ MenuItem *menu_get_item_for_successor_check(Menu *menu)
|
||||
}
|
||||
}
|
||||
|
||||
MenuResult menu_process_input(Menu *menu, MenuToken token, const char *key, bool extended)
|
||||
MenuResult menu_process_input(Menu *menu, MenuToken token, const char *key, unsigned int keymask)
|
||||
{
|
||||
MenuItem *subitem;
|
||||
debug(RPT_DEBUG, "%s(menu=[%s], token=%d, key=\"%s\")", __FUNCTION__,
|
||||
@@ -635,7 +635,7 @@ MenuResult menu_process_input(Menu *menu, MenuToken token, const char *key, bool
|
||||
}
|
||||
return MENURESULT_NONE;
|
||||
case MENUTOKEN_LEFT:
|
||||
if (!extended)
|
||||
if (!(keymask & MENUTOKEN_LEFT))
|
||||
return MENURESULT_NONE;
|
||||
|
||||
subitem = menu_get_subitem(menu, menu->data.menu.selector_pos);
|
||||
@@ -667,7 +667,7 @@ MenuResult menu_process_input(Menu *menu, MenuToken token, const char *key, bool
|
||||
}
|
||||
return MENURESULT_NONE;
|
||||
case MENUTOKEN_RIGHT:
|
||||
if (!extended)
|
||||
if (!(keymask & MENUTOKEN_RIGHT))
|
||||
return MENURESULT_NONE;
|
||||
|
||||
subitem = menu_get_subitem(menu, menu->data.menu.selector_pos);
|
||||
@@ -697,6 +697,7 @@ MenuResult menu_process_input(Menu *menu, MenuToken token, const char *key, bool
|
||||
return MENURESULT_NONE;
|
||||
case MENUTOKEN_OTHER:
|
||||
/* TODO: move to the selected number and enter it */
|
||||
default:
|
||||
return MENURESULT_NONE;
|
||||
}
|
||||
return MENURESULT_ERROR;
|
||||
|
||||
+1
-1
@@ -123,7 +123,7 @@ MenuItem *menu_get_item_for_successor_check(Menu *menu);
|
||||
* key is only used if token is MENUTOKEN_OTHER.
|
||||
* DO NOT CALL THIS FUNCTION, CALL menuitem_process_input INSTEAD !
|
||||
*/
|
||||
MenuResult menu_process_input(Menu *menu, MenuToken token, const char *key, bool extended);
|
||||
MenuResult menu_process_input(Menu *menu, MenuToken token, const char *key, unsigned int keymask);
|
||||
|
||||
/** positions current item pointer on subitem subitem_id. */
|
||||
void menu_select_subitem(Menu *menu, char *subitem_id);
|
||||
|
||||
+22
-17
@@ -57,10 +57,10 @@ void menuitem_update_screen_numeric(MenuItem *item, Screen *s);
|
||||
void menuitem_update_screen_alpha(MenuItem *item, Screen *s);
|
||||
void menuitem_update_screen_ip(MenuItem *item, Screen *s);
|
||||
|
||||
MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const char *key, bool extended);
|
||||
MenuResult menuitem_process_input_numeric(MenuItem *item, MenuToken token, const char *key, bool extended);
|
||||
MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const char *key, bool extended);
|
||||
MenuResult menuitem_process_input_ip(MenuItem *item, MenuToken token, const char *key, bool extended);
|
||||
MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const char *key, unsigned int keymask);
|
||||
MenuResult menuitem_process_input_numeric(MenuItem *item, MenuToken token, const char *key, unsigned int keymask);
|
||||
MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const char *key, unsigned int keymask);
|
||||
MenuResult menuitem_process_input_ip(MenuItem *item, MenuToken token, const char *key, unsigned int keymask);
|
||||
|
||||
|
||||
/* information about string representation of IP addresses */
|
||||
@@ -181,7 +181,7 @@ void (*update_screen_table[NUM_ITEMTYPES]) (MenuItem *item, Screen *s) =
|
||||
menuitem_update_screen_ip
|
||||
};
|
||||
|
||||
MenuResult (*process_input_table[NUM_ITEMTYPES]) (MenuItem *item, MenuToken token, const char *key, bool extended) =
|
||||
MenuResult (*process_input_table[NUM_ITEMTYPES]) (MenuItem *item, MenuToken token, const char *key, unsigned int keymask) =
|
||||
{
|
||||
menu_process_input,
|
||||
NULL,
|
||||
@@ -954,9 +954,9 @@ void menuitem_update_screen_ip(MenuItem *item, Screen *s)
|
||||
|
||||
/******** MENU SCREEN INPUT HANDLING FUNCTIONS ********/
|
||||
|
||||
MenuResult menuitem_process_input(MenuItem *item, MenuToken token, const char *key, bool extended)
|
||||
MenuResult menuitem_process_input(MenuItem *item, MenuToken token, const char *key, unsigned int keymask)
|
||||
{
|
||||
MenuResult (*process_input) (MenuItem *item, MenuToken token, const char *key, bool extended);
|
||||
MenuResult (*process_input) (MenuItem *item, MenuToken token, const char *key, unsigned int keymask);
|
||||
|
||||
debug(RPT_DEBUG, "%s(item=[%s], token=%d, key=\"%s\")", __FUNCTION__,
|
||||
((item != NULL) ? item->id : "(null)"), token, key);
|
||||
@@ -967,14 +967,14 @@ MenuResult menuitem_process_input(MenuItem *item, MenuToken token, const char *k
|
||||
/* Call type specific screen building function */
|
||||
process_input = process_input_table [item->type];
|
||||
if (process_input) {
|
||||
return process_input(item, token, key, extended);
|
||||
return process_input(item, token, key, keymask);
|
||||
} else {
|
||||
report(RPT_ERR, "%s: given menuitem cannot be active", __FUNCTION__);
|
||||
return MENURESULT_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const char *key, bool extended)
|
||||
MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const char *key, unsigned int keymask)
|
||||
{
|
||||
debug(RPT_DEBUG, "%s(item=[%s], token=%d, key=\"%s\")", __FUNCTION__,
|
||||
((item != NULL) ? item->id : "(null)"), token, key);
|
||||
@@ -996,7 +996,8 @@ MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const
|
||||
* because of min(maxvalue, value + stepsize) below.
|
||||
* Wrapping then happens on the next key press.
|
||||
*/
|
||||
if ((!extended) && (item->data.slider.value == item->data.slider.maxvalue))
|
||||
if ((!(keymask & (MENUTOKEN_LEFT | MENUTOKEN_DOWN))) &&
|
||||
(item->data.slider.value == item->data.slider.maxvalue))
|
||||
item->data.slider.value = item->data.slider.minvalue;
|
||||
else
|
||||
item->data.slider.value = min(item->data.slider.maxvalue,
|
||||
@@ -1006,7 +1007,8 @@ MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const
|
||||
return MENURESULT_NONE;
|
||||
case MENUTOKEN_DOWN:
|
||||
case MENUTOKEN_LEFT:
|
||||
if ((!extended) && (item->data.slider.value == item->data.slider.minvalue))
|
||||
if ((!(keymask & (MENUTOKEN_LEFT | MENUTOKEN_UP))) &&
|
||||
(item->data.slider.value == item->data.slider.minvalue))
|
||||
item->data.slider.value = item->data.slider.maxvalue;
|
||||
else
|
||||
item->data.slider.value = max(item->data.slider.minvalue,
|
||||
@@ -1022,7 +1024,7 @@ MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const
|
||||
return MENURESULT_ERROR;
|
||||
}
|
||||
|
||||
MenuResult menuitem_process_input_numeric(MenuItem *item, MenuToken token, const char *key, bool extended)
|
||||
MenuResult menuitem_process_input_numeric(MenuItem *item, MenuToken token, const char *key, unsigned int keymask)
|
||||
{
|
||||
char buf1[MAX_NUMERIC_LEN];
|
||||
char buf2[MAX_NUMERIC_LEN];
|
||||
@@ -1059,7 +1061,7 @@ MenuResult menuitem_process_input_numeric(MenuItem *item, MenuToken token, const
|
||||
}
|
||||
return MENURESULT_NONE;
|
||||
case MENUTOKEN_ENTER:
|
||||
if ((extended) || (str[pos] == '\0')) {
|
||||
if ((keymask & MENUTOKEN_LEFT) || (str[pos] == '\0')) {
|
||||
int value;
|
||||
/* The user completed his input */
|
||||
|
||||
@@ -1173,13 +1175,14 @@ MenuResult menuitem_process_input_numeric(MenuItem *item, MenuToken token, const
|
||||
if (pos >= display_props->width - 2)
|
||||
item->data.numeric.edit_offs++;
|
||||
}
|
||||
default:
|
||||
return MENURESULT_NONE;
|
||||
}
|
||||
}
|
||||
return MENURESULT_ERROR;
|
||||
}
|
||||
|
||||
MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const char *key, bool extended)
|
||||
MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const char *key, unsigned int keymask)
|
||||
{
|
||||
char *p;
|
||||
static char *chars = NULL;
|
||||
@@ -1218,7 +1221,7 @@ MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const c
|
||||
}
|
||||
return MENURESULT_NONE;
|
||||
case MENUTOKEN_ENTER:
|
||||
if ((extended) || (str[item->data.alpha.edit_pos] == '\0')) {
|
||||
if ((keymask & MENUTOKEN_LEFT) || (str[item->data.alpha.edit_pos] == '\0')) {
|
||||
/* The user completed his input */
|
||||
|
||||
/* It's not too short ? */
|
||||
@@ -1321,6 +1324,7 @@ MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const c
|
||||
if (pos >= display_props->width - 2)
|
||||
item->data.alpha.edit_offs++;
|
||||
}
|
||||
default:
|
||||
return MENURESULT_NONE;
|
||||
}
|
||||
}
|
||||
@@ -1328,7 +1332,7 @@ MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const c
|
||||
}
|
||||
|
||||
|
||||
MenuResult menuitem_process_input_ip(MenuItem *item, MenuToken token, const char *key, bool extended)
|
||||
MenuResult menuitem_process_input_ip(MenuItem *item, MenuToken token, const char *key, unsigned int keymask)
|
||||
{
|
||||
/* To make life easy... */
|
||||
char *str = item->data.ip.edit_str;
|
||||
@@ -1355,7 +1359,7 @@ MenuResult menuitem_process_input_ip(MenuItem *item, MenuToken token, const char
|
||||
}
|
||||
return MENURESULT_NONE;
|
||||
case MENUTOKEN_ENTER:
|
||||
if ((extended) || (pos >= item->data.ip.maxlength - 1)) {
|
||||
if ((keymask & MENUTOKEN_LEFT) || (pos >= item->data.ip.maxlength - 1)) {
|
||||
// remove the leading spaces/zeros in each octet-representing string
|
||||
char tmp[40]; // 40 = max. length of IPv4 & IPv6 addresses incl. '\0'
|
||||
char *start = tmp;
|
||||
@@ -1452,6 +1456,7 @@ MenuResult menuitem_process_input_ip(MenuItem *item, MenuToken token, const char
|
||||
item->data.ip.edit_offs++;
|
||||
}
|
||||
}
|
||||
default:
|
||||
return MENURESULT_NONE;
|
||||
}
|
||||
return MENURESULT_ERROR;
|
||||
|
||||
+1
-1
@@ -312,7 +312,7 @@ void menuitem_update_screen(MenuItem *item, Screen *s);
|
||||
/** Does something with the given input.
|
||||
* key is only used if token is MENUTOKEN_OTHER.
|
||||
*/
|
||||
MenuResult menuitem_process_input(MenuItem *item, MenuToken token, const char *key, bool extended);
|
||||
MenuResult menuitem_process_input(MenuItem *item, MenuToken token, const char *key, unsigned int keymask);
|
||||
|
||||
/** returns the Client that owns the MenuItem. item must not be null */
|
||||
Client *menuitem_get_client(MenuItem *item);
|
||||
|
||||
@@ -48,7 +48,7 @@ char *up_key;
|
||||
char *down_key;
|
||||
char *left_key;
|
||||
char *right_key;
|
||||
static int keymask; /* mask of defined menu keys */
|
||||
static unsigned int keymask; /* mask of defined menu keys */
|
||||
|
||||
Screen *menuscreen = NULL;
|
||||
MenuItem *active_menuitem = NULL;
|
||||
@@ -425,9 +425,7 @@ void menuscreen_key_handler(const char *key)
|
||||
return;
|
||||
}
|
||||
|
||||
res = menuitem_process_input(active_menuitem, token, key,
|
||||
(keymask & (MENUTOKEN_LEFT | MENUTOKEN_RIGHT)) ? 1 : 0);
|
||||
|
||||
res = menuitem_process_input(active_menuitem, token, key, keymask);
|
||||
switch (res) {
|
||||
case MENURESULT_ERROR:
|
||||
report(RPT_ERR, "%s: Error from menuitem_process_input", __FUNCTION__);
|
||||
|
||||
Reference in New Issue
Block a user